变位词问题

原创 2010年06月01日 21:19:00

  变位词问题:给定一个英语字典,找出其中的所有变位词集合,例如,"pots","stop"和"tops"互为变位词,因为每一个单词都可以通过改变其他单词中字母的顺序来得到。
  如果考虑单词中字母的所有可能排列,那算法会出奇的低效和复杂。实际上,每个变位词相当于一个等价类。算法的关键是要选择一个标识来标识这个等价类,使得在相同变位词类中的单词具有相同的标识。然后,将所有相同标识的单词集中在一起。我们可以使用基于排序的标识(可见要使用排序技术),将单词中的字母按照字母表排序。例如上面标识即为opst。
  可以用三个程序来,通过协同工作来实现,第一个程序用来标识单词,第一个程序排序标识后的文件,第三个将这些单词压缩为每个变位词类占一行的形式。运行时让这三个独立程序用
管道连接,即可完成处理过程。
  (1)sign程序:为单词建立标识。假定文件中没有超过一百个字母的单词,并且输入文件仅包含小写字母和换行符。

  (2)sort程序:对标识后的文件排序。可以使用Linux/Unix中现成的sort程序。
  (3)squash程序:将所有单词压缩为每个变位词类占一行的形式。

  通过下面的命令构建变位词列表:sign <dictinary | sort | squash >gramilist。将文件dictionary输入到程序sign,经过处理最后输出到gramlist文件。
  这里通过使用标识这种数据结构,使算法效率大大提高。可见好的数据结构设计可以将大程序缩减为小程序,可以节省时间和空间、提高可移植性和可维护性。数据的表现形式是程序设计的根本。常用的原则有:
  (1)使用数组重新编写重复代码。
  (2)封装复杂结构。当需要非常复杂的数据结构时,使用抽象术语进行定义,并将操作表示为类。
  (3)尽可能使用高级工具。如超文本、名字-值对、电子表格、数据库、特定领域的编程语言等,都是特定问题领域中的强大工具。
  (4)从数据得出程序的结构。在编写代码之前,优秀的程序员会彻底理解输入、输出和中间数据结构,并围绕这些结构创建程序。
  关键算法设计思想:排序策略、标识等价类、协同程序。

判断两个字符串是否互为变位词

题目:     Write a method to decide if two strings are anagrams or not.     翻译:     写一个方法来判断两个...
  • wufengui1315
  • wufengui1315
  • 2014-07-03 17:02:19
  • 2812

如何快速找出单词的变位词

给定一个英语字典,找出其中的所有变位词的集合。例如,”pots”、”stop”和”tops”互为变位词,因为每一个单词都可以通过改变其他单词中字幕的顺序来得到 解决这个问题最直接的想法就是全排列给定...
  • dlengong
  • dlengong
  • 2012-02-15 19:44:10
  • 4255

简单的英文变位词聚类算法

有时,简单的算法也有其实用的意义,由于之前公司内部搜索引擎优化的需要,我根据《编程珠玑》中查找英文单词变位词的算法,来实现搜索纠错的功能。 在搜索时,有时记不住单词,会出现拼写错误的情况,例如,搜索...
  • dyllove98
  • dyllove98
  • 2013-06-14 22:33:03
  • 1352

变位词问题求解

变位词问题,假设有a和b两个字符串,判断b是否为a子串的变位词。例如a = &quot;hello&quot; 时b=&quot;ell&quot;、&quot;lel&quot; 、&quot;le...
  • foreveyking
  • foreveyking
  • 2018-03-27 14:31:40
  • 10

变位词查询

  • 2015年05月17日 22:40
  • 127KB
  • 下载

变位词

题目:找到词典中某词的变位词 源自编程珠玑 程序是自己的想法和思路 与书一样纯属巧合程序:不能运行 只有关键函数 和类#include#includeusing namespace std;const...
  • pouloghost
  • pouloghost
  • 2009-12-13 20:35:00
  • 334

经典算法面试题目-判断两个字符串是否是变位词(1.4)

题目Write a method to decide if two strings are anagrams or not.写一个函数判断两个字符串是否是变位词。解答变位词(anagrams)指的是组...
  • qq_26525215
  • qq_26525215
  • 2016-07-23 23:30:19
  • 13492

第二章 啊哈!算法(变位词)

给定一个英语字典,找出其中的所有变位词集合。例如,“pots”、“stop”和“tops”互为变位词,因为每一个单词都可以通过改变其他单词中字母的顺序来得到。 “解决这个问题的许多方法都出奇地低...
  • sgs1018
  • sgs1018
  • 2014-09-09 21:58:54
  • 1053

(五)判断两个词是否为变位词的算法

Given two strings s and t, write a function to determine if t is an anagram of s. For example, s...
  • qixinbruce
  • qixinbruce
  • 2016-04-06 15:10:49
  • 685

J - 变位词

Description Mr. Right有一个奇怪的嗜好,就是看见一个单词就有找它所有的变位词的冲动。一个单词的变位词就是该单词所有字母的一个排列。 Input 输入数据第...
  • Joe19310
  • Joe19310
  • 2017-06-03 16:53:46
  • 312
收藏助手
不良信息举报
您举报文章:变位词问题
举报原因:
原因补充:

(最多只允许输入30个字)