Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

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

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

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

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

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

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

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

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

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

Цитата:
Сообщение от 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 в 02:31.
OmegaBerkut вне форума   Ответить с цитированием
Старый 18.12.2017, 12:43   #16
Sciv
Профессионал
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Адрес: Курган
Сообщений: 3,201
Репутация: 1205
По умолчанию

Цитата:
Сообщение от 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, 12:53   #17
Аватар
Модератор
Заслуженный модератор
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Адрес: Северодонецк.ua
Сообщений: 17,670
Репутация: 6211
По умолчанию

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

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

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

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

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужно построить диаграммы UML RoseAle Помощь студентам 15 02.04.2015 08:56
Нужно построить диаграмму((( grooveone Паскаль 3 14.12.2013 15:22
нужно построить график Kara777 Помощь студентам 1 17.05.2011 18:29
Нужно построить блок схемы FEAREX Помощь студентам 0 27.12.2010 19:02


07:49.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru