Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Поиск по подстроке в ИТЗ, возможен ли? (число прочтений - 3084 )
Jarad
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 35
Зарегистрирован: 22. Мая 2006
Поиск по подстроке в ИТЗ, возможен ли?
12. Марта 2008 :: 16:21
Печать  
Ну например если есть ИТЗ, колонка наименование, есть индекс по колонке. Можно ли используя методы ИТЗ, без простого перебора и использования Найти(), найти строку по определенной подстроке, что то типа аналога LIKE '%подстрока%'.
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Поиск по подстроке в ИТЗ, возможен ли?
Ответ #1 - 12. Марта 2008 :: 17:40
Печать  
Нет.
Для этого совсем другие индексы нужны.

А в общем случае в таких запросах индексы вообще не при делах - только перебор с быстрой функцией поиска подстроки.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Поиск по подстроке в ИТЗ, возможен ли?
Ответ #2 - 12. Марта 2008 :: 18:46
Печать  
Хотя...
Смотря какая задача.

Сейчас ничто не мешает для оригинальной ИТ создать еще одну ИТ - общий суффиксный массив, в котором и осуществлять поиск вхождения.
В зависимости от задачи эффективней будет либо этот, либо однопроходной вариант.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Поиск по подстроке в ИТЗ, возможен ли?
Ответ #3 - 14. Марта 2008 :: 06:45
Печать  
kms писал(а) 12. Марта 2008 :: 18:46:
Сейчас ничто не мешает для оригинальной ИТ создать еще одну ИТ - общий суффиксный массив, в котором и осуществлять поиск вхождения.

Подробнее опиши схему, что-то я не понял, каким образом можно сделать подобный массив при поиске произвольной подстроки произвольной длины ?
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Поиск по подстроке в ИТЗ, возможен ли?
Ответ #4 - 14. Марта 2008 :: 07:15
Печать  
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: Поиск по подстроке в ИТЗ, возможен ли?
Ответ #5 - 14. Марта 2008 :: 07:22
Печать  
Вот по русски Улыбка: http://rain.ifmo.ru/cat/view.php/theory/unsorted/suffix-arrays-2005
Там рассматривается случай одной строки, но столбец со строками таблицы можно, наверное, рассматривать как некоторый большой текст. И, например, помимо индексов для суффиксов, еще и сохранять индекс строки таблицы.
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Поиск по подстроке в ИТЗ, возможен ли?
Ответ #6 - 14. Марта 2008 :: 08:17
Печать  
Jarad писал(а) 12. Марта 2008 :: 16:21:
Ну например если есть ИТЗ, колонка наименование, есть индекс по колонке. Можно ли используя методы ИТЗ, без простого перебора и использования Найти(), найти строку по определенной подстроке, что то типа аналога LIKE '%подстрока%'.


Можно найти LIKE 'подстрока%'.
- использовать метод НайтиБлижайшуюБольше()

И соответственно можно добавить 10 полей в ИТЗ(и 10 индексов) с обрезанными 1, 2 ..9 первыми символами соответственно
и при помощи метода НайтиБлижайшуюБольше искать в этих столбцах.
т.е. будет аналог LIKE '%подстрока%', где первый % не более 10 симоволов.
Эти 10 дополнительный полей и будут аналогом  суффиксного массива

P.S> Альтернативный вариант  :
Отдельная ИТЗ со столбцом Суффиксы и Ключ.
Во вторую ИТЗ складываются все наименования, наименования с обрезанным первым символом и т.д.
В поле ключ - ключевое поле первой ИТЗ.
При помощи НайтиБлижайшуюБольше находим нужные ключи первой ИТЗ.

« Последняя редакция: 14. Марта 2008 :: 09:41 - kiruha »  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать