Мне сказали, чтобы найти эффективность этого кода, и мы уже ~ 1 час (я и мой партнер) пытались выяснить, что этот код действительно делает.Поиск эффективности поиска? алгоритм. C++
Мы предположили, что это алгоритм поиска, но мы не можем найти способ, чтобы заставить его работать без попадания в бесконечный цикл:
int busq(int *v, int x, int b, int a){
int m1, m2;
int result;
m1 = (b+a)/3;
m2 = 2*m1;
if (v[m1] == x)
result = m1;
else
if (v[m2] == x)
result = m2;
else
if (x<v[m1])
result = busq(v, x, b, m1-1);
else
if (x>v[m2])
result = busq(v, x, m2+1, a);
else
result = busq(v, x, m1+1, m2-1);
return result;
}
Это все нам дано, нет значения для параметры a, b или x, а не размер * v (вектор) или содержимое вектора.
Предполагается, что это можно решить таким образом.
Если что-то нам нужно знать, что делает этот код, но если вы можете сказать нам об эффективности, он также будет оценен. (Мы используем обозначение O() E.J .: O (1), O (n^2) ...)
Почему вы думаете, что это будет работать на b = 0? Мы попытались сделать следующее: v [100] каждая позиция как: 0,1 ... 99. Тогда a = 99 и b = 0. Он выполняет бесконечный цикл при поиске 11. – Zasito
Он работает, если всегда b = 0, то есть вы ищете первый элемент в массиве. В противном случае ... хорошо исправьте код с помощью 'm1 = b + (a-b)/3' и' m2 = b + (a-b) * 2/3'. – ipc
Как вы сделали вывод, что это O (log n)? – Zasito