результат поиска =-2
-
- professor
- Сообщения: 3394
- Зарегистрирован: 31 июл 2011, 23:05
- Награды: 2
- Версия LabVIEW: 12-18
- Благодарил (а): 49 раз
- Поблагодарили: 172 раза
- Контактная информация:
результат поиска =-2
Баг или фича? правлю чужой код, встречаю много странностей. Так что не исключено, что это очередная оригинальная мысль разработчика, но всё же, вдруг я что-то не знаю о функции поиска.
Собственно, вопрос: может ли поиск в результате выдать -2?
код:
-1 понятно, не нашли а вот -2 зачем?
Собственно, вопрос: может ли поиск в результате выдать -2?
код:
-1 понятно, не нашли а вот -2 зачем?
-
- doctor
- Сообщения: 2210
- Зарегистрирован: 28 июн 2012, 09:32
- Награды: 3
- Версия LabVIEW: 2009..2020
- Откуда: город семи холмов
- Благодарил (а): 27 раз
- Поблагодарили: 26 раз
Re: результат поиска =-2
А получить данный результат удалось? Чтобы выдало -2.
Данный код вообще надо писать заново. Когда второй шифт регистр на выходе заново инициализируется нулем, цикл становится бесконечным. И мы получаем переполнение памяти из-за индексированного массива.
Данный код вообще надо писать заново. Когда второй шифт регистр на выходе заново инициализируется нулем, цикл становится бесконечным. И мы получаем переполнение памяти из-за индексированного массива.
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 126 раз
- Контактная информация:
Re: результат поиска =-2
Если BinSearch используется, то должно выдавать позицию, куда надо вставить этот элемент: http://zone.ni.com/reference/en-XX/help ... binsearch/ Но почему-то не работает... Или я не смог добиться.
-
- professor
- Сообщения: 3394
- Зарегистрирован: 31 июл 2011, 23:05
- Награды: 2
- Версия LabVIEW: 12-18
- Благодарил (а): 49 раз
- Поблагодарили: 172 раза
- Контактная информация:
Re: результат поиска =-2
если бы получилось, я бы не спрашивал :)Borjomy_1 писал(а):А получить данный результат удалось? Чтобы выдало -2.
я не проводил глобальных исследований, а быстро имитировать не удалось, да и в справке нет такого случая, вот я и озадачен.
спасибо, кэп :)Данный код вообще надо писать заново.
Переписать надо бы весь проект, а не только этот кусок, но не дают, т.к. долго. По принципу, "работает, и ладно, есть более актуальные задачи".
Нет, не будет бесконечного. Если -1, то цикл останавливается, а если что-то найдено, снова выполняется странное действие - массив разделяется на две части по найденному, тем самым память хорошо, но не бесконечно, замусоривается.Когда второй шифт регистр на выходе заново инициализируется нулем, цикл становится бесконечным. И мы получаем переполнение памяти из-за индексированного массива.
обычный поиск, никакого бинарного.dadreamer писал(а):Если BinSearch используется, то должно выдавать позицию.
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 126 раз
- Контактная информация:
Re: результат поиска =-2
Ну да, не используется. Реализованный алгоритм оптимальнее всех прочих, судя по листингу: И да, -2 там никак не может быть.Artem.spb писал(а):обычный поиск, никакого бинарного.dadreamer писал(а):Если BinSearch используется, то должно выдавать позицию.
-
- leader
- Сообщения: 932
- Зарегистрирован: 17 янв 2016, 15:02
- Награды: 1
- Версия LabVIEW: 6.1,8.5,20
Re: результат поиска =-2
LabVIEW Search 1D Array:
Searches for an element in a 1D array starting at start index. Because the search is linear, you need not sort the array before calling this function. LabVIEW stops searching as soon as the element is found.
A linear search looks down a list, one item at a time, without jumping. In complexity terms this is an O(n) search - the time taken to search the list gets bigger at the same rate as the list does.
A binary search is when you start with the middle of a sorted list, and see whether that's greater than or less than the value you're looking for, which determines whether the value is in the first or second half of the list. Jump to the half way through the sublist, and compare again etc. In complexity terms this is an O(log n) search - the number of search operations grows more slowly than the list does, because you're halving the "search space" with each operation.
Searches for an element in a 1D array starting at start index. Because the search is linear, you need not sort the array before calling this function. LabVIEW stops searching as soon as the element is found.
A linear search looks down a list, one item at a time, without jumping. In complexity terms this is an O(n) search - the time taken to search the list gets bigger at the same rate as the list does.
A binary search is when you start with the middle of a sorted list, and see whether that's greater than or less than the value you're looking for, which determines whether the value is in the first or second half of the list. Jump to the half way through the sublist, and compare again etc. In complexity terms this is an O(log n) search - the number of search operations grows more slowly than the list does, because you're halving the "search space" with each operation.
-
IvanLis
- guru
- Сообщения: 5462
- Зарегистрирован: 02 дек 2009, 17:44
- Награды: 7
- Версия LabVIEW: 2015, 2016
- Откуда: СССР
- Благодарил (а): 28 раз
- Поблагодарили: 86 раз
Re: результат поиска =-2
Blackman, тут видимо справочные данные приводятся.
К относится видимо только первая часть, мои знания языка ограничены, но судя из
К относится видимо только первая часть, мои знания языка ограничены, но судя из
можно сделать именно такие выводыSearches for an element in a 1D array starting at start index. Because the search is linear, you need not sort the array before calling this function. LabVIEW stops searching as soon as the element is found.
Знание нескольких принципов освобождает от знания многих фактов!
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 126 раз
- Контактная информация:
Re: результат поиска =-2
На самом деле нет, тут Blackman верно подкинул инфу.IvanLis писал(а):К относится видимо только первая часть
Search 1D Array Function - линейный поиск
BinSearch - бинарный поиск
Я ещё бы вот на такой тред сослался: Знай сложности алгоритмов (Хабр). И вот оттуда картинка:
Любопытно было бы сравнить эти два метода именно в рамках . Хотя, очевидно, для BinSearch многое определяется процедурой сравнения CompareProc, которую пользователь должен сам придумать (или взять какой-то стандартный шаблон). Если плохо напишет процедуру, то и медленно искать будет.
-
- leader
- Сообщения: 932
- Зарегистрирован: 17 янв 2016, 15:02
- Награды: 1
- Версия LabVIEW: 6.1,8.5,20
Re: результат поиска =-2
Comparing Linear Search and Binary Search Algorithms to Search an Element from a Linear List Implemented through Static Array, Dynamic Array and Linked List
- Вложения
-
- 10.1.1.695.4377.pdf
- (360.36 КБ) 106 скачиваний
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 126 раз
- Контактная информация:
Re: результат поиска =-2
Сделал тут простой бенчмарк на числах I(U)32. Действительно, оказалось, что Search 1D Array нещадно проигрывает BinSearch по скорости выполнения. Процедура CompareProc простейшая.dadreamer писал(а):Любопытно было бы сравнить эти два метода именно в рамках .
Код: Выделить всё
function CompareProc(Num1, Num2: PInteger): integer; cdecl;
begin
Result := Num1^ - Num2^;
end;
- Вложения
-
- BinSearch_Test.rar
- lv2011
- (432.22 КБ) 117 скачиваний