![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Новичок
Джуниор
Регистрация: 10.01.2012
Сообщений: 1
|
![]()
Изучая Кернигана и Ритчи, "Язык программирования 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 проверял много раз. Вопрос: Почему так, ведь должно быть наоборот? Что я делаю не так? |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
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 |