Esta es una forma (Tcl):
proc binarySearch {objetivo de datos} {
establecer menor 0
set upper [expr {[llength $ data] – 1}]
mientras que 1 {
establecer actual [expr {($ más bajo + $ más alto) / 2}]
establecer valor [lindex $ data $ current]
if {$ value == $ goal} {
return $ actual
} elseif {$ lower == $ upper} {
volver -1
} elseif {$ valor <$ objetivo} {
establecer más bajo [expr {$ current + 1}]
} más {
establecer superior [expr {$ actual – 1}]
}
}
}
data
son una lista ordenada (matriz para personas que no son Tclers) de valores. El principio es establecer dos límites, lower
y upper
, mirar el valor en el floor(average(lower, upper))
índice floor(average(lower, upper))
y ajustar los límites si el objetivo aún no se encuentra. Si los límites son iguales y no se encuentra el objetivo, nunca lo vamos a encontrar.
- ¿Existe un algoritmo en línea para calcular la mediana de una secuencia de números si los elementos de la secuencia se pueden agregar o eliminar en cualquier momento?
- ¿Cuáles son las mejores rutinas que podemos adoptar para ser buenos en la programación / diseño de algoritmos?
- ¿Existe un algoritmo borroso que replica la miopía?
- ¿Cuál es el mejor algoritmo de clasificación manual? Por ejemplo, si tuviera una pila de papeles que quisiera ordenar alfabéticamente, ¿cuál sería la forma más eficiente de hacerlo? ¿Qué pasaría si estuvieras de acuerdo con que uno o dos se alejen de su posición ordenada?
- Cómo mejorar en la implementación de algoritmos