Diferença entre a pesquisa binária básica para o limite superior e o limite inferior?
No artigohttp://community.topcoder.com/tc?module=Static&d1=tutorials&d2=binarySearch, o autor discute a pesquisa binária. Ele faz uma distinção entre encontrar o valor mais baixo onde algo é verdadeiro e o valor mais alto onde algo é falso. A matriz que está sendo pesquisada se parece com:
falso falso falso verdadeiro verdadeiro
Estou curioso para saber por que esses dois casos são diferentes. Por que você não pode simplesmente encontrar o valor mais baixo que é verdadeiro e subtrair um para encontrar o valor mais alto que é falso?
Edit2: Ok, então eu entendo limite inferior vs superior. Agora, estou tentando entender, ao procurar o menor número inteiro maior ou igual à consulta, por que não podemos simplesmente mudar oif(mid>query)
paraif(mid>=query)
e faça com que ele abaixe em vez do limite superior.
Edit: Aqui está o que o artigo declarou:
"Agora, finalmente chegamos ao código que implementa a pesquisa binária, conforme descrito nesta e na seção anterior:
binary_search(lo, hi, p):
while lo < hi:
mid = lo + (hi-lo)/2
if p(mid) == true:
hi = mid
else:
lo = mid+1
if p(lo) == false:
complain // p(x) is false for all x in S!
return lo // lo is the least x for which p(x) is true
...
Se quiséssemos encontrar o último x para o qual p (x) é falso, conceberíamos (usando uma lógica semelhante à anterior) algo como:
binary_search(lo, hi, p):
while lo < hi:
mid = lo + (hi-lo+1)/2 // note: division truncates
if p(mid) == true:
hi = mid-1
else:
lo = mid
if p(lo) == true:
complain // p(x) is true for all x in S!
return lo // lo is the greatest x for which p(x) is false
. "