分类:
2008-08-03 00:29:21
定义 操作 F(A1,A2,A3....An)=P(A1)*P(A2)*P(A3).....P(An); 其中 P(A1)= PrimeNum[A1-'a'], PrimeNum 是从2开始的连续 素数 数组(2,3,5,7,.....) 示例: F(bad)=P(b)*P(a)*P(d)=3*2*7=42 遍历字典,求每个单词的F()操作值,如果相等就是,不等就下一个 |
chinaunix网友2008-11-19 19:04:39
一个26个维度的向量 ,有点恐怖,呵呵 :) 不知道我理解你的意思没有,你说的应该和下面类似: bit a[26]; 每个字母对应一个biti位,相当于二进制中的一位,当作权重 ps: 文章中的解答不是我想出的 :(
chinaunix网友2008-11-19 00:14:10
这个问题...是否可以为每个字母定义一个单元向量: a=[1] b=[0][1] c=[0][0][1] ...... z=[0]...[0][1] 然后定义运算 f(x)->y,将字符串x映射为一个26个维度的向量; 同时对目标单词和字典里的单词做这种运算,再比较他们是否相等就是了。 这种办法虽然麻烦一点,但复杂度和你解答里的应该是差不多的; 其实,如果loot和lot这样的也可以算是兄弟单词的话,这个向量的表示就可以不用byte数组了,就可以直接用bit sequence(因为只关心某个字母有没有而不关心其出现次数),这样会更快一点; 而且,如果允许对字典做预先处理的话,那么事先在字典里把f(x)做掉会好些,顺便排个序什么的......