Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.01.2012, 08:48   #1
continent
Новичок
Джуниор
 
Регистрация: 10.01.2012
Сообщений: 1
По умолчанию Ньюансы метода дихотомии на C

Изучая Кернигана и Ритчи, "Язык программирования C", выполнил упражнение 3.1 а именно:
Дана функция, реализующая поиск числа x в упорядоченном массиве v чисел, методом деления отрезка пополам:
n - длинна массива

/* binsearch: find x in v[0] <= v[1] <= ... <= v[n-1] */
int binsearch(int x, int v[], int n)
{
int low, high, mid;
low = 0;
high = n - 1;

while (low <= high) {
mid = (low+high)/2;
if (x < v[mid])
high = mid - 1;
else if (x > v[mid])
low = mid + 1;
else
/* found match */
return mid;
}
return -1;
/* no match */
}

Необходимо переписать её таким образом, чтобы в цикле была всего одна проверка условия. Затем сравнить быстродействие обоих функций.
Моё решение:

/* binsearch2: find x in v[0] <= v[1] <= ... <= v[n-1] */
int binsearch2(int x, int v[], int n)
{
int low, high, mid;
low = 0;
high = n - 1;

while (low <= high) {
mid = (low+high)/2;
if (x < v[mid])
high = mid - 1;
else
low = mid + 1;
}
if (mid == x)
/* found match */
return mid;
return -1;
/* no match */
}

Все правильно, одна проверка в цикле. Но тут начинается самое интересное: проверка быстродействия. По идее, моя функция должна работать быстрее, т.к. количество проверок условий уменьшается почти в 2 раза.
Но я взял и проверил напрямую, а именно взял массив из чисел 0...1000, и вызвал функцию в цикле много раз(миллион раз). Таким образом:

for( i = 0; i < ARR_SIZE; i++){
for( j = 0; j < ARR_SIZE; j++)
binsearch(j, v, ARR_SIZE );
}

средний результат для функции из книги 0.149 s
а для моей функции 0.168 s
проверял много раз.
Вопрос: Почему так, ведь должно быть наоборот? Что я делаю не так?
continent вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C++ метод дихотомии MIKE72 Помощь студентам 0 02.10.2011 14:21
Метод Дихотомии Roland_Lviv_ua Помощь студентам 5 13.06.2010 18:23
паскаль с методом дихотомии A.S.W Помощь студентам 2 07.01.2010 20:14
Метод хорд и дихотомии Igorz3000 Помощь студентам 6 16.09.2009 11:38
Метод дихотомии britva666 Помощь студентам 3 17.06.2009 18:06