Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.12.2017, 17:30   #11
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
какова может быть максимальная цепочка
По хорошему нужно находить все такие цепочки с любой длинной.
Цитата:
Сообщение от OmegaBerkut Посмотреть сообщение
Важно то, что в каждой такой "цепочке" может быть сколько угодно кроссов (в описанном случае их всего три)
Подпись ? Не, не слышал ...
OmegaBerkut вне форума Ответить с цитированием
Старый 17.12.2017, 00:12   #12
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от OmegaBerkut Посмотреть сообщение
По хорошему нужно находить все такие цепочки с любой длинной.
Вы извините, но я позволю себе высказать одну крамольную мысль.
И не совсем по теме.

На мой взгляд Вы пытаетесь сделать АБСОЛЮТНО ненужную вещь.
Да, конечно, построение всех возможных цепочек, конечно, приведёт к резкому ускорению и упрощению выбора всех замен (кроссов) для заданной детали.
Но. какой ценой?!
Первое. Это резкое увеличение размера БД (допускаю, что в разы).
второе. Постоянная необходимость корректировать цепочки, добавлять новые.

что же можно предложить в качестве альтернативы?
Это функция/процедура/вьюха, которая по заданному коду находить все варианты и возращает все возможные кроссы.
Да, конечно, это будет работать намного медленнее и код будет замороченный (скорее всего рекурсивный). и возвращать набор данных получится только для заданной детали (по одной цепочке).
Но, ведь как раз это и нужно - пользователь ищет какую-то конретную деталь, ему нужно найти и показать все кроссы. И совсем не обязательно все эти кроссы хранить в БД, можно их получать на лету.

всё это имхо, конечно...
просто высказал своё мнение.
возможно, что я не прав.
Но Вы подумайте над моим предложением, вдруг в этой идее что-то здравое есть.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 17.12.2017, 00:34   #13
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
И совсем не обязательно все эти кроссы хранить в БД, можно их получать на лету
Это бесспорно идеальный вариант, но к моему большущему сожалению сайт (на котором это всё должно работать) писал не я ...
Я достоверно точно могу сказать, что на сайте выдаются только те запчасти, которые имеют реальный кросс. Вы дали мне идею посмотреть, как работает алгоритм извлечения аналогов, и как его можно изменить.
Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
код будет замороченный (скорее всего рекурсивный)
Я тоже сначала думал, что нужна рекурсия, но пришёл к выводу, что могу зациклиться по данным, достоверного условия выхода у меня не будет (если наткнусь на исходный кросс - это не даёт гарантий, что я перебрал все варианты). В итоге я сейчас размышляю о графах.
Подпись ? Не, не слышал ...

Последний раз редактировалось OmegaBerkut; 17.12.2017 в 00:59.
OmegaBerkut вне форума Ответить с цитированием
Старый 17.12.2017, 11:22   #14
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Цитата:
Сообщение от OmegaBerkut Посмотреть сообщение
В итоге я сейчас размышляю о графах.
Если что, то обход дерева тоже реализуется через рекурсию.
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 18.12.2017, 01:25   #15
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию

Цитата:
Сообщение от Sciv Посмотреть сообщение
Если что, то обход дерева тоже реализуется через рекурсию.
Так у меня вроде и не дерево. У меня просто список пар запчастей, которое в дерево не получится запихать ну ни как. Во всяком случае я это не могу себе представить.
Я вижу многосвязную структуру (код на C#):
Код:
class SparePart
{
	public SparePart(string newBrand, string newArticle)
	{
		brand=newBrand;
		article=newArticle;
		links=List<SparePart>();
	}
	public string brand,article;
	public List<SparePart> links;
}
В один проход по таблице можно решить сразу две задачи:
- разместить в массиве SparePart[] имеющиеся почти 24 миллиона запчастей (12 миллионов пар/кроссов);
- заполнить первичные данные связей (на один кросс создаётся два объекта класса, линкуются друг на друга, и размещаются в массиве).

На данном этапе граф готов, а массив лишь хранилище.
Далее мне надо вспоминать (читай гуглить) алгоритмы обхода графов. Ну и затачивать на свою задачу.

В конце построения всех связей выполняется линейный обход массива, при этом восстанавливаются все связи. К концу массива, новых связей будет всё меньше и меньше, так как подразумевается двусторонняя связь, и в процессе формирования новых кроссов нужно проверять, не был ли ранее создан этот кросс.

P. S. Эти действия описывают реализацию изначально поставленной задачи.
Подпись ? Не, не слышал ...

Последний раз редактировалось OmegaBerkut; 18.12.2017 в 01:31.
OmegaBerkut вне форума Ответить с цитированием
Старый 18.12.2017, 11:43   #16
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Цитата:
Сообщение от OmegaBerkut Посмотреть сообщение
Так у меня вроде и не дерево.
По определению: "Дерево — это связный ациклический граф"

В Вашем случае выглядит как-то так, насколько я понял:

Код:
деталь 1 - аналог 1.1 - аналог 1.1.1
|       | 
|       | ---- аналог 1.2 - аналог 1.2.1
|       |              | 
|       |              ---------- аналог 1.2.2 - аналог 1.2.2.1
|       |
|        ------ аналог 1.3 
|
деталь 2 - аналог 2.1 
        |
         ----- аналог 2.2 - аналог 2.2.1
Ну и так далее.
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 18.12.2017, 11:53   #17
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Дерево для разового лечения или для оперативного использования? Если 1-ое то зачем? Легко на уровне SQL решить, если 2-ое - то не слишком ли накладно? Серж предлагал по конкретному коду находить, а не строить все дерево с миллионами узлов. И даже по конкретному, то все равно без рекурсии не обойтись ))
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 18.12.2017, 12:12   #18
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
для оперативного использования
Цитата:
Сообщение от Аватар Посмотреть сообщение
не слишком ли накладно?
Так под "оперативным использованием" подразумевается повторное использование без конкретной периодичности, может раз в пол года, может раз в месяц. Но точно не чаще.

Я сейчас думаю над извлечением всех цепочек на лету. Но таблицу всё равно нужно очистить от дубликатов, учитывая двустороннюю связь. Иначе будут прорывы стеков.
Подпись ? Не, не слышал ...
OmegaBerkut вне форума Ответить с цитированием
Старый 18.12.2017, 12:19   #19
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Цитата:
может раз в пол года, может раз в месяц
Это разовое лечение. SQL наше все ))
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужно построить диаграммы 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