C# d)争议裁决委员会)

C# d)争议裁决委员会),c#,mysql,regex,C#,Mysql,Regex,我的解决方案是使用两个表->一个表将只是字典中每个可能的字母组合的列表,并按字母顺序排列组件字母。(即测试将是ESTT,测试将是ERSTT,DAD将是ADD) 第二个表将包含表1的每个单词和对键的引用 表1-字母输入法 Index Letters 1 ESTT 2 ESTTER 3 EST 4 ADD 5 APST 在表1中,按字母顺序插入单词字母-test变为estt 表二-词语 Index LetterInWordIndex Word 1

我的解决方案是使用两个表->一个表将只是字典中每个可能的字母组合的列表,并按字母顺序排列组件字母。(即测试将是ESTT,测试将是ERSTT,DAD将是ADD)

第二个表将包含表1的每个单词和对键的引用

表1-字母输入法

Index Letters
1     ESTT
2     ESTTER
3     EST
4     ADD
5     APST
在表1中,按字母顺序插入单词字母-test变为estt

表二-词语

Index LetterInWordIndex  Word
1     1                  TEST
2     2                  TESTER
3     3                  SET
4     4                  ADD
5     4                  DAD
6     5                  SPAT
7     5                  PAST               
在表2中插入具有适当单词和索引引用的单词

这将是一个一对多关系->LetterInWord表中的一个条目在Word表中可能有多个条目

非通配符查找: 假设我的输入字母已设置 按字母顺序排列

然后在查找中,从LetterInWord中选择所有“字母”,其中字母=值并连接到表单词上-一个查询中的输出是仅包含这些字母的所有单词的列表

现在是通配符: 说我的输入字母是EST* 记住长度-4 去掉通配符-你得到EST(确保你按字母顺序排序)
现在查找字母包含EST和字母长度hi的所有情况,这相当于在字典中查找某些字母的所有排列(这很难),但是如果您在这里搜索排列,您将找到许多算法来获取字母的所有排列,那么您只需找到正确的子集。。。。(BTW:通配符使这更糟糕)第42部分,为什么每个CS学生都应该学习数据结构课程。你可以考虑为你的更新创建一些新的问题;你可能会对一个新问题更加关注。另外:我已经计划写一篇关于如何使用trie解决您的问题的博客文章一段时间了;我只是从来没有时间这么做。如果我真的发布了那篇文章,我会回到这里更新这个问题。如果你想对深度优先搜索的顺序进行排序,以匹配languagues字母表的分布,你可以更快地获得结果,甚至可以解决如何在磁盘上存储尝试的问题:。nets Lovely XML Serialization是你的朋友。如果你建立一个单词的trie按字母顺序排序,速度会快得多,不是吗?在您的示例中,trie将具有OP、OPS、OPST、OPSS、OPSST,每个单词的结束指针都指向其所有的字谜。然后,您必须为原始字符串的每个子集检查一次trie。如果我没有弄错的话,那就是O(2^n),其中n是机架中的字母数-对于7个标准机架来说,这不是问题,即使有巨大的字典。@configurator:您会注意到,我没有说该团队是否向我提供了报价。他们没有。(虽然这是一个没有实际意义的问题,因为团队在几周后解散了。)我没有被微软所有面试过我的团队录用;VB团队根据我的实习情况而不是面试情况向我提供了一份工作。@Joan:我的意思是面试官给招聘经理发了一封电子邮件,邮件的标题是“不雇用”,意思是“不要向这个家伙提供工作机会”。显然,那天我的采访并不顺利,不过一个有趣的缓解因素是那天下了一场暴风雪,本来要采访我的人都没有出现。有些面试官似乎有些措手不及。这是解决这个问题的一个非常典型的算法。当问题是“给定一个大小为n的机架,找到与机架完全匹配的所有n字母单词”时,它的性能非常好。不幸的是,当被问及“给定一个大小为n的机架,查找与机架匹配的所有n个或更少字母的单词”时,您的算法执行得很差。因为这是原始海报实际面临的问题,所以我不推荐这种算法。
           ^root^
           / | \
          O  P  S
          |  | / \
          P$ O \  T   
         /  \|  \ |
         |   |   \|
         |   |    O
         |   T$   |
          \  |    P$
           \ |   /
            \|  /  
             | /
             |/   
             S$
Index Letters
1     ESTT
2     ESTTER
3     EST
4     ADD
5     APST
Index LetterInWordIndex  Word
1     1                  TEST
2     2                  TESTER
3     3                  SET
4     4                  ADD
5     4                  DAD
6     5                  SPAT
7     5                  PAST