2011-01-07 15 views
11

¿Soy yo o no hay una función de búsqueda binaria en Phobos? Tengo una matriz preordenada que quiero buscar con mi propia función de comparación, pero no puedo encontrar nada en std.algorithms o std.containers.Búsqueda binaria en D 2.0 (Phobos)?

Gracias!

Respuesta

16

Uso SortedRange de std.range:

cribbed de 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, usted tiene que utilizar "assumeSorted" ... no esperaba que, gracias! :) – Mehrdad

+6

'find()' (y por lo tanto 'canFind()') es realmente bastante inteligente, utilizando diferentes algoritmos basados ​​en qué tipo de entrada se le da. Para que la búsqueda binaria funcione, los datos deben ordenarse, por lo que 'assumeSorted()' lo hace para que esté, y luego 'find()' y 'canFind()' son lo suficientemente inteligentes como para saber que la búsqueda binaria es la mejor búsqueda entonces, y eso es lo que hacen. –

+3

No es para nada intuitivo si simplemente estás tratando de hacer una búsqueda binaria. – Trass3r