从空格被删除的句子和单词字母表重新排序的句子改造算法?

时间:2012-12-24 06:05:27

标签: algorithm

我在线查看一些难题,以提高我对算法的了解......

我发现了以下问题:

“你有一个句子,其中有几个单词,空格被移除,单词的字符顺序被洗牌。你有一个字典。写一个算法,用空格和正常字符顺序的单词生成句子。”

我不知道解决这个问题的好方法。

我是算法的新手,但只是看问题,我想我会让程序按照智力的思维去做。

这是我能想到的:

- 首先从词典中找出手动常见的短英语单词,如“is”“the”“if”等,并放入数据集-1。

- 然后找出数据集1中的单词排列(例如“si”,“eht”或“eth”或“fi”)并输入数据集-2中
- 然后从输入sentense中找出哪些字符序列与dataset2的单词匹配并将它们放在数据集-3中并在输入句子中插入空格而不是找到的那些。

- 对于其他单词,我会执行排列,以便从字典中找出单词。

我是算法的新手......这是一个糟糕的解决方案吗?

2 个答案:

答案 0 :(得分:1)

这似乎是一个非常好的解决方案,

一般来说,判断算法有两个参数。

  1. 正确性 - 算法是否提供了正确的答案。

  2. 资源 - 提供答案所需的时间或存储空间。

  3. 通常在这两个参数之间存在权衡。

    所以例如你的字典的大小决定了你可能会乱写的句子 重建,为您提供更多输入的正确答案, 但整个搜索过程需要更长时间,需要更多存储空间。

    您提出的问题的难点在于您需要计算排列,并且有 LOT

    所以检查它们都很昂贵,一个好的方法是做你建议的,创建一小部分常用单词并首先检查它们,这样平均情况更好。

    注意:只是说您检查排列/搜索是否正常,但最后您需要指定执行此操作的确切方法。

    目前你写的是一个算法的想法,但它不允许你采取给定的输入并机械地计算出输出。

答案 1 :(得分:0)

实际上,开始按字长分割字典可能是明智的。

然后尝试找到可以使用字母可用的最大单词,而不是找到最小的单词。短语更常见,因此更难缩小范围。 IE:它真的是“如果”还是“无花果”。

然后,对于每个单词长度w,您可以一次进行w个字符。

但仍然有很多可能的组合,仅仅是因为你发现了一个有效的单词,并不意味着它是正确的单词。一旦你经历了所有的子串,其中应该有O(c^4*d)之类的东西,其中d是字典中的单词数,c是句子中的字符数。实际上,如果字典是按字长排序的,那么它将会比这要短得多。然后你必须采用有效的单词,并找出有效的顺序,以便使用所有字符。可能有多种解决方案。