|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
16.12.2017, 17:30 | #11 |
Спокойный псих
Участник клуба
Регистрация: 19.03.2013
Сообщений: 1,538
|
По хорошему нужно находить все такие цепочки с любой длинной.
Подпись ? Не, не слышал ...
|
17.12.2017, 00:12 | #12 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
Вы извините, но я позволю себе высказать одну крамольную мысль.
И не совсем по теме. На мой взгляд Вы пытаетесь сделать АБСОЛЮТНО ненужную вещь. Да, конечно, построение всех возможных цепочек, конечно, приведёт к резкому ускорению и упрощению выбора всех замен (кроссов) для заданной детали. Но. какой ценой?! Первое. Это резкое увеличение размера БД (допускаю, что в разы). второе. Постоянная необходимость корректировать цепочки, добавлять новые. что же можно предложить в качестве альтернативы? Это функция/процедура/вьюха, которая по заданному коду находить все варианты и возращает все возможные кроссы. Да, конечно, это будет работать намного медленнее и код будет замороченный (скорее всего рекурсивный). и возвращать набор данных получится только для заданной детали (по одной цепочке). Но, ведь как раз это и нужно - пользователь ищет какую-то конретную деталь, ему нужно найти и показать все кроссы. И совсем не обязательно все эти кроссы хранить в БД, можно их получать на лету. всё это имхо, конечно... просто высказал своё мнение. возможно, что я не прав. Но Вы подумайте над моим предложением, вдруг в этой идее что-то здравое есть. |
17.12.2017, 00:34 | #13 | |
Спокойный псих
Участник клуба
Регистрация: 19.03.2013
Сообщений: 1,538
|
Цитата:
Я достоверно точно могу сказать, что на сайте выдаются только те запчасти, которые имеют реальный кросс. Вы дали мне идею посмотреть, как работает алгоритм извлечения аналогов, и как его можно изменить. Я тоже сначала думал, что нужна рекурсия, но пришёл к выводу, что могу зациклиться по данным, достоверного условия выхода у меня не будет (если наткнусь на исходный кросс - это не даёт гарантий, что я перебрал все варианты). В итоге я сейчас размышляю о графах.
Подпись ? Не, не слышал ...
Последний раз редактировалось OmegaBerkut; 17.12.2017 в 00:59. |
|
17.12.2017, 11:22 | #14 |
Старожил
Регистрация: 16.05.2012
Сообщений: 3,211
|
Если что, то обход дерева тоже реализуется через рекурсию.
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
|
18.12.2017, 01:25 | #15 |
Спокойный псих
Участник клуба
Регистрация: 19.03.2013
Сообщений: 1,538
|
Так у меня вроде и не дерево. У меня просто список пар запчастей, которое в дерево не получится запихать ну ни как. Во всяком случае я это не могу себе представить.
Я вижу многосвязную структуру (код на C#): Код:
- разместить в массиве SparePart[] имеющиеся почти 24 миллиона запчастей (12 миллионов пар/кроссов); - заполнить первичные данные связей (на один кросс создаётся два объекта класса, линкуются друг на друга, и размещаются в массиве). На данном этапе граф готов, а массив лишь хранилище. Далее мне надо вспоминать (читай гуглить) алгоритмы обхода графов. Ну и затачивать на свою задачу. В конце построения всех связей выполняется линейный обход массива, при этом восстанавливаются все связи. К концу массива, новых связей будет всё меньше и меньше, так как подразумевается двусторонняя связь, и в процессе формирования новых кроссов нужно проверять, не был ли ранее создан этот кросс. P. S. Эти действия описывают реализацию изначально поставленной задачи.
Подпись ? Не, не слышал ...
Последний раз редактировалось OmegaBerkut; 18.12.2017 в 01:31. |
18.12.2017, 11:43 | #16 |
Старожил
Регистрация: 16.05.2012
Сообщений: 3,211
|
По определению: "Дерево — это связный ациклический граф"
В Вашем случае выглядит как-то так, насколько я понял: Код:
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
|
18.12.2017, 11:53 | #17 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
Дерево для разового лечения или для оперативного использования? Если 1-ое то зачем? Легко на уровне SQL решить, если 2-ое - то не слишком ли накладно? Серж предлагал по конкретному коду находить, а не строить все дерево с миллионами узлов. И даже по конкретному, то все равно без рекурсии не обойтись ))
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
18.12.2017, 12:12 | #18 |
Спокойный псих
Участник клуба
Регистрация: 19.03.2013
Сообщений: 1,538
|
Так под "оперативным использованием" подразумевается повторное использование без конкретной периодичности, может раз в пол года, может раз в месяц. Но точно не чаще.
Я сейчас думаю над извлечением всех цепочек на лету. Но таблицу всё равно нужно очистить от дубликатов, учитывая двустороннюю связь. Иначе будут прорывы стеков.
Подпись ? Не, не слышал ...
|
18.12.2017, 12:19 | #19 | |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
Цитата:
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Нужно построить диаграммы UML | RoseAle | Помощь студентам | 15 | 02.04.2015 07:56 |
Нужно построить диаграмму((( | grooveone | Паскаль, Turbo Pascal, PascalABC.NET | 3 | 14.12.2013 15:22 |
нужно построить график | Kara777 | Помощь студентам | 1 | 17.05.2011 18:29 |
Нужно построить блок схемы | FEAREX | Помощь студентам | 0 | 27.12.2010 18:02 |