powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Jump Search Algorithm: ошибка в псевдокоде
62 сообщений из 62, показаны все 3 страниц
Jump Search Algorithm: ошибка в псевдокоде
    #39994273
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jump Search псевдокод из учебника по Алгоритмам и Структурам данных
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
JUMP_SEARCH (A, lower_bound, upper_bound, VAL, N)

Step 1: [INITIALIZE] SET STEP = sqrt(N), I = 0, LOW = lower_bound, HIGH = upper_bound, POS = –1
Step 2: Repeat Step 3 while I < STEP
Step 3:     
	IF VAL < A[STEP]	
		SET HIGH = STEP – 1
	    ELSE		
		SET LOW = STEP + 1
            [END OF IF]
	    SET I = I + 1
        [END OF LOOP]
Step 4: SET I = LOW
Step 5: Repeat Step 6 while I <= HIGH
Step 6:
		IF A[I] = Val
			POS = I
			PRINT POS
			Go to Step 8
		[END OF IF]
		SET I = I + 1
	[END OF LOOP]
Step 7: IF POS = –1
		PRINT "VALUE IS NOT PRESENT IN THE ARRAY"
	[END OF IF]
Step 8: EXIT


я думаю, что алгоритм в учебнике реализован не верно, что думаете вы?
https://en.wikipedia.org/wiki/Jump_search
:-)
...
Рейтинг: 0 / 0
Jump Search Algorithm: ошибка в псевдокоде
    #39994496
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я думаю, что неплохо привести пример, результат прогона и на ЯП.
...
Рейтинг: 0 / 0
Jump Search Algorithm: ошибка в псевдокоде
    #39994500
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Бремя доказательства - на утверждающем.
...
Рейтинг: 0 / 0
Jump Search Algorithm: ошибка в псевдокоде
    #39994507
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
насколько я понимаю, Jump Search - это про задачу с небоскребом и 2 шариками, где надо выяснить, с какого этажа шарик разбивается. То есть для минимизации худшего случая брать sqrt(N) не совсем верно
...
Рейтинг: 0 / 0
Jump Search Algorithm: ошибка в псевдокоде
    #39994534
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
выше я привела ссылку на алгоритм из Вики.
вот что пишет автор учебника:
автор учебникаWhen we have an already sorted list, then the other efficient algorithm to search for a value is jump
search or block search. In jump search, it is not necessary to scan all the elements in the list to
find the desired value. We just check an element and if it is less than the desired value, then some
of the elements following it are skipped by jumping ahead. After moving a little forward again,
the element is checked. If the checked element is greater than the desired value, then we have
a boundary and we are sure that the desired value lies between the previously checked element
and the currently checked element. However, if the checked element is less than the value being
searched for, then we again make a small jump and repeat the process.

Once the boundary of the value is determined, a linear search is done to find the value and its
position in the array.

For example, consider an array a[] = {1,2,3,4,5,6,7,8,9} . The length of the
array is 9. If we have to find value 8 then following steps are performed using the jump search
technique.

Step 1: First three elements are checked. Since 3 is smaller than 8, we will have to make a
jump ahead

Step 2: Next three elements are checked. Since 6 is smaller than 8, we will have to make a
jump ahead

Step 3: Next three elements are checked. Since 9 is greater than 8, the desired value lies
within the current boundary

Step 4: A linear search is now done to find the value in the array.

имхо, автор забыл, что нужно "прыгать"
...
Рейтинг: 0 / 0
Jump Search Algorithm: ошибка в псевдокоде
    #39994536
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у меня наблюдение: к концу книги становится все больше и больше опечаток
(т.е. получается, что до конца дочитывают немногие)
...
Рейтинг: 0 / 0
Jump Search Algorithm: ошибка в псевдокоде
    #39994571
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Про книгу не знаю. А "про задачу с небоскребом и 2 шариками" мы зде же как-то решали на горизонте 1 - 1,5 года.
...
Рейтинг: 0 / 0
Jump Search Algorithm: ошибка в псевдокоде
    #39994575
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mini.weblab

имхо, автор забыл, что нужно "прыгать"

почему?
первый цикл - прыгает
второй цикл - linear search

все в соответствии с процетированым английским текстом

не очень понятно, зачем это нужно (когда есть двоичный поиск), ну это уже другой разговор
...
Рейтинг: 0 / 0
Jump Search Algorithm: ошибка в псевдокоде
    #39994583
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Техническое обоснование

wikiThe advantage over the latter is that a jump search only needs to jump backwards once,
while a binary can jump backwards up to log n times. This can be important if a jumping
backwards takes significantly more time than jumping forward.
Я себе понимаю так.

У нас есть некое техническое устройство со специфичными характеристиками доступа.
Например. Магнитная лента на катушке. Стриммер. Проволока на катушке (в авиационном самопицсе).

И для нее есть операции которые делаются быстро (перемотка вперед с поиском метки)
и очень медленно (поиск назад по меткам такими рывками). И вот данный алгоритм
оптимизирует дорогие операции уменьшая их до гарантированой 1 штуки на сеанс.

Ну а наша юная сишница еще не знакома с такой техникой... да и не будет никогда
знакома. Вот у нее и возникают разные вопросы.

Вообще если читать Дональда Кнута (очень нудное времяпровождение) там будут
отсылки к виртуальному вычислителю MMIX и к накопителям на лентах.
...
Рейтинг: 0 / 0
Jump Search Algorithm: ошибка в псевдокоде
    #39994608
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev,

в том-то и дело, что нет: прыжок происходит только один раз в sqrt(n).
по идее прыжки в первом цикле должны происходить пока мы не наийдем нужное значение или число большее, чем искомое.

Вот что происходит в алгоритме из учебника


*) рассмотрим массив a[] = {0,1,2,3,4,5,6,7,8,9} и пусть искомое число будет 8 (как в примере)
*) low = 0; high = 8; step = 3; i = 0
*) Jump Loop:
1)
i = 0 < step = 3 -> True
val = 8 < arr[step] = arr[3] = 3 -> False
low = step + 1 = 3 + 1 = 4
i = i + 1 = 0 + 1 = 1

2)
i = 1 < step = 3 -> True
val = 8 < arr[step] = arr[3] = 3 -> False
low = step + 1 = 4
i = i + 1 = 0 + 1 = 2

3)
i = 2 < step = 3 -> True
val = 8 < arr[step] = arr[3] = 3 -> False
low = step + 1 = 4
i = i + 1 = 0 + 1 = 3

4)
i = 3 < step = 3 -> False -> we exit the loop
low = 3
и дальше мы с помощью линейного поиска проверяем все позиции от arr[3] до arr[9] в поисках нужного знчения
это неверно, и это не то, что должен делать JumpSearch, обратите внимание на количество операций нужное для реализации алгоритма (их 10, т.е фактически это не лучше, чем линейный поиск!)

в вики, например, все происходите следующим образом (и это правильно):
Код: plaintext
1.
2.
3.
4.
5.
n - size of ordered list (or array)
low = 0, high = sqrt(n);
if val < arr[high] 
    low = high + 1;
    high = high + sqrt(n)

и прыжки длиной в sqrt(n) происходят до тех пор, пока val не станет больше или равно arr[high] или пока low не станет больше чем n.
...
Рейтинг: 0 / 0
Jump Search Algorithm: ошибка в псевдокоде
    #39994617
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Исходник и пример с результатом в студио!
Хоть на барсике. Ангийские слова, да и другие тоже, не всегда однозначно переводятся на ЯП.
...
Рейтинг: 0 / 0
Jump Search Algorithm: ошибка в псевдокоде
    #39994619
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exp98,
в книге только псевдокод. и свой код нужно писать по псевдокоду.
(у меня нет проблем с написанием кода по псевдокоду, проблема в том, что я думаю, что псевдокод не верен)
...
Рейтинг: 0 / 0
Jump Search Algorithm: ошибка в псевдокоде
    #39994622
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mini.weblab
exp98,
в книге только псевдокод. и свой код нужно писать по псевдокоду.
(у меня нет проблем с написанием кода по псевдокоду, проблема в том, что я думаю, что псевдокод не верен)

Не надо думать. Пиши модульный тест который подтверждает что твой код имеет такие-то и такие-то свойства
на рандомных исходных данных.
...
Рейтинг: 0 / 0
Jump Search Algorithm: ошибка в псевдокоде
    #39994625
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот да, в данном случае надо стать компилятором/интерпретатором ... как бы это ни было противно. Мне, например, это делать противно.
...
Рейтинг: 0 / 0
Jump Search Algorithm: ошибка в псевдокоде
    #39994626
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
тут модульный тест не поможет :)
т.к. даже "неправильный" алгоритм найдет число в массиве (если оно там есть), и не найдет, если его там нет.

некорректность алгоритма можно доказать
а) методом подсчета шагов цикла (это можно сделать прямо в псевдокоде)
б) сравнив ран-тайм "верного" алгоритма с ран-таймом алгоритма из книги
(например, мы можем принять алгоритм из вики за "верный")
...
Рейтинг: 0 / 0
Jump Search Algorithm: ошибка в псевдокоде
    #39994627
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну exp98,
в данном случае это необходимо, потому что речь идет о корректности/некорректности логики решения
(сначала планируем - потом пишем) :-)
...
Рейтинг: 0 / 0
Jump Search Algorithm: ошибка в псевдокоде
    #39994630
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mini.weblab
в данном случае это необходимо,
Понятно. Загвоздка в том, что не хочется. Тоже понятно. Если уверена на 101%, можешь не проверять,но как бы потом не вылезло.
Что до меня, я лично сначала решил, что в книге алгоритм, к-рый даёт ош поиска. Тогда д.б. пример на эту ошибку.
Теперь же я не понимаю, о чём речь?
То ли обошибочном поиске?
То ли авторский код не соответствует его же декларации. Но формализованной!
То ли авторский код не соответствует викишной декларации, но ищет правильно.
То ли скорость просто не та?..
...
Лично мне всё равно. В книгах нередки и ошибки , и опечатки, я тоже сталкивался. Из книги нельзя копи-паст без отладки.
...
Рейтинг: 0 / 0
Jump Search Algorithm: ошибка в псевдокоде
    #39994654
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mini.weblab
mayton,
тут модульный тест не поможет :)
т.к. даже "неправильный" алгоритм найдет число в массиве (если оно там есть), и не найдет, если его там нет.

Там-же критерий есть. Я-же говорил как о тестировании свойства алгоритма. Как property-based testing.
Вот у него должно быть свойство. На любых данных - дает не более 1 прыжка назад.

Вот и проверяй. Затолкни в него миллион рандомных данных.

А ты как хотела? Заглянуть честным взглядом в глаза? И пообещать что алгоритм правильный?
...
Рейтинг: 0 / 0
Jump Search Algorithm: ошибка в псевдокоде
    #39994710
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
вопрос адресован в первую очередь к тем кто может понять псевдокод и сравнить с кодом приведенным в Вики
...
Рейтинг: 0 / 0
Jump Search Algorithm: ошибка в псевдокоде
    #39994715
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mini.weblab
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Step 2: Repeat Step 3 while I < STEP
Step 3:     
	IF VAL < A[STEP]	
		SET HIGH = STEP – 1
	    ELSE		
		SET LOW = STEP + 1
            [END OF IF]
	    SET I = I + 1
        [END OF LOOP]
тут какая-то непонятная хрень.
зачем 3 шаг повторять, если переменная STEP не меняется?
что-то забыто, в общем.
...
Рейтинг: 0 / 0
Jump Search Algorithm: ошибка в псевдокоде
    #39994728
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mini.weblab
к тем кто может понять псевдокод
как ты вообще читаешь книгу по алгоритмам, не понимая тамошний псевдокод?
...
Рейтинг: 0 / 0
Jump Search Algorithm: ошибка в псевдокоде
    #39994746
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1,

да обыкновенно, беру книгу и читаю, а если что-то непонятно, спрашиваю на sql.ru
...
Рейтинг: 0 / 0
Jump Search Algorithm: ошибка в псевдокоде
    #39994750
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1тут какая-то непонятная хрень.
зачем 3 шаг повторять, если переменная STEP не меняется?
что-то забыто, в общем.
с этим я согласна
...
Рейтинг: 0 / 0
Jump Search Algorithm: ошибка в псевдокоде
    #39994751
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Начните переводить потихоньку на С++ с комментариями. И все прояснится.

P.S. Язык определяет сознание.
...
Рейтинг: 0 / 0
Jump Search Algorithm: ошибка в псевдокоде
    #39994757
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Копи-пасты - они такие копи-пасты. Возможно, что автор хотел здесь
Код: vbnet
1.
IF VAL < A[STEP]

написать A[i]. Но тогда и массив должен с 0 начинаться. Но я сильно не всматривался, так что могу и ошибаться.
...
Рейтинг: 0 / 0
Jump Search Algorithm: ошибка в псевдокоде
    #39994758
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Язык определяет сознание.
Казниь нельзя помиловать.
...
Рейтинг: 0 / 0
Jump Search Algorithm: ошибка в псевдокоде
    #39994764
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При адаптации алгоритмов из книжек я замечал что многие из них написаны на диалектах Pascal/Modula/Delphi.
И в этих языках массивы могут начинаться не с 0 а с 1 и это создает некоторые трудности при механическом
переводе.

В данном диалекте массивы какие?
...
Рейтинг: 0 / 0
Jump Search Algorithm: ошибка в псевдокоде
    #39994767
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exp98
mayton
Язык определяет сознание.
Казниь нельзя помиловать.

Да вот как написано - так программист и переведет. Кстати даже такой пустяк
как извлечение квадратного корня с округлением в нижнюю сторону у меня
вызывает некую оторопь и размышления? Мы можем потерять в точности
конвертируясь int->double->sqlrt->int или не имеем права? Казалось-бы
пустяк но мне этот пустяк тоже интересен. Вобщем математики-теоретики
вам написало код без типов данных. И без контрактов. А вы уже дальше думайте.

Казнить или помиловать.
...
Рейтинг: 0 / 0
Jump Search Algorithm: ошибка в псевдокоде
    #39994772
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, в 1-м цикле может нужно было написать SET LOW = STEP + iiiii и т.п. Но мне откровенно неохота.
Не забыть, что пользуемся упорядоченным массивом - это во первых словах автора.
...
Рейтинг: 0 / 0
Jump Search Algorithm: ошибка в псевдокоде
    #39994773
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Да вот как написано - так программист и переведет.
Точнее - переведёт каково у него сознание.
...
Рейтинг: 0 / 0
Jump Search Algorithm: ошибка в псевдокоде
    #39994775
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Меня вообще удивляет что мы тратим так много времени на старый и никому не нужный алгоритм
поиска блоков на магнитофонной ленточке.

Неужели автору нет дела до других (более актуальных) алгоритмов и структур данных?
...
Рейтинг: 0 / 0
Jump Search Algorithm: ошибка в псевдокоде
    #39994787
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Писала же - у неё есть план. Всё же это и полезная гимнастика. Я для этих упражнений откровенно ржавею. Так что небольшая встряска.
...
Рейтинг: 0 / 0
Jump Search Algorithm: ошибка в псевдокоде
    #39994800
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Неужели автору нет дела до других (более актуальных) алгоритмов и структур данных?

существует всего 4 основных алгоритма поиска:
1) линейный поиск
2) двоичный поиск
3) поиск методом интерполяции
4) прыжковый (пошаговый) поиск (Jump Search)

у меня проблема возникла только с методом 4
...
Рейтинг: 0 / 0
Jump Search Algorithm: ошибка в псевдокоде
    #39994803
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А хеш-поиск?
...
Рейтинг: 0 / 0
Jump Search Algorithm: ошибка в псевдокоде
    #39994805
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
А хеш-поиск?
в отсортированном массиве он никаким боком
...
Рейтинг: 0 / 0
Jump Search Algorithm: ошибка в псевдокоде
    #39994818
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

хэш поиск = поиск по хэш ключу + линейный поиск
поиск по хэш ключу будет проведен по одному из 4х методов
...
Рейтинг: 0 / 0
Jump Search Algorithm: ошибка в псевдокоде
    #39994822
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mini.weblab
хэш поиск = поиск по хэш ключу + линейный поиск
если хэш - некоторое целое число, то это будет индекс массива, где всё хранится, то есть уже никакого поиска не потребуется (хотя, если у некоторых значений совпал хэш, то это будет коллизия и там придется поискать). В этом идея хэш-словаря.
...
Рейтинг: 0 / 0
Jump Search Algorithm: ошибка в псевдокоде
    #39994850
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чтобы не открывать новуютему, спрошу здесь.
Есть фрагмент и некий комментарий к нему. Чего я не понимаю?
mini.weblab
в вики, например, все происходите следующим образом (и это правильно):
Код: plaintext
1.
2.
3.
4.
5.
n - size of ordered list (or array)
low = 0, high = sqrt(n);
if val < arr[high] 
    low = high + 1;
    high = high + sqrt(n)

и прыжки длиной в sqrt(n) происходят до тех пор, пока val не станет больше или равно arr[high] или пока low не станет больше чем n.
Есть фраза "пока val не станет".
Разве val не константа?
Если val < arr[high] затем мы прибавляем low = high + 1; ....
а) подразумевается убывающее упорядочивание.
б) А где обрабатывается случай val == arr[high] ?
...
Рейтинг: 0 / 0
Jump Search Algorithm: ошибка в псевдокоде
    #39994854
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mini.weblab
mayton,

хэш поиск = поиск по хэш ключу + линейный поиск
поиск по хэш ключу будет проведен по одному из 4х методов

Мисс mini.weblab!

Мой комментарий касался утверждения о том что
существует всего 4 основных алгоритма поиска:
Я не знаю почему их всего 4. И почему алгоритм хеширования вдруг сюда не попал.
Разве поиск ключа в хеш-таблице это не поиск? Разве вероятностная проверка
в бит-карте Блума это не поиск? А вычисление квадратного корня? Разве это
не поиск точки на вещественной оси? А градиентный спуск это не поиск?
А обучение нейронной сети - разве это не поиск ее матрицы коэффициентов?
А генетический алгоритм? Разве это не поиск наилучшего вектора признаков
по заданной целевой функции?
...
Рейтинг: 0 / 0
Jump Search Algorithm: ошибка в псевдокоде
    #39994860
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exp98

и прыжки длиной в sqrt(n) происходят до тех пор, пока val не станет больше или равно arr[high] или пока low не станет больше чем n.
Есть фраза "пока val не станет".
Разве val не константа?
Если val < arr[high] затем мы прибавляем low = high + 1; ....
а) подразумевается убывающее упорядочивание.
б) А где обрабатывается случай val == arr[high] ?[/quot]

1) полный алгоритм вики можно найти по ссылке https://en.wikipedia.org/wiki/Jump_search
там все случаи обрабатываются
2) я привела только часть с прыжками, потому что именно она неправильно реализована в книге
3) по поводу констант, если быть точным, то нужно выполнение условия val = arr[high]
...
Рейтинг: 0 / 0
Jump Search Algorithm: ошибка в псевдокоде
    #39994867
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну давайте блин. А то ведь пока первый не начнешь - никто не начинает.

Потихоньку. Шаг за шагом. С пониманием контракта. Можно даже сверять с линейным поиском.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
T jump_search(std::list<T> list) {
/*
algorithm JumpSearch is
    input: An ordered list L, its length n and a search key s.
    output: The position of s in L, or nothing if s is not in L.
    
    a &#8592; 0
    b &#8592; &#8970;&#8730;n&#8971;
    
    while Lmin(b,n)-1 < s do
        a &#8592; b
        b &#8592; b + &#8970;&#8730;n&#8971;
        if a &#8805; n then
            return nothing
    
    while La < s do
        a &#8592; a + 1
        if a = min(b, n)
            return nothing
    
    if La = s then
        return a
    else
        return nothing
*/
}
...
Рейтинг: 0 / 0
Jump Search Algorithm: ошибка в псевдокоде
    #39994869
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
я говорю конкретно об алгоритмах поиска , а не о всех возможных алгоритмах
есть алгоритмы поиска (и их 4), а есть структуры данных, это не одно и тоже
не существует метода хэш-поиск, но зато существует структура данных - хэш таблица,
которая позволяет быстрый поиск данных по ключу. структуры данных как раз и
создаются для того, чтобы получить лучшие результаты, чем позволяют стандартные алгоритмы
...
Рейтинг: 0 / 0
Jump Search Algorithm: ошибка в псевдокоде
    #39994873
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
с алгоритмом из вики проблем нет, там все норм.
проблема с алгоритмом в самом первом посте: там все будет находится правильно, но по скорости выполнения он будет не лучше, чем линейный поиск
...
Рейтинг: 0 / 0
Jump Search Algorithm: ошибка в псевдокоде
    #39994875
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mini.weblab
mayton,
с алгоритмом из вики проблем нет, там все норм.
проблема с алгоритмом в самом первом посте: там все будет находится правильно, но по скорости выполнения он будет не лучше, чем линейный поиск


А где было обещано что он лучше? Что вообще бывает лучше чем дихотомия на сортированном векторе?
...
Рейтинг: 0 / 0
Jump Search Algorithm: ошибка в псевдокоде
    #39994881
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exp98,

поправка
3) по поводу констант, если быть точным, прыжки должны совершатся до тех пор пока val >= arr[high]
...
Рейтинг: 0 / 0
Jump Search Algorithm: ошибка в псевдокоде
    #39994889
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton

А где было обещано что он лучше?

скорость поиска для JumpSearch O(sqrt(n)), это лучше, чем линейный поиск O(n)
mayton

Что вообще бывает лучше чем дихотомия на сортированном векторе?

при условии, что данные распределены равномерно, интерполяционный поиск будет эффективнее, чем двоичный
...
Рейтинг: 0 / 0
Jump Search Algorithm: ошибка в псевдокоде
    #39994892
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1
если хэш - некоторое целое число, то это будет индекс массива, где всё хранится, то есть уже никакого поиска не потребуется (хотя, если у некоторых значений совпал хэш, то это будет коллизия и там придется поискать). В этом идея хэш-словаря.

да, согласилась
...
Рейтинг: 0 / 0
Jump Search Algorithm: ошибка в псевдокоде
    #39994893
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это всё о точном поиске. Существует прикладные задачи на - интервальный поиск, - нечёткий поиск.
Но метод Ньютона тоже ищет известное значение в неизвестном месте, но обычно не в дискретных последовательностях, а в континуумах.
Ещё веоятностный поиск, как пример точного решения вероятностными методами, поищу ссылку, старая работа, Фрейвальд - фамилия такая.
...
Рейтинг: 0 / 0
Jump Search Algorithm: ошибка в псевдокоде
    #39994896
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mini.weblab
maytonЧто вообще бывает лучше чем дихотомия на сортированном векторе?

при условии, что данные распределены равномерно, интерполяционный поиск будет эффективнее, чем двоичныйи при условии, что это данные с ключем сортировки в виде числа.
те же строки так не найти.
...
Рейтинг: 0 / 0
Jump Search Algorithm: ошибка в псевдокоде
    #39994902
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mini.weblab
я говорю конкретно об алгоритмах поиска , а не о всех возможных алгоритмах
есть алгоритмы поиска (и их 4), а есть структуры данных, это не одно и тоже
Не будь догматиком. Просто на той свисте-странице написаны 4 ссылки на эти 4 алгоритма. Ну у этого автора шоры на глазах. Он даже не в курсе, что в псевдоконтинуумах тоже иногда ищут-свищут. Что алгоритмы использовать "детерминированные методы", а могут - вероятностные. "Это Америка, детка", родина слонов.


Главное выяснено. Тема о том, что алгоритм в книге правильный, но недостаточно быстрый? или не настолько как заявлено автором книги?
...
Рейтинг: 0 / 0
Jump Search Algorithm: ошибка в псевдокоде
    #39994906
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1,
строки можно отсортировать по алфавиту и поставить число в соответствие каждой строке.
я думаю, что для любого конечного массива упорядченных данных проблем не будет.
...
Рейтинг: 0 / 0
Jump Search Algorithm: ошибка в псевдокоде
    #39994909
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mini.weblab
строки можно отсортировать по алфавиту и поставить число в соответствие каждой строке.
но тогда, чтобы найти строку интерполяционным поиском, сначала надо будет определить число, которое ей соответствует :)
а это уже либо двоичный поиск, либо вычисление хэша.
...
Рейтинг: 0 / 0
Jump Search Algorithm: ошибка в псевдокоде
    #39994911
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exp98
Просто на той свисте-странице написаны 4 ссылки на эти 4 алгоритма. Ну у этого автора шоры на глазах. Он даже не в курсе, что в псевдоконтинуумах тоже иногда ищут-свищут. Что алгоритмы использовать "детерминированные методы", а могут - вероятностные.

напомню, мы говорим, о поиске конкретного элемента в конечномерном массиве
так что не наговаривай на автора
тут нет ни континума, ни псевдоконтинума. и вероятностных методов тоже.

exp98
Тема о том, что алгоритм в книге правильный, но недостаточно быстрый? или не настолько как заявлено автором книги?
Тема о том, что в псевдокоде, приведенном в посте номер 1, Jump Search алгоритм реализован неверно
...
Рейтинг: 0 / 0
Jump Search Algorithm: ошибка в псевдокоде
    #39994925
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1,
для строк интерполяционный поиск в лоб применить нельзя, но можно сделать, что-то типа
aaa, aab, aba, abb

и я думаю, что на практике нечто подобное и применяется
...
Рейтинг: 0 / 0
Jump Search Algorithm: ошибка в псевдокоде
    #39994929
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mini.weblab
...проблема с алгоритмом в самом первом посте: там все будет находится правильно, но по скорости выполнения он будет не лучше, чем линейный поиск
О чём тогда это?

И одно дело данный топик - никто не сомневался, что в контексте дискретный массив.
Другое дело свистепедия. Название статьи с претензией. Сслка из неё на якобы определение "сортированный массив" так и не говорит о том, как он сортирован: asc or desc. Однако код приведён. Ну, свистепедия же. Это к шорам того автора. Я не разбирался, там, кстати, какое из одинаковых найденных ищут?

Сылка первого уровня на статью:
автор This article incorporates public domain material from the NIST document: Black, Paul E. "jump search". Dictionary of Algorithms and Data Structures.

авторIn computer science, a list or sequence is an abstract data type that represents a countable number of ordered values, where the same value may occur more than once. An instance of a list is a computer representation of the mathematical concept of a tuple or finite sequence; the (potentially) infinite analog of a list is a stream.[1]:§3.5 Lists are a basic example of containers, as they contain other values. If the same value occurs multiple times, each occurrence is considered a distinct item.

Ссылка 2-го ур. из статьи по "jump search"
авторsorted array
(data structure)
Definition: An array whose items are kept sorted, often so searching is faster.
See also binary search, interpolation search, ordered array.


авторordered array
(data structure)

Definition: An array whose items have some order. Usually, it means a sorted array, but may mean not fully ordered, for example, all values less than the median are in the first half.
...
Рейтинг: 0 / 0
Jump Search Algorithm: ошибка в псевдокоде
    #39994952
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mini.weblab
Имя пользователя1,
для строк интерполяционный поиск в лоб применить нельзя, но можно сделать, что-то типа
aaa, aab, aba, abb

и я думаю, что на практике нечто подобное и применяется

Разные языки и системы программирования по разному определяют компаратор или функцию сравнения
двух строк. Особенно когда речь идёт о разной длине строк или более чем 2х алфавитах.
Яркий пример - лексикографическая сортировка имен файлов и директорий даёт сбой
при переходе от десятков к сотням и т.д. А чтобы сравнивать не-лексико-графически
а человечески - надо усложнить функцию компаратора. Это бъет по перформансу обычно.
И этим никто не хочет заниматься. И это мы еще даже не зашли в такие "области тьмы"
как суррогатные пары, нормализация строк по Unicode и прочее.

Тоесть сравнить строки без описания смысла компаратора - почти невозможно. И интерполяция
- расчет новой точки между двух других для строк также сложен. Например какая строка
будет между
Код: sql
1.
aaa, aaaa


?
...
Рейтинг: 0 / 0
Jump Search Algorithm: ошибка в псевдокоде
    #39994983
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

я не говорила, что интерполяционный поиск будет эффективно работать во всех возможных случаях,
тем более, что это неверно даже для целых чисел.

я попробую показать возможность конвертации строки в число, и возможность сравнения строки и числа :-)
(потому что именно это вызвало сомнения)
наиболее интуитивным, будет подход используемый в словарях, и числовая функция строки должна быть большей (или равной) для строк, стоящих позже по алфавиту.

Строковая функция:
вычисление числового значения строки будет производится по первым 3м буквам, например так
ааа = 26 * 26 * 1 + 26 * 1 + 1
baz = 26 * 26 * 2 + 26 * 1 + 26

строка ааа будет иметь тоже числовое значение, что и строка аааа, но аааа будет стоять на более поздней позиции
(сортируем по алфавиту)
...
Рейтинг: 0 / 0
Jump Search Algorithm: ошибка в псевдокоде
    #39994997
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возможность сравнения всегда есть. Я говорю о смыслах. Вот фрагмент кода на Java.
Реальный рабочий фрагмент. Я гарантирую это.

Код: java
1.
2.
3.
4.
IntStream.range(-10, 21).boxed()
                .map(x -> String.valueOf(x))
                .sorted()
                .forEach(x -> println(x));



Интервал целых чисел от -10 до 21 конвертится в строки и сортируется по правилам строк и распечатывается на консоли.
Вот что получается на выходе.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
-1
-10
-2
-3
-4
-5
-6
-7
-8
-9
0
1
10
11
12
13
14
15
16
17
18
19
2
20
3
4
5
6
7
8
9



Можешь прокомментировать результат?
...
Рейтинг: 0 / 0
Jump Search Algorithm: ошибка в псевдокоде
    #39995004
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
а почему бы и нет?
в данном случае мы наблюдаем последовательное сравнение символов по коду в ascii таблице, как и для обычных строк, только непонятно, какое это имеет отношение к теме...
...
Рейтинг: 0 / 0
Jump Search Algorithm: ошибка в псевдокоде
    #39995005
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это интуитивно?
...
Рейтинг: 0 / 0
Jump Search Algorithm: ошибка в псевдокоде
    #39995006
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А какой будет рез-т сортировки? Все коды вин-1251.
Select ....... From tabl Order by 1 asc;
Код: plaintext
1.
2.
3.
i. Ехал кактус на окне
iv. Вёл мамашу на ремне
ix. А собачка в это время мыла Ваню на коне
...
Рейтинг: 0 / 0
Jump Search Algorithm: ошибка в псевдокоде
    #39995007
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exp98,
не нужно расстраиваться, если не можешь прочитать псевдокод
...
Рейтинг: 0 / 0
62 сообщений из 62, показаны все 3 страниц
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Jump Search Algorithm: ошибка в псевдокоде
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]