博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《编程珠玑》学习总结2-变位词
阅读量:2439 次
发布时间:2019-05-10

本文共 1825 字,大约阅读时间需要 6 分钟。

    第二章主要围绕三个问题

1、给定一个最多包含40亿个随机排列的32位整数的顺序文件,找出一个不在文件中的32位整数

2、给定一个n元一维向量,循环左移i个位置,如n=8,i=3时,abcdefgh变为defghabc

3、如pots、stop和stops互为变位词,每个单词都可以通过其他单词改变字母顺序得到,找出字典中所有变位词

     对于1、主要考虑2分搜索

      对于3,百度笔试题刚考过,伤感,当时给略过去了,现在还是得看啊

      如果考虑暴力解法,含有n个字母的单词有n!种排列,还是很大的数量级的,书上是利用标志单词,标志则为对单词的字母进行排序后的结果,对字典遍历并对每个单词进行标记,还是很简单的事情,然后集中相同标志的单词,具有相同标志的单词,就是互为变位词了。

      配套代码的实现如下:

sign.c ,对每个单词进行标记,通过调用stdlib.h的qsort对单词进行快速排序

/* Copyright (C) 1999 Lucent Technologies *//* From 'Programming Pearls' by Jon Bentley *//* sign.c -- sign each line of a file for finding anagrams    The input line "stop" gives the output line "opst stop" */#include 
#include
#include
#define WORDMAX 100int charcomp(char *x, char *y){ return *x - *y;}int main(){ char word[WORDMAX], sig[WORDMAX]; while (scanf("%s%s", sig, word) != EOF) { strcpy(sig, word); qsort(sig, strlen(sig), sizeof(char), charcomp); printf("%s %s\n", sig, word); } return 0;}
排序使用shell的内置命令sort,可参考

输出squah.c,不同标记就输出一个换行,相同标记则输出单词,使具有相同标记的单词都在同一行

/* Copyright (C) 1999 Lucent Technologies *//* From 'Programming Pearls' by Jon Bentley *//* squash.c -- print anagram classes on a single line    The input lines "opst pots" and "opst stop" go to "pots stop" */#include 
#include
#include
#define WORDMAX 100int main(){ char word[WORDMAX], sig[WORDMAX], oldsig[WORDMAX]; 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;}
楼主下载了个字典文件包含21w个单词,如下:

不得不说,linux的管道是个好东东,最终运行命令如下:

xia@Ubuntu:~/perl$ ./sign < DICT.TXT | sort | ./squah > list
生成list文件按照标志排序好了,有多个单词一行的则为变位词了,如:

     就这样吧

转载地址:http://vmcqb.baihongyu.com/

你可能感兴趣的文章
curl请求失败重复请求_HTTP请求的curl指南
查看>>
工作证明与股权证明_社会证明原则
查看>>
字符串charCodeAt()方法
查看>>
getusermedia_如何使用getUserMedia()
查看>>
React Context API
查看>>
webassembly_WebAssembly简介
查看>>
react useref_如何使用useRef React钩子
查看>>
axios 请求node_使用Axios的Node中的HTTP请求
查看>>
node http模块_Node http模块
查看>>
如何使用Hugo建立博客
查看>>
macos sqlite_如何在macOS上安装SQLite
查看>>
next. js_Next.js应用程序捆绑
查看>>
setimmediate_了解setImmediate()
查看>>
json简介_JSON简介
查看>>
npm 语义化发布_使用npm的语义版本控制
查看>>
如何在ES模块中使用顶级等待
查看>>
卸载npm和安装npm_使用`npm uninstall`卸载npm软件包
查看>>
ER数据模型简介
查看>>
Object valueOf()方法
查看>>
git可视化工具使用_使用Go可视化您本地的Git贡献
查看>>