поиск подмассива в массиве

Простейшие вопросы в области инженерной разработки
Ответить
spirit
interested
interested
Сообщения: 1
Зарегистрирован: 07 фев 2017, 02:38
Версия LabVIEW: 15
Контактная информация:

поиск подмассива в массиве

Сообщение spirit »

Добрый вечер

Подскажите пожалуйста как оптимально найти в массиве кусочек другого подмассива
Я сразу сделал через поиск первого элемента Search 1D array , и затем если находит проверяю остальные символы из подмассива.
Но проблема в том что таких первых элементов может быть несколько в массиве и не обязательно что это начало нашего подмассива
Т.е надо проверять первое совпадение, если за ним не совпадают остальные элементы подмассива то в Search 1D array делаем новый поиск уже с точки после нашего совпадение
опять проверяем остальные элемены.
Если не совпало опять сдвиг и новый поиск и так до конца массива
В таком варианте количество итераций в максимальном варианте будет равно количеству первых элементов подмассива
Это мой взгляд . возможно существует более простое или оптимальное решение?
Аватара пользователя
dadreamer

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

Re: поиск подмассива в массиве

Сообщение dadreamer »

spirit писал(а):Подскажите пожалуйста как оптимально найти в массиве кусочек другого подмассива
Всё давно уже изобретено и выложено, достаточно лишь поискать.
how to search for array in another array ? (см. :vi: Filter Subarray - DBL.vi)
filter_subarray.jpg
Либо можете использовать инструмент Filter 1D Array из палитры OpenG Array.
Вложения
2017-02-09_10-01-31.jpg
Filter_1D_Array.jpg
Blackman

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

Re: поиск подмассива в массиве

Сообщение Blackman »

Filter 1D Array из палитры OpenG Array фильтрует все элементы из списка "items to filter" не зависимо от того как они расположены во входном массиве, а не подмассив "items to filter" если он есть во входном массиве.
Вложения
Filter.PNG
Borjomy_1

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

Re: поиск подмассива в массиве

Сообщение Borjomy_1 »

spirit, преобразуйте массив в строку и ищите через Search/Split String себе на здоровье.
Artem.spb

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

Re: поиск подмассива в массиве

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

Borjomy_1 писал(а):spirit, преобразуйте массив в строку и ищите через Search/Split String себе на здоровье.
собрался уже предложить этот же вариант, но меня обогнали :)
повёл сравнительный тест:
search2.png
искать в строке на три порядка выгоднее по времени.
поиск в массиве 10000 элементов выборки в 200шт.
для достоверности выборка берётся из хвоста массива.
s.png
Аватара пользователя
dadreamer

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

Re: поиск подмассива в массиве

Сообщение dadreamer »

Blackman писал(а):Filter 1D Array из палитры OpenG Array фильтрует все элементы из списка "items to filter" не зависимо от того как они расположены во входном массиве, а не подмассив "items to filter" если он есть во входном массиве.
Может быть, ТСу такой вариант как раз подойдёт. Если нет, то можно так: если индексы отфильтрованного массива все > 0 и идут последовательно друг за другом, то получаем вхождение подмассива в массив. Но всё-таки проще заюзать первый вариант.
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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