जेन्स के समाधान के लिए काम करेंगे, लेकिन यह हे की एक नहीं बल्कि धीमी गति से चल रहा है समय (एन) है।
एक बेहतर विकल्प है, तो आप एक लंबी सूची
है है - सूची
सॉर्ट - अपने उत्तराधिकारी के साथ हर आइटम की तुलना करें।
ओ (एन लॉग एन) के कुल चलने वाले समय की खोज के लिए Quicksort + O (n) के लिए ओ (एन लॉग एन) का चलने का समय है।
निम्नलिखित छद्म कोड (अब डेल्फी तक पहुंच नहीं है) देखें।
function RemoveDuplicates(const Input: IEnumerable<Integer>): IEnumerable<Integer>;
var
List: IList<Integer>;
i: integer;
begin
List := TCollections.CreateList<Integer>;
List.Assign(Input); //Copy input list to output.
List.Sort;
for i:= List.Count-1 downto 1 do begin
if List[i] = List[i-1] then List.delete(i);
//if Comparer<T>.Equals(List[i], List[i-1]) then ....
end; {for i}
end;
समस्याएं
इस दृष्टिकोण के साथ समस्या यह है कि निर्गम (हो सकता है) इनपुट से एक अलग आदेश है। यह एक समस्या हो सकती है या नहीं भी हो सकती है।
लाभ (या क्यों शब्दकोश बेकार)
छंटाई एक सस्ते ऑपरेशन है अगर यह सबसे तेजी से दृष्टिकोण होगा।
एक शब्दकोश का उपयोग हैशिंग के लिए उच्च निरंतर लागत रखता है।
हालांकि हैशिंग ऑपरेशन ओ (1) है, लेकिन यह बड़ी चाबियों के लिए बहुत महंगा हो सकता है, क्योंकि हैश हमेशा पूरी कुंजी को संसाधित करेगा, जबकि सॉर्टिंग तुलना जल्द ही एक अंतर का पता चल जाएगा। आगे ध्यान दें कि हैशिंग एक साधारण तुलना (लगभग 30x से 100x धीमी) की तुलना में अधिक महंगा संचालन है!
केवल जब सूची बहुत बड़ा है में Dictonary किक की बेहतर asymptotic प्रसारण समय
उत्कृष्ट बिंदु 'अनंत गणना'। – Johan
तो सुरुचिपूर्ण और सरल! –