|
|
|
Внутреннний алгоритм поиска значения в ТЗ Ø |
☑ | ||
|---|---|---|---|---|
|
0
MarryJane
28.12.05
✎
11:55
|
Может кто подскажет как организован алгоритм поиска элемента в ТЗ
ТЗ.НайтиЗначение(Значение,СТр,Колонка). Просто возник вопрос сейчас выгружается в ТЗ 5000 строк. Если эта выгрузка дойдет до 12000 строк, увеличится ли время поиска по ТЗ |
|||
|
1
Alexaha
28.12.05
✎
11:57
|
0. это легко проверить, но скорее всего увеличится
|
|||
|
2
MarryJane
28.12.05
✎
11:57
|
Забыл добавить в 1С 7.7
|
|||
|
3
banda
28.12.05
✎
11:58
|
увеличиться, но в каком степени
можно проверить только на практике |
|||
|
4
КонецЦикла
28.12.05
✎
11:58
|
К сожалению, время поиска, допустим числового значения, зависит от того, какое оно "по счету", т.е. в какой строке ТЗ находится
|
|||
|
5
АЛьФ
28.12.05
✎
11:59
|
1С++. Объект ИндексированнаяТаблица.
|
|||
|
6
Денис2
28.12.05
✎
12:00
|
скорость поиска - О(n), где n - число строк в таблице.
|
|||
|
7
NS
28.12.05
✎
12:00
|
Да, увеличится. В 2.4 раза.
Поиск в ТЗ идёт перебором строк. При количестве строк большем, чем 2500 - лучше хранить ТЗ отсортированной по колонке, и пользоваться бинарным поиском. А вообще - быстрее использовать XBase индекированный, либо любые индексированные внешние средства. |
|||
|
8
Денис2
28.12.05
✎
12:02
|
(5) Которую до сей поры не рекомендуется в production code использовать :-)
|
|||
|
9
MarryJane
28.12.05
✎
12:04
|
Могу добавить выгружается табличная часть Документа
в таблице существуют реквизиты Справочник и числовые значения. Поиск осуществяется по реквизиту справочник. |
|||
|
10
АЛьФ
28.12.05
✎
12:07
|
2(8) Хм... "до сей поры"?... Сколько ей от роду? Месяц или два?
|
|||
|
11
MarryJane
28.12.05
✎
12:08
|
А можно по подробнее про бинарный поиск по таблице
|
|||
|
12
Денис2
28.12.05
✎
12:09
|
(10) Не знаю :-) Я о её существовании узнал неделю назад :-)
|
|||
|
13
АЛьФ
28.12.05
✎
12:11
|
2(12) Вот видишь... А люди уже во всю используют ее в живых базах.
|
|||
|
14
Денис2
28.12.05
✎
12:12
|
(11) Алгоритм двоичного поиска знаешь? Нет???
ТОгда сначала Кнута читать... |
|||
|
15
Денис2
28.12.05
✎
12:14
|
(13) дык это не я придумал :-) Это на сайте 1спп написано :-) Или предлагаешь не верить тому, что там пишуть? :=)
|
|||
|
16
MarryJane
28.12.05
✎
12:14
|
А вот попутно вопрос. Сейчас справочник товаров насчитывает около 7000 записей, если увеличатся до 100000. Что произойдет со справочником (т.е. как он быстро он будет открыватся и как быстро будет осуществлятся поиск по какому нить реквизиту)
|
|||
|
17
АЛьФ
28.12.05
✎
12:16
|
2(15) Я о том, что не надо этого бояться. И о том, что слова "до сей поры" здесть неуместны, т.к. "поры" еще очень мало прошло :)
|
|||
|
18
Денис2
28.12.05
✎
12:17
|
(16) Смотря как он открывается и как осуществляется поиск по реквизиту...
(17) "И ты прав" (с) :-) |
|||
|
19
КонецЦикла
28.12.05
✎
12:19
|
2(16) Нормально все будет... там индексы имеются
|
|||
|
20
MarryJane
28.12.05
✎
12:20
|
Так где можно почитать про бинарный поиск для 1С 7.7
|
|||
|
21
Vladis
28.12.05
✎
12:20
|
(16) Намек. У реквизита справочника есть такие "галки" как "сортировка" и "отбор по реквизиту" злоупотреблять не советуют.
|
|||
|
22
MarryJane
28.12.05
✎
12:22
|
А где можно почитать про 1С++
|
|||
|
23
Денис2
28.12.05
✎
12:23
|
(20 повторяю. "бинарный поиск для 1С 7.7" _ничем_ не отличается от бинарного поиска по любому массиву.
Вкратце. ТЗ сортируется по искомой колонке. берем элемент из середины (тз.количествоСТрок()/2) таблицы. сравниваем. Если искомый элемент меньше взятого, то идём в первую половину, если больше - во вторую. повторяем до нахождения или пока тзИскомая.количествоСтрок() <=2 |
|||
|
24
Денис2
28.12.05
✎
12:25
|
(22) www.1cpp.ru , itland.ru/forum/index.php?showforum=8
|
|||
|
25
Сли то
28.12.05
✎
12:26
|
(23) это не совсем бинарный поиск - это метод половинного деления
Бинарный уть подругому, но суть таже |
|||
|
26
NS
28.12.05
✎
12:28
|
ТЗ.Сортировать("РеквизитПоиска+");
в цикле - нач=1; кон=ТЗ.КоличествоСтрок(); нашли=0; пока нач<=кон цикл сред=цел(нач+кон)/2; зн=ТЗ.ПолучитьЗначение(сред,"РеквизитПоиска"); Если зн=РеквизитПоиска Тогда нашли=сред; Иначеесли зн>РеквизитПоиска Тогда кон=сред-1; Иначе // зн<.... нач=сред+1; Конецесли; КонецЦикла; |
|||
|
27
artbear
28.12.05
✎
12:28
|
Очень рекомендую 1С++ с ее объектом "ИндексированнаяТаблица".
Выдержка из доки http://www.1cpp.ru/docum/IndexedTable.html Аналог встроенного типа "ТаблицаЗначений", дополненный возможностью создавать и использовать индексы над таблицей. Индексы строятся в виде двоичных поисковых деревьев, таким образом получаем затраты на поиск O(log2(N)), тогда как в стандартном типе "ТаблицаЗначений" поиск осуществляется перебором строк, и следовательно затраты на поиск O(N). Индекс может быть двух типов: по всем строкам таблицы; по строкам с уникальными значениями ключа. Строки с повторяющимися значениями ключа будут проигнорированы, и в операции перебора строк, суммирования, свёртки, выгрузки, загрузки не попадут. Использование индексов даёт и другие преимущества, кроме ускорения поиска: возможность поиска по нескольким значениям (по составному ключу); наличие нескольких индексов для одной таблицы, независимые выборки для каждого индекса; поиск по условиям "больше либо равно", "меньше либо равно"; построение индекса только по уникальным значениям даёт возможность получить список уникальных ключей без свёртывания таблицы; свёртка по существующему индексу - при этом не теряется время на построение временного индекса; динамическая фильтрация строк; суммирование и свёртка по динамическому фильтру. ЗЫ работает вполне успешно, я уже несколько недель (пару месяцев) использую в боевых базах и разработках. Практически на нее молюсь. Об обычной ТЗ начал потихоньку забывать ;-) |
|||
|
28
NS
28.12.05
✎
12:30
|
ТЗ.Сортировать("РеквизитПоиска+");
в цикле - нач=1; кон=ТЗ.КоличествоСтрок(); нашли=0; пока нач<=кон цикл сред=цел(нач+кон)/2; зн=ТЗ.ПолучитьЗначение(сред,"РеквизитПоиска"); Если зн=РеквизитПоиска Тогда нашли=сред; прервать; Иначеесли зн>РеквизитПоиска Тогда кон=сред-1; Иначе // зн<.... нач=сред+1; Конецесли; КонецЦикла; |
|||
|
29
MarryJane
28.12.05
✎
12:30
|
Как можно сравнить элемент меньше он или больше если это справочник.
Ведь сортировка Колонки в ТЗ (если это справочник) осуществляется по алфовиту |
|||
|
30
vclim
28.12.05
✎
12:30
|
Вкратце про бинарный поиск... это свой алгоритм писать?
|
|||
|
31
Дурочка 1С
28.12.05
✎
12:32
|
>> Просто возник вопрос сейчас выгружается в ТЗ 5000 строк.
А можно поподробней? Откуда выгружается? Кто автор технологии? |
|||
|
32
Денис2
28.12.05
✎
12:33
|
(29) а это уже задача программиста : ввести операцию сравнения над справочниками :-) Можно сделать колонку Код, можно сортировать и сравнивать по внутреннему значению...
(25) покажи разницу. |
|||
|
33
MarryJane
28.12.05
✎
12:44
|
Блин спасибо большое кто принял участие в обсуждении.
|
|||
|
34
artbear
28.12.05
✎
12:45
|
- Доктор, почему меня все игнорируют?
- Следующий ;-) ЗЫ почитайте пост (27) и забудьте про встроенную ТЗ с ее глюками и тормозами. |
|||
|
35
zzz
28.12.05
✎
12:48
|
2(34) не всем и не всегда возможно подключать ВК (1с++). Да ещё без гарантий работоспособости.
|
|||
|
36
MarryJane
28.12.05
✎
12:51
|
artbear Можно ли сбросить пример кода с ипользованием объекта "ИндексированнаяТаблица
|
|||
|
37
MarryJane
28.12.05
✎
12:56
|
artbear mail zas@shintorg.by
|
|||
|
38
АЛьФ
28.12.05
✎
12:58
|
2(35) А сам движок 1С с гарантией работоспособности идет?
|
|||
|
39
zzz
28.12.05
✎
13:01
|
2(38) нет. Но по поводу движка можно обратиться к франчу или другому спецу, а если вставить ВК, то это ещё и знать надо.
Пример: приехал к клиенту, поставил 1с++ написал код с применением её возможностей, взял деньги, уехал. через некоторое время у них в определённой ситуации вылезет глюк и всё рухнет или просто потеряет работоспособность. они даже не догадаются обновить 1с++. в которой возможно этот баг исправлен уже будет. Факт - работа выполнена, деньги получены, но не работает. Плохая будет ситуация. |
|||
|
40
АЛьФ
28.12.05
✎
13:04
|
2(39) Плохой пример. Клиент так же не знает что ему надо к франчу обратиться, если движок глючит (да чем тут франч может помочь?).
|
|||
|
41
zzz
28.12.05
✎
13:05
|
2(40) Цель? Доказать мне что без 1с++ нельзя? Зачем?
|
|||
|
42
АЛьФ
28.12.05
✎
13:12
|
2(41) Совсем нет. Цель - доказать, что фраза "гарантии работоспособности" не имеет смысла в данном контексте. И отрицать возможности применения какого-либо инструмента только из-за того, что ты не понимаешь как оно все работает - глупо.
Или ты считаешь, что движок 1С разрабатывают какие-то супер-пупер профессионалы, которым разработчики внешних компонент даже в подметки не годятся? |
|||
|
43
zzz
28.12.05
✎
13:18
|
2(42) если к глюкам 1С добавить глюки 1с++, то вероятность критической ошибки увеличится. Глюки 1С в большинстве своём изучены, да и релизов у них = 25, глюки 1с++ неизвестны (мне) и в каждом релизе (которых много) я могу получить разные проблемы.
Если я буду вести проект своими руками или в конце передавать нормальному челу - я буду использовать 1с++, иначе я предпочту "медленней, но без ВК". |
|||
|
44
Дурочка 1С
28.12.05
✎
13:18
|
(42) Твои цели известны ... Давай ссылку на свои поделки и закончим дискуссию ...
|
|||
|
45
АЛьФ
28.12.05
✎
13:22
|
2(43) Твое мнение понятно. Непонятен только смысл в запугивании других людей (по сценарию "ВК - Вселенское Зло").
2(44) У меня нет поделок. |
|||
|
46
zzz
28.12.05
✎
13:26
|
2(45) не считаю фразу "не всем и не всегда возможно подключать ВК" запугиванием,
также как и "без гарантий работоспособости" (смысл которой я подробно изложил в 43) Кстати существует ещё всякие напряги с безопасностью в больших фирмах. Неоднократно сталкивался с тем что ВК просто так не подключишь - приходится обосновывать полезность, давать гарантии что "она не сотрёт базу и не испортит данные". |
|||
|
47
АЛьФ
28.12.05
✎
13:38
|
2(46) Соглашусь, что внешние компоненты не для людей, которые занимаются мелкими доработками типовых.
|
|||
|
48
jbond
28.12.05
✎
13:58
|
(46) - у меня 1С++ пока ничего не стирал.
Зы. Разробтки OpenSoure гораздо более надежные (взять тот же Линукс) и найденные ошибки мгновенно исправляются. |
|||
|
49
Учусь
28.12.05
✎
14:36
|
удаление ифномации без вских ВК
http://itland.ru/forum/index.php?showtopic=12181 |
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |