Кто как реализовывал в ТЗ поиск по нескольким колонкам #245154


#0 by riman
1. С ходу видится только организация индекса в виде доп. колонки  строкового типа со значениями ключей (например номера элементов списковзначений с возможными вариантами) и отсортированной по ключу. 2. ну или полный перебор
#1 by mikecool
хорошо с ходу видится...
#2 by Defender aka LINN
+ Во-во.
#3 by Груздь
(1,2) "организация индекса" занимает много времени ...
#4 by Defender aka LINN
Если искать надо много и часто - она себя оправдывает.
#5 by Guk
+ и в итоге будет работать не быстрее перебора...
#6 by riman
индекс можно строить и при начальном заполнении ТЗ
#7 by selenat
вот так и надо действовать.
#8 by Груздь
(6,7) Это возможно далеко не всегда ... К тому же не всегда заранее известно по каим именно полям будет производится поиск.
#9 by riman
Вообще, задача стоит организовать работу с "N-мерным кубом". Если есть идеи как организовать структуру данных используя средства 1С очень буду признателен.
#10 by dyi
1c++ - там индексированная таблица уже есть..
#11 by Defender aka LINN
Если измерения этого "куба" известны заранее, то лучше таки доп. колонка. Выигрыш в производительности может и не такой уж большой, зато ИМХО удобнее.
#12 by Славко
я бы так сходу не заявлял...
#13 by Токс2
Ты не в теме, во чё снизу вылезло: "Совет: Задавая вопросы, подробно описывайте задачу, а не предполагаемый метод ее решения." Как можно узнать автора сего совета?
#14 by Барбариска
что подразумевается под N-мерным кубом? Что нужно будет иметь от построенной структуры? Можно поконкретнее о постановке задачи? Если измерения куба известны заранее - можно построить "древовидную таблицу значений"...
#15 by Джинн
1С++, объект ИнтексированнаяТаблица ЗЫ - колесо давно изобретено и придумывать новое, пусть даже квадратное, не имеет смысла.
#16 by Паладин
мне надо было работать с небольшими ТЗ, я написал маленькую функцию, которая перебирает ТЗ и сравнивает значение определенной колонки строки со строкой образцом, если находит - то дальше следующее условие, и т.д.
#17 by Барбариска
К 1С++ отношусь с уважением, но.... не всегда уместно использование 1С++, как и вообще внешних компонент.
#18 by dyi
задача описанная в там решена полностью
#19 by Defender aka LINN
Зато стоит добавить слова "штатными средствами", как отпадает тут же.
#20 by Барбариска
знаю, но все равно пришлось что-то подобное писать штатно
#21 by _r2003
Бес предметный разговор. Так как для различных условий различные решения. Была задача, для которой наиболее производительным оказалось отправлять все данные на сервер (более миллиона строк) во временную таблицу и там выполнять поиск строк. В этом смысле важно о каком количестве строк и колонок идёт речь. Если речь идёт о строках до 50 000 потери времени мало зависят от алгоритма. На нормальном компьютере.
#22 by КонецЦикла
Мега-спец пелять?
#23 by Славко
уверен, что эта задача шатано решится так же как на 1С++ если не быстрее, с учетом предложенной тобой ИТ... если делать как в то думаю ИТ не даст никакого выигрыша... а только проиграет по производительности...
#24 by Славко
шатано = штатно
#25 by selenat
Штатно ИМХО - лучший вариант, если возможно формировать ключ при заполнении ТЗ. Но для больших ТЗ предпочтительней 1с++, т.к. там встроена индексированность...
#26 by Груздь
Когда-то тут проводили исследования ... В результате выяснилось, что для общего случая этой задачи использование перебора оказалось наиболее оптимальным ...
#27 by КонецЦикла
Однако предположить сколько раз искать не представляется возможным Поэтому песпретметный базар
#28 by Барбариска
построение ИТ немножко заметно (пусть даже за один проход по исходной ТЗ), зато потом при большом количестве обращений очень шустренько )). Строилось для ускорения работы формы списка справочнике при использовании сводных остатков по регистру в колонке. Перебором наверное плохо было бы.
#29 by Guk
Исследования проводил не я, а NS. Так что можешь его мега-спецом пелять назвать...
#30 by Груздь
#31 by Славко
ты это к чему? ты наверное ваще кроме ИТ никаких знакомых букафф не нашел...
#32 by jcage
Сортируешь таблицу по нужным колонкам. Затем за один проход можешь получить все нужные значения. Или таблицу простым INSERT переводишь во временную таблицу под SQL, а оттуда уже Select'ом хоть с условием по 10 колонкам данные бери.
#33 by Славко
советчик млин, ты хоть в курсах сколько этот Select будет выборку делать по 10-ти неиндексированным колонкам?
#34 by jcage
Всяко быстрее, чем перебором искать.
#35 by Славко
все с тобой понятно...
#36 by Барбариска
??? я о "древовидных таблицах" - удобно для быстрого поиска и для подсчета итогов и всевозможных промежуточных под-итогов. Ради одного-двух поисков строить не стоит, проще перебор; ради частых обращений, например, в колонке в форме списка справочника  - эффективно работает.
#37 by jcage
от тебя в этой ветке я ни одного совета не увидел. критиковать каждый может.
#38 by Славко
у меня ответ был... и более чем конкретный...
#39 by riman
Возможно, велосипед. но может пригодится. N-мерный кубик с методами Получить и Установить:
#40 by КонецЦикла
Знаю, ну и что? Моск же свой есть чтобы прикинуть что нужно в конкретном случае, а не лепить то что кто-то проводил?
#41 by Туц
а там и не будет перебора, потому поиск будет осуществлятся через НайтиЗначение(,,); по колонке индекса и работать будет очень быстро... На моём P4 2.8 100 поисков по табличке из 3-колонок и 30000 строк выполнились за 0,758 сек.
#42 by Guk
Ты когда в тему ветки врубишся, заходи...
#43 by КонецЦикла
Боюс неполучитсо... лучше не буду...
#44 by NS
Так как ТЗ это неиндексированная структура, и найтиЗначение ищет простым перебором строк, то в случае большого числа строк в ТЗ, и если необходим неоднократный поиск - лучший варинт  Это вспомогательный индекс на индексированной структуре (XBase), если использовать можно только ТЗ - то Сортировка + Бинарный поиск (Деление интервала пополам) Цифры разницы в быстродействии я где-то уже приводил...
Тэги: Математика и алгоритмы
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С