2012-12-13 120 views
0

我有兩個數組。 Array1擁有醫學術語,而array2則擁有簡單的英語術語。醫學術語數組中有一些非醫學英語單詞(它們在數組1中重複)。這些在array1中是20,000,在array2中是超過15000。比較兩個數組並使用delphi從array1中刪除重複單詞的最快方法是什麼?如何比較delphi中的兩個數組,並從一箇中刪除重複

回答

2

如果數組未經排序,則此方法更快: 1.將來自array2的所有單詞填入字典中。 2.運行array1,查找字典中的每個單詞,如果找到則將其刪除。

步驟1和2都需要O(n)時間。

如果你有一箇舊版本的delphi,你將不得不使用一個字典類,比如你的delphi安裝的MemIni.Pas文件中的THashedStringList。它退化爲非常大的N,但對於20.000個條目,它仍然非常快。

能夠在O(1)中存儲和查找數百萬字符串中的100個的非常快的實現可以在here中找到。該文章是德文,但代碼是英文和可以理解的。

2

如果你的數組排序時候,記住兩pointers-- p1p2array1array2 resply。初始化爲 它們指向array1array2的第一個元素。

對於array1中的每個條目,從第一個開始,查看它是否是數組array2 [p2]。 如果是這樣,只需從array1中刪除它。如果不是, 增量p2直到

((array1[p1] >= array2[p2]) and (array1[p1] < array2[p2+1])), 

刪除array1[p1]如果你發現一個打擊。

需要O(n)時間。 O(nlogn)時間有排序算法。

相關問題