【Programming Pearls】查找所有的变位词
来源:互联网 发布:mysql 视图查询效率 编辑:程序博客网 时间:2024/06/05 16:17
给定一本英语单词词典(每个输入行一个单词,字母都用小写),怎么找出所有的变位词类。例如:“deposit”、“dopiest”、“posited”是同一类变位词。
假如在词典中大约有230000个单词,即使一次简单的变位词比较至少也需要花一微秒的时间,总共需要230000个单词*230000次比较/个单词*1微秒/一次比较=52900*10^6微秒=52900秒=14.7小时。
快速算法:可以采用签名、排序、压缩三个步骤来处理上面的问题。
签名(sign):就是对单词内的字母按字典顺序进行排序,如deposit的签名是deiopst。
排序(sort):对所有的签名按字母顺序进行排序。
压缩(squash):将具有相同的前面进行压缩合并,放一个集合输出。
如下过程:
签名sign和排序的代码如下:
int charcomp(char *x, char *y){ return(*x - *y); }#define WORDMAX 100int main(void){ char word[WORDMAX], sig[WORDMAX];while (scanf("%s", word) != EOF) {strcpy(sig, word);qsort(sig, strlen(sig),sizeof(char), charcomp);printf("%s %s\n", sig, word);}return 0;}
压缩合并squash的代码如下:
int main(void){ char word[MAX], sig[MAX], oldsig[MAX];int linenum = 0;strcpy(oldsig, "");while (scanf("%s %s", sig, word) != EOF)if (strcmp(oldsig, sig) != 0&& linenum > 0)printf("\n");strcpy(oldsig, sig);linenum++;printf("%s ", word);}printf("\n");return 0;}
注:该算法在 230000单词中,总共运行时间为 18 seconds: 其中 4 in sign, 11 in sort and 3 in squash.
- 【Programming Pearls】查找所有的变位词
- 查找变位词的Java实现
- 查找变位词
- Programming Perals 变位词实现
- Programming Pearls
- 找出词典中的所有的变位词 --By LXW
- 在一个词典中找出所有的变位词
- 小程序:递归实现所有变位词的排列组合
- 在字典中查找变位词的方法
- 9.11排序与查找(二)——对字符串数组进行排序,将所有的变位词排在相邻的位置
- 程序员面试金典: 9.11 排序与查找 11.1编写一个方法,对字符串数组进行排序,将所有变位词排在相邻的位置。
- 变位词的实现
- (变位词)的操作
- 查找字典中单词变位词 方法
- 《编程珠玑》之变位词查找
- Programming Pearls tips
- Programming Pearls(1)
- Programming pearls part I
- 网站压力测试工具 webbench 安装配…
- 黑马程序员_this satatic final关键字总结
- MongoDB和MySQL性能测试及其结果分…
- Php操作mongodb的基本操作—增删改…
- 十大抢手的网站压力测试工具
- 【Programming Pearls】查找所有的变位词
- PHP数组吐血级操作方法(数组排序…
- 基于MongoDB的php应用开发
- 项目经理的“势能”培养
- 几款主流PHP框架的优缺点评比
- silverlight 学习
- php解析wsdl入门级经典教程
- C++ List的用法
- notepad++在左边显示explorer