результат поиска =-2

Простейшие вопросы в области инженерной разработки
Ответить
Artem.spb

Activity Автор
professor
professor
Сообщения: 3393
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 49 раз
Поблагодарили: 172 раза
Контактная информация:

результат поиска =-2

Сообщение Artem.spb »

Баг или фича? правлю чужой код, встречаю много странностей. Так что не исключено, что это очередная оригинальная мысль разработчика, но всё же, вдруг я что-то не знаю о функции поиска.
Собственно, вопрос: может ли поиск в результате выдать -2?
код:
-1 понятно, не нашли
001.png
а вот -2 зачем?
002.png
Borjomy_1

Activity Professionalism Silver
doctor
doctor
Сообщения: 2210
Зарегистрирован: 28 июн 2012, 09:32
Награды: 3
Версия LabVIEW: 2009..2020
Откуда: город семи холмов
Благодарил (а): 27 раз
Поблагодарили: 26 раз

Re: результат поиска =-2

Сообщение Borjomy_1 »

А получить данный результат удалось? Чтобы выдало -2.
Данный код вообще надо писать заново. Когда второй шифт регистр на выходе заново инициализируется нулем, цикл становится бесконечным. И мы получаем переполнение памяти из-за индексированного массива.
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 126 раз
Контактная информация:

Re: результат поиска =-2

Сообщение dadreamer »

Если BinSearch используется, то должно выдавать позицию, куда надо вставить этот элемент: http://zone.ni.com/reference/en-XX/help ... binsearch/ Но почему-то не работает... Или я не смог добиться.
Artem.spb

Activity Автор
professor
professor
Сообщения: 3393
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 49 раз
Поблагодарили: 172 раза
Контактная информация:

Re: результат поиска =-2

Сообщение Artem.spb »

Borjomy_1 писал(а):А получить данный результат удалось? Чтобы выдало -2.
если бы получилось, я бы не спрашивал :)
я не проводил глобальных исследований, а быстро имитировать не удалось, да и в справке нет такого случая, вот я и озадачен.
Данный код вообще надо писать заново.
спасибо, кэп :)
Переписать надо бы весь проект, а не только этот кусок, но не дают, т.к. долго. По принципу, "работает, и ладно, есть более актуальные задачи".
Когда второй шифт регистр на выходе заново инициализируется нулем, цикл становится бесконечным. И мы получаем переполнение памяти из-за индексированного массива.
Нет, не будет бесконечного. Если -1, то цикл останавливается, а если что-то найдено, снова выполняется странное действие - массив разделяется на две части по найденному, тем самым память хорошо, но не бесконечно, замусоривается.
003.png
dadreamer писал(а):Если BinSearch используется, то должно выдавать позицию.
обычный поиск, никакого бинарного.
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 126 раз
Контактная информация:

Re: результат поиска =-2

Сообщение dadreamer »

Artem.spb писал(а):
dadreamer писал(а):Если BinSearch используется, то должно выдавать позицию.
обычный поиск, никакого бинарного.
Ну да, не используется. Реализованный алгоритм оптимальнее всех прочих, судя по листингу:
2016-10-22_13-47-25.jpg
И да, -2 там никак не может быть.
Blackman

Activity
leader
leader
Сообщения: 932
Зарегистрирован: 17 янв 2016, 15:02
Награды: 1
Версия LabVIEW: 6.1,8.5,20

Re: результат поиска =-2

Сообщение Blackman »

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.
Аватара пользователя
IvanLis

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
guru
guru
Сообщения: 5462
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Версия LabVIEW: 2015, 2016
Откуда: СССР
Благодарил (а): 28 раз
Поблагодарили: 86 раз

Re: результат поиска =-2

Сообщение IvanLis »

Blackman, тут видимо справочные данные приводятся.
К :labview: относится видимо только первая часть, мои знания языка ограничены, но судя из
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.
можно сделать именно такие выводы
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 126 раз
Контактная информация:

Re: результат поиска =-2

Сообщение dadreamer »

IvanLis писал(а):К :labview: относится видимо только первая часть
На самом деле нет, тут Blackman верно подкинул инфу.
Search 1D Array Function - линейный поиск
BinSearch - бинарный поиск

Я ещё бы вот на такой тред сослался: Знай сложности алгоритмов (Хабр). И вот оттуда картинка:
3da386eed54c16ff73b647b383aea085.png
3da386eed54c16ff73b647b383aea085.png (1.75 КБ) 5284 просмотра
f54446a54f3d52d20e95ba5c5495644f.png
Любопытно было бы сравнить эти два метода именно в рамках :labview: . Хотя, очевидно, для BinSearch многое определяется процедурой сравнения CompareProc, которую пользователь должен сам придумать (или взять какой-то стандартный шаблон). Если плохо напишет процедуру, то и медленно искать будет.
Blackman

Activity
leader
leader
Сообщения: 932
Зарегистрирован: 17 янв 2016, 15:02
Награды: 1
Версия LabVIEW: 6.1,8.5,20

Re: результат поиска =-2

Сообщение Blackman »

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

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 126 раз
Контактная информация:

Re: результат поиска =-2

Сообщение dadreamer »

dadreamer писал(а):Любопытно было бы сравнить эти два метода именно в рамках :labview: .
Сделал тут простой бенчмарк на числах I(U)32. Действительно, оказалось, что Search 1D Array нещадно проигрывает BinSearch по скорости выполнения.
2016-10-23_18-38-14.jpg
Процедура CompareProc простейшая.

Код: Выделить всё

function CompareProc(Num1, Num2: PInteger): integer; cdecl;
begin
Result := Num1^ - Num2^;
end;
На строках не стал проверять, ибо лень.
Вложения
BinSearch_Test.rar
lv2011
(432.22 КБ) 117 скачиваний
Ответить

Вернуться в «Для чайников»