2011-01-07 9 views
11

Sono solo io o non esiste una funzione di ricerca binaria in Phobos? Ho una matrice preordinata che voglio cercare con la mia funzione di confronto, ma non riesco a trovare nulla in std.algorithms o std.containers.Ricerca binaria in D 2.0 (Phobos)?

Grazie!

risposta

16

Usa SortedRange da std.range:

cribbed da http://www.digitalmars.com/d/2.0/phobos/std_range.html#SortedRange:

auto a = [ 1, 2, 3, 42, 52, 64 ]; 
auto r = assumeSorted(a); 
assert(r.canFind(3)); 
assert(!r.canFind(32)); 
+0

Ah, è necessario utilizzare "assumeSorted" ... non si aspettava che, grazie! :) – Mehrdad

+6

'find()' (e quindi 'canFind()') è in effetti piuttosto intelligente, utilizzando diversi algoritmi basati sul tipo di input fornito. Affinché la ricerca binaria funzioni, i dati devono essere ordinati, quindi 'assumeStrato()' lo rende così, quindi 'find()' e 'canFind()' sono abbastanza intelligenti da sapere che la ricerca binaria è la migliore ricerca quindi, ed è quello che fanno. –

+3

Non è affatto intuitivo se si sta semplicemente cercando di fare una ricerca binaria. – Trass3r