cw算法
1. 词典编码的算法步骤
步骤一:开始的时候词典包含所有可能的单字符,而当前前缀P是空的。
步骤二:当前字符C:=字符流中的下一个字符。
步骤三:判断P+C是否在词典中。
如果是,则用C扩展P,即P=P+C
如果否,则
①输出代表当前前缀P的码字
②将前缀-字符串P+C添加到字典中
③令P:=C
步骤四:判断字符流中是否还有字符需要编码。
如果是,则返回到步骤二
如果不是,输出代表当前前缀P的码字,并结束 步骤一:在开始译码时词典包含所有可能的前缀根。
步骤二:cW:=码字流中的第一个码字。
步骤三:输出当前缀符串string.cW到字符流。
步骤四:先前码字pW:=当前码字cW.
步骤五:当前码字cW:=码字流中的下一个码字。
步骤六:判断先前缀符串是否在词典中。
如果“是”,则:1把当前缀符串string.cW输出到字符流;2当前前缀p:=先前缀符串pW;3当前前缀符串string.cW的第一个字符;4把缀符串P+C添加到词典中。
如果“否”,则:1当前前缀p:=先前缀符串pW;2当前字符C:=当前缀符串pW的第一个字符;3输出缀符串P+C到字符流,然后把它添加到词典中。
步骤七:判断码字流中是否还有码字要译。
如果“是”,就返回到步骤4,如果“否”,结束。
2. 对抗样本之CW原理&coding
本文采用手稿模拟的角度,尽量使读者较为直白的面对冷冰冰的公式。
抛去CW算法不谈。一般来说,生成样本算法都要保证如下两个条件:
条件一,保证了生成样本与原始干净样本尽量的相似。
条件二,保证了生成样本确实能成功攻击模型。
仔细想想,这两个条件是不是就满足了生成样本的全部需求哩。
问题定义清楚了,那问题的数学描述就成了关键。
数学描述:
其手稿模拟如下:
CW算法手稿模拟:
常人思路攻击:
CW攻击:
CW是一个基于优化的攻击,主要调节的参数是c和k,看你自己的需要了。它的优点在于,可以调节置信度,生成的扰动小,可以破解很多的防御方法,缺点是,很慢。
欢迎留言,力所能及,必答之。