繁体   English   中英

比较链表和自定义链表的运行

[英]Comparing the running of a linked list and a custom linked list

这是一项家庭作业,并不难,只是我的理解可能存在缺陷。

因此,我有两个链表:一个双链表和一个自定义链表 我们只关心两个函数: void add()boolean contains()

MyLinkedList扩展了AbstractList且功能未受影响,但是自定义的linkedList扩展了MyLinkedList并覆盖了contains()方法,这样,当查找元素时,它将始终移至列表的前面(您知道),以缩短查找时间对于更常用的单词。

它还会覆盖add()方法,以便将项目不添加到列表的后面,而是添加到列表的前面。

而且我有一个dictionary.txt文件 ,它是包含(〜10000个单词)的字典。

程序要做的是创建一个MyLinkedList对象和一个自定义的链表对象,并将dictionary.txt单词添加到相应的列表中。 因此,这意味着在MyLinkedList中单词是按顺序排列的,而在自定义链表中则是相​​反的顺序。

然后,程序将输入一个txt文件(例如romeo-and-juliet.txt),如果该单词与MyLinkedList对象中的单词匹配,则遍历该txt文件的前10000个单词,并对自定义链表对象进行单独运行。

问:为什么自定义链表的运行速度比MyLinkedList快? 我的回答是,由于自定义链表将常用搜索词移到最前面,因此查找时间更短,因此它的运行速度比MyLinkedList快。 希望我的回答听起来不错,可以随时进行改进。

现在令人困惑的是,现在我们使用romeo-and-juliet.txt作为字典文件本身,这是发生的情况:

即最短时间到最长时间:

  1. 使用罗密欧与朱丽叶词典的MyLinkedList〜80ms

  2. dictionary.txt上的自定义列表〜160ms

  3. Dictionary.txt上的MyLinkedList〜360ms

  4. 罗密欧与朱丽叶词典上的自定义列表〜390ms

问:为什么会这样? 如果仅将故事中的单词用作词典的范围,为什么自定义链表的速度较慢?

附言:如果问题的任何部分不清楚,请随时告诉我,我将编辑遗漏的内容。

由于自定义列表始终将单词添加到最前面,因此该词典将以与术语读法相反的顺序进行。对于普通词典来说,并没有太大的区别,但是当您使用Romeo和朱丽叶(Juliet)本身就是字典,这将是您最终得到的结果:

Romeo and Juliet :“两个家庭都享有尊严……比朱丽叶和她的罗密欧还要多。”

MyLinkedList :“两个”,“家庭”,“两个”,“相同”,“中”,“尊严”,...

custom list :“ Romeo”,“她”,“和”,“ Juliet”,“ of”,“ this”,“ Than”,...

由于您MyLinkedList顺序搜索R&J的文本,因此,当您使用R&J词典搜索MyLinkedList时,第一个单词将始终位于第一个位置,第二个单词将始终位于第二个位置,依此类推,作为最坏的查找方式,如果单词已经出现在剧本中,则查找速度更快。

也就是说多了,比正常字典查每一个单词起来快得多。


现在,让我们考虑开始针对custom list搜索时发生的情况。 您要搜索的第一个单词是词典中的最后一个单词,如果在播放中出现多次,则为更早的单词。 但是,与使用MyLinkedList搜索时相比,找到它肯定会花费更长的时间。 然后,更糟糕的是,将那个单词移到字典的前面,将第二个单词的“已知”位置推到字典的末尾,就在您搜索它之前。 随着常见单词(例如“ a”,“ the”,“ and”)冒泡到最前面,这将在某种程度上得到缓解,但是它无法克服MyLinkedList搜索所具有的巨大优势。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM