Data structures 从复杂性的角度确定问题的最佳数据结构

Data structures 从复杂性的角度确定问题的最佳数据结构,data-structures,Data Structures,因此,我在几年前罗马尼亚的一次编程奥林匹克竞赛中发现了以下问题: 假设你有一种正好有N个单词的语言。如果两个单词的前K个字母相同,而K+1个字母不同,则称为K-相似 T字之间的相似度如果任意两个字是K-相似但不是(K+1)-相似,则称为K 给定M个随机词,确定它们之间的相似度 我想知道在实现这个程序的复杂性方面,什么样的数据结构才是最好的 我尝试过使用字符串数组或字符数组来实现它 示例:对于asdf、asdffff和asdg,相似度应为3。根据您的描述,听起来您在寻找最长的通用前缀。这不需要任何

因此,我在几年前罗马尼亚的一次编程奥林匹克竞赛中发现了以下问题:

假设你有一种正好有N个单词的语言。如果两个单词的前K个字母相同,而K+1个字母不同,则称为K-相似

T字之间的相似度如果任意两个字是K-相似但不是(K+1)-相似,则称为K

给定M个随机词,确定它们之间的相似度

我想知道在实现这个程序的复杂性方面,什么样的数据结构才是最好的

我尝试过使用字符串数组或字符数组来实现它


示例:对于asdf、asdffff和asdg,相似度应为3。

根据您的描述,听起来您在寻找最长的通用前缀。这不需要任何特殊的数据结构

从前两个词开始,“asdf”和“adsfff”。逐个字符进行比较,直到发现不匹配。最后你会得到一个普通的字母“asdf”

然后将下一个单词与该比较的结果进行比较。您将“asdf”与“asdg”进行比较,发现第4个字符不匹配,因此您现在最长的通用前缀是“asd”

你可以通过这种方式继续浏览列表中的所有单词。如果你遇到一个以“a”以外的任何词开头的词,那么你的最长公共前缀是0,你可以退出


根据您在评论中提出的问题和澄清,以上内容将解决问题。然而,我仍然认为您对这个问题的理解是不正确的。

从您的描述中,听起来您在寻找最长的通用前缀。这不需要任何特殊的数据结构

从前两个词开始,“asdf”和“adsfff”。逐个字符进行比较,直到发现不匹配。最后你会得到一个普通的字母“asdf”

然后将下一个单词与该比较的结果进行比较。您将“asdf”与“asdg”进行比较,发现第4个字符不匹配,因此您现在最长的通用前缀是“asd”

你可以通过这种方式继续浏览列表中的所有单词。如果你遇到一个以“a”以外的任何词开头的词,那么你的最长公共前缀是0,你可以退出


根据您在评论中提出的问题和澄清,以上内容将解决问题。然而,我仍然认为你对这个问题的理解是不正确的。

你的例子与描述相矛盾。你说,“T字之间的相似度,如果任何两个字是K-相似但不是(K+1)-相似的话,那么它就是K。”根据这一点,你的例子的答案应该是4,因为“asdf”和“asdffff”的K-相似性是4。如果你看一下定义,它说任何两个字都是K-simmilar而不是K+1-simmilar。Asdf和asdg相似3,Asdf和asdffff相似4,asdffff和asdg相似3。因此,包含这3个单词的集合具有3级的相似性。或者至少这是问题的jist,如果我的措辞不明显,我很抱歉,那么如果单词是“asdf”、“asdffff”和“xyzy”,结果会是什么?是4点吗?或者0?应该为零。您的示例与描述相矛盾。你说,“T字之间的相似度,如果任何两个字是K-相似但不是(K+1)-相似的话,那么它就是K。”根据这一点,你的例子的答案应该是4,因为“asdf”和“asdffff”的K-相似性是4。如果你看一下定义,它说任何两个字都是K-simmilar而不是K+1-simmilar。Asdf和asdg相似3,Asdf和asdffff相似4,asdffff和asdg相似3。因此,包含这3个单词的集合具有3级的相似性。或者至少这是问题的jist,如果我的措辞不明显,我很抱歉,那么如果单词是“asdf”、“asdffff”和“xyzy”,结果会是什么?是4点吗?还是0?根据问题提供的示例,我认为我的解释是正确的。问题是这个问题是在数据结构的上下文中给出的。这意味着,例如,如果对单词使用数组,则应该从头开始实现该数组。此外,结构必须是最优的。这意味着,如果一个链表(或堆栈或队列)就足够了,那么就不能使用数组(如果不需要数组提供的随机访问)(同样,如果有另一种结构可以从复杂性的角度更容易地进行比较,我们就不能使用字符串或字符数组。)根据问题提供的示例,我认为我的解释是正确的。问题是,问题是在数据结构的上下文中给出的。这意味着,例如,如果您对单词使用数组,您应该从头开始实现该数组。此外,结构必须是最佳的。这意味着如果t就足够了(或堆栈或队列),那么您就不能使用数组(如果您不需要数组提供的随机访问)。此外,我们必须确定每个单词的数据结构(同样,如果存在另一种结构,可以从复杂性角度更容易地进行比较,我们就不能使用字符串或字符数组。)