Data structures 数据结构问题

Data structures 数据结构问题,data-structures,Data Structures,请帮助我找到这些有趣的数据结构问题的优化解决方案: 给定一个包含约1000万个单词的文件,设计一个用于查找字谜的数据结构 编写一个程序来显示文件中十个最常见的单词,这样您的程序在所有复杂度度量中都是高效的 您有一个包含数百万行数据的文件。只有两行是相同的;其余的都是独一无二的。每一行都很长,甚至可能无法放入内存中。找到相同直线的最有效解决方案是什么 添加更多问题: 4) (由MS询问)您将获得一个长度为3的字符串数组。数组中的一个字符串标记为开始字符串,另一个字符串标记为结束字符串。您必须将起始

请帮助我找到这些有趣的数据结构问题的优化解决方案:

  • 给定一个包含约1000万个单词的文件,设计一个用于查找字谜的数据结构
  • 编写一个程序来显示文件中十个最常见的单词,这样您的程序在所有复杂度度量中都是高效的
  • 您有一个包含数百万行数据的文件。只有两行是相同的;其余的都是独一无二的。每一行都很长,甚至可能无法放入内存中。找到相同直线的最有效解决方案是什么
  • 添加更多问题:

    4) (由MS询问)您将获得一个长度为3的字符串数组。数组中的一个字符串标记为开始字符串,另一个字符串标记为结束字符串。您必须将起始字符串转换为结束字符串,前提是您将生成的中间字符串与其前一个字符串仅相差一个字符,并且该字符串应存在于输入数组中。 如果输入是

    Array: {"fat", "tab", "eat", "see", "tub", "fab", "rat", "sel"}
    Start: "fat"
    End: "tub"
    Then the output should be 
    fat -> fab -> tab -> tub
    
    我试图解决第三个问题,并提出了两种可能的方法: 1) 只读所有行的第一个字,然后删除所有第一个字与任何其他行的第一个字不匹配的行。继续以这种方式获取剩余行的连续单词,直到只剩下两行。你得到你的答案了! 2) 将每行转换为较小的表示形式。这可以通过以简短的二进制形式对每个字进行编码,然后对代表每行的位进行异或运算来实现


    编辑:我现在收集了大量的数据结构问题,如果有人有兴趣在这里讨论这些问题,那么我可以发布更多的问题。

    我认为Q2的答案可以是使用Hashmap或TRIE来存储单词及其频率。这两种结构都提供了良好的查找顺序。对于文件中的每个单词,请检查该单词是否已存在。如果是,则增加其计数,否则添加单词并将计数初始化为1

    这个问题最近在微软的采访中被问到了我的一个朋友。他提出的解决方案与此类似。维护一个HashMap和一个双链接列表。DLL将根据词频进行排序。每当向文档中添加新词时,DLL都会相应地修改,以反映当前已排序的列表


    我认为最有效的解决方案是使用带有双链表的TRIE。

    我为第四个问题提出的解决方案是绘制数组中所有单词的图表。 首先创建一个邻接矩阵,如果一个单词可以直接转换为另一个单词,则该矩阵的值为1

    现在使用深度优先搜索查找从开始字符串到结束字符串的路径,如果找到,则返回路径


    请注意,您必须在此处修改深度优先搜索,以存储到目前为止您所遍历的路径。为此,我没有将正在访问的节点推到堆栈中,而是将完整路径推到堆栈中,这样当找到元素时,我就有了从开始字符串到结束字符串的完整路径。

    我猜第四个问题可以通过回溯解决,但不确定这是否是最优的,昨天试过了,解决方案似乎对我有效。

    我们可以使用超立方体(在图论中)解决第四个问题,因此长度为3的字符串可以在Q3中表示为起始字符串“000”,与起始字符串不同的字符串可以分别表示为“001”、“100”和“010”,结束字符串为“111”

    由于超立方体是连通图,我们至少可以找到一条从开始字符串到结束字符串的路径。
    如果我们设法找到最短路径(这意味着没有顶点,即没有字符串重复),问题就可以解决

    @S.Lott:如果我给他们写信,Ashish可以接受这份工作。我就拿薪水:)他们看起来很有趣-把你的代码发到现在为止;)@洛特:你应该获得这个想法的专利。阿希什:试着发表你自己的尝试并征求评论,而不仅仅是问答案。@Ashish。这个论坛所说的“问你的问题”通常比“随便问一个问题”要狭隘一些。一般来说,我们非常讨厌(a)家庭作业,(b)通过谷歌搜索很容易找到,或者(c)让我们为你工作的开放式问题。你的问题看起来像(c)。如果不是,你可以自由地修复它,以澄清你想要什么。这里优先考虑具体、详细的问题。如果你的问题真的很糟糕,我们会投票结束它。它没有关闭:通常这意味着我们有一些希望,你会改善它。谢谢你!你真是个天才!