powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / поиск в массиве строк начинающихся с подстроки
9 сообщений из 9, страница 1 из 1
поиск в массиве строк начинающихся с подстроки
    #34947182
tipoc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всех приветствую! У меня вопрос:
есть массив отсортированных по возрастанию строк. Нужно найти концевые индексы подмассива элементов, начинающихся с подстроки.

Пример: есть массив
Код: plaintext
array = {"абсурд", "авангард", "август", "авось", "агава", "аура"}
, подстрока
Код: plaintext
from="ав"
. В данном случае
Код: plaintext
подмассив = {"авангард", "август", "авось"}
(т.е. строки, начинающиеся с "ав"). Концевые индексы: начальный индекс = 1, конечный индекс = 3 (индексация массива идет с нуля).

Как лучше реализовать данный алгоритм? (чтобы был не слишком сложный и работал относительно быстро). Кол-во строк в массиве может достигать десятки тысяч. Если что, язык программирования Java. Ссылки на статьи приветствуются. :)
...
Рейтинг: 0 / 0
поиск в массиве строк начинающихся с подстроки
    #34947183
ErV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tipoc wrote:

> Как лучше реализовать данный алгоритм?
Отталкиваться от двоичного поиска.
--
We are all going to hell and I'm driving the bus
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
поиск в массиве строк начинающихся с подстроки
    #34947185
tipoc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ErV> Как лучше реализовать данный алгоритм?
Отталкиваться от двоичного поиска.
Пытался, но в голову не приходит явное решение. Да и двоичный поиск хорош только для точного поиска. Может есть другие решения?
...
Рейтинг: 0 / 0
поиск в массиве строк начинающихся с подстроки
    #34947187
Фотография Restavraciya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Если что, язык программирования Java
Если что, свалить в ado recordset и искать в нем доступными средствАми ;-)
...
Рейтинг: 0 / 0
поиск в массиве строк начинающихся с подстроки
    #34947188
teras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tipoc wrote:
> Автор: tipoc
>> ErV
>>> Как лучше реализовать данный алгоритм?
>> Отталкиваться от двоичного поиска.
>
> Пытался, но в голову не приходит явное решение. Да и двоичный поиск
> хорош только для точного поиска.

Это не так. Его вполне можно использовать и в этом случае.
Я тут как-то описывал свое видение алгоритма
тут .
Возможно, поможет составить нужный алгоритм. Для поиска интервала, его
придется применять дважды - для поиска первого элемента и последнего
элемента. Кроме того, результаты первого поиска могут сузить интервал
для второго.

> Может есть другие решения?
Если не преобразовывать массив или не строить доп.структур, то пожалуй
нет. Если можно преобразовывать, то я бы подумал в первую очередь о
trie. все-таки в нем время поиска пропорционально длине искомой строки
(в данном случае - за два шага).
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
поиск в массиве строк начинающихся с подстроки
    #34947275
ErV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tipoc wrote:

> Да и двоичный поиск хорош только для точного поиска.
Варианты:
1) проводим поиск дважды. В первом случае ищем элемент, который
начинается с нужной строки, и имеет перед ним строку "меньше" него.
Вторым поиском ищем элемент, который начинается с нужной подстроки, но
содержит после него подстроку "больше" него. Это можно задать в
критерии сравнения.
2) Тупо находим любой элемент, начинающийся с нужной подстроки и ищем
первый и последний элемент такого типа последовательным перебором от
найденного элемента. (в сторону начала и в сторону конца массива).
--
We are all going to hell and I'm driving the bus
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
поиск в массиве строк начинающихся с подстроки
    #34947548
tipoc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ErV1) проводим поиск дважды. В первом случае ищем элемент, который
начинается с нужной строки, и имеет перед ним строку "меньше" него.
Вторым поиском ищем элемент, который начинается с нужной подстроки, но
содержит после него подстроку "больше" него. Это можно задать в
критерии сравнения.
Так и сделаю. Спасибо!
...
Рейтинг: 0 / 0
поиск в массиве строк начинающихся с подстроки
    #34956325
Liventsev Andrey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в Яве делается элементарно:
Код: plaintext
1.
2.
3.
4.
5.
Set result = new HashSet();
if( stringArray[i].length()>=s.length() &&  stringArray[i].substring( 0 ,s.length()- 1 ).equals(s) ){
    if( stringArray[i].substring( 0 ,s.length()- 1 ).equals(s) ){
        result.add( stringArray[i] );
     }
}

где stringArray это массив стрингов - String[]. s - искомая подстрока.
...
Рейтинг: 0 / 0
поиск в массиве строк начинающихся с подстроки
    #34956820
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tipocВсех приветствую! У меня вопрос:
есть массив отсортированных по возрастанию строк. Нужно найти концевые индексы подмассива элементов, начинающихся с подстроки.
.....
Как лучше реализовать данный алгоритм? (чтобы был не слишком сложный и работал относительно быстро). Кол-во строк в массиве может достигать десятки тысяч. Если что, язык программирования Java. Ссылки на статьи приветствуются. :)

Насколько я понимаю, вы кодите словарь.

Если объем словаря укладывается в границы свободной памяти ОС, то можно хранить все слова в массиве. Более продвинутое решение - подумать над коллекцией, которая быстро ищет "ключи в диапазоне" (например BTree). Не забывайте, что время инициализации массива - тоже важно. Если он должен быть персистентным то так или иначе вы его будете хранить во внешнем файле. Значит надо подумать о том, как он будет загружатся и как (когда) выгружатся, чтобы не быть балластом для ОС и других приложений.

В остальных случаях - рулит встраиваемая СУБД. Попробуйте прикрутить JavaDB или HSQL. Обратите внимание на индексы по текстовым полям, индексно-организованные таблицы, индексы по функции. Это может пригодится.

Всего.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / поиск в массиве строк начинающихся с подстроки
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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