Chinaunix首页 | 论坛 | 博客
  • 博客访问: 721948
  • 博文数量: 251
  • 博客积分: 10367
  • 博客等级: 上将
  • 技术积分: 2750
  • 用 户 组: 普通用户
  • 注册时间: 2007-05-10 14:43
文章分类

全部博文(251)

文章存档

2009年(2)

2008年(86)

2007年(163)

分类:

2008-08-03 00:29:21

只是收集一下
 
百度:
 
1.  
给你一个单词a,如果通过交换单词中字母的顺序可以得到另外的单词b,那么定义b是a的兄弟单词。现在给你一个字典,用户输入一个单词,让你根据字典找出这个单词有多少个兄弟单词。
 
解答:
定义 操作 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()操作值,如果相等就是,不等就下一个
 
阅读(934) | 评论(2) | 转发(0) |
给主人留下些什么吧!~~

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)做掉会好些,顺便排个序什么的......