O DCTLib está certo, mas esqueça a matemática por um segundo.
Pela sua lógica então, n- ar deve ser o mais rápido. Mas se você pensar bem, n- ar é exatamente igual a uma pesquisa de iteração regular (apenas iterando pela lista 1 por 1, mas na ordem inversa). Primeiro, você seleciona o último item (ou o penúltimo) na lista e compara esse valor ao seu valor de comparação. Em seguida, você remove esse item da sua lista e escolhe o último item na nova lista, que é apenas o penúltimo valor da matriz. Cada vez, você eliminaria apenas 1 valor por vez até encontrar seu valor.
Em vez disso, você deve pensar assim - como faço para eliminar o máximo de valores da lista a cada iteração? Em uma pesquisa binária, você sempre elimina metade da lista. Em uma pesquisa ternária, existe a possibilidade (33,33% de chance, na verdade) de você eliminar 2/3 da lista, mas há uma chance ainda maior (66,66%) de eliminar apenas 1/3 da lista. para calcular O (n), você precisa observar o pior cenário, que é 1/3, menor que 1/2. À medida que você se aproxima cada vez mais de n, fica ainda pior.
Não apenas o pior cenário será aprimorado com a pesquisa binária, mas também o tempo médio . Observando o valor esperado (que parte da lista podemos remover em média), usamos esta fórmula:
(P_lower) x (parte que podemos remover se for menor) + (P_higher) x (parte que podemos remover se for maior) = E
Para pesquisa binária, isso é .5x.5 + .5x.5 = .5 (sempre removemos metade da lista). Para pesquisas ternárias, esse valor é .666x.333 + .333x.666 = 0.44, ou a cada etapa, provavelmente removeremos apenas 44% da lista, tornando-a menos eficiente que a pesquisa binária, em média. Esse valor atinge o pico em 1/2 (metade da lista) e diminui quanto mais você chegar a n (iteração reversa) e 0 (iteração regular).
Ok, então eu menti .. há um pouco de matemática envolvida, mas espero que ajude!