這是一項家庭作業,它並不難,這只是我的理解可能有缺陷。比較鏈接列表和自定義鏈接列表的運行
所以我有兩個鏈表:一個雙向鏈表和一個自定義鏈表。我們只關心兩個函數:void add()和布爾值包含()。
MyLinkedList擴展AbstractList中和功能不變,但自定義LinkedList的延伸MyLinkedList和覆蓋了包括()方法,當一個元素被擡起頭來,它總是會被移動到列表的前面,你知道,以提高更頻繁使用的單詞的查找時間。
它也覆蓋了add()方法,使得項目不會添加到列表的後面,而是添加到列表的最前面。
而且我有一個dictionary.txt文件這是一個包含(〜10000字)的字典。
程序所做的是創建一個MyLinkedList對象和一個自定義鏈表對象,並將dictionary.txt單詞添加到相應的列表中。所以這應該意味着,在MyLinkedList中,單詞是按順序排列的,而在自定義鏈接列表中則是相反的順序。
然後該程序接受一個txt文件,例如romeo-and-juliet.txt並遍歷該txt文件的前10000個單詞,如果單詞匹配MyLinkedList對象中的單詞併爲自定義鏈表對象執行單獨運行。
問:爲什麼自定義鏈接列表運行得比MyLinkedList快?我的答案是,由於自定義鏈接列表將經常使用的搜索術語移到前面,所以查找時間更短,所以它的運行速度將比MyLinkedList快。我希望我的回答聽起來不錯,隨時可以改進。
現在一個令人費解的是,現在我們使用的是羅密歐和juliet.txt作爲字典文件本身,這是發生了什麼:
即最短的時間最長的一次:
MyLinkedList使用羅密歐和朱麗葉字典〜上dictionary.txt 80ms的
自定義列表〜160毫秒
MyLinkedList上在羅密歐和朱麗葉字典〜dictionary.txt〜360ms
自定義列表390ms
問:爲什麼會這樣?如果我們只使用故事中的詞語作爲詞典的範圍,那爲什麼它對自定義鏈表更慢?
P.S.如果問題的任何部分不清楚,請隨時告訴我,我會編輯我遺漏的任何內容。
當您使用R&J作爲字典,你對它進行排序和/或刪除重複的單詞或只使用原始文本? – azurefrog
我相信重複項不會被刪除,因爲add()函數會刪除任何鏈接列表類的重複項。 –