За последние 24 часа нас посетили 18200 программистов и 1686 роботов. Сейчас ищут 816 программистов ...

Деревья.

Тема в разделе "Решения, алгоритмы", создана пользователем Volt(220), 22 сен 2010.

  1. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    Ими это деревьями? Все уже реализовано (для mssql и mysql).

    Не нравиться интерфейс класса БД? Не вопрос используй свой. Найти и заменить соответствующие вызовы не проблема.

    Сформировать запросы, запустить их в нужном порядке, откатить транзакцию при неудаче.

    Т.е. везде где мне нужен объект/массив, я должен вместо одной строчки писать две? Это ж копипаста. Проще выделить соответствующий метод. И тогда смысл внутри метода делать $object= (object)$array, когда можно сразу получить нужный результат?
     
  2. tenshi

    tenshi Активный пользователь

    С нами с:
    1 июн 2010
    Сообщения:
    191
    Симпатии:
    0
    ага, и делать так при каждом апдейте библиотеки х)

    создать один составной запрос и вернуть его - пусть уже внешний код решает что с этими запросами делать (исполнить/логировать/запланировать..)

    Код (Text):
    1. Проще выделить соответствующий метод.
    вот и создай себе этот метод через адаптер или примесь или через что угодно ещё, только не заставляй для каждой базы реализовывать весь этот блоб-интерфейс.
     
  3. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    Во-первых, не при каждом, а только если появилось что-то необходимое или исправлена серьезная ошибка.
    Во-вторых, можно создать соответствующий скрипт замены.
    В-третьих, можно накатывать не всю библиотеку, а только разницу.
    В-четвертых, не нравиться не ешь.

    В идеале - да, но в некоторых местах происходят вычисления на основе измененных данных

    0)А я и не заставляю.
    1)Не все методы этого интерфейса используются в деревьях.
    2)Есть уже готовая реализация и, строго говоря, для базы надо реализовать лишь специфичные методы
     
  4. tenshi

    tenshi Активный пользователь

    С нами с:
    1 июн 2010
    Сообщения:
    191
    Симпатии:
    0
    подход "не нравится - не используй" приводит в конечном счёте к тому, что никто использовать и не будет. так как адаптация твоей библиотеки стоит дороже написания своей с нуля
     
  5. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    Ну и что? Я же ее не продаю. =))
    Адаптация библиотеки под конкретный класс работы с БД - пара часов.
    Создание такой библиотеки с нуля - 20-40 часов.
     
  6. tenshi

    tenshi Активный пользователь

    С нами с:
    1 июн 2010
    Сообщения:
    191
    Симпатии:
    0
    а что ты делаешь? зачем ты её тут опубликовал?

    пара часов для тебя. а остальным ещё долго разбираться как с ней работать, в её особенностях, ограничениях, неявных соглашениях и прочей мути.
     
  7. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    1) Чтобы те у кого возникают вопросы по деревьям могли на конкретном примере понять как можно сделать то или иное действие;
    2) Чтобы сообщество указало на ошибки и недочеты библиотеки.
    3) Чтобы агрегировать в один топик ссылки на разные полезные ресурсы по деревьям;
    4) Чтобы почесать свое самолюбие;

    Пара часов - это чтобы другой класс DB прикрутить, а разбираться как с ней работать, в её особенностях, ограничениях, неявных соглашениях и прочей мути придется точно так же как с любой другой библиотекой.
     
  8. tenshi

    tenshi Активный пользователь

    С нами с:
    1 июн 2010
    Сообщения:
    191
    Симпатии:
    0
    1. не поймут. тут нужно нормальный мануал, а не груда исходников
    2. вот я тебе и указал.
    3. а получился топик об одной библиотеке
    4. вот, это надо было на 1 место ставить ;-)

    вот именно что, библиотека не упрощает задачу, она лишь меняет задачу "как подстроиться под реляционную бд" на задачу "как подстроиться под библиотеку"
     
  9. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    1) Почему не поймут? Там вроде не так сильно все запутано. Да и я могу ответить на вопросы, если их зададут.
    2) Спасибо.
    3) В самом начале я даю ссылки. И я вполне использую этот топик как агрегатор. Я не говорю, что я создал хороший агрегатор, я говорю что этот топик можно так использовать.
    4) Возможно.

    Задача "как подстроиться под библиотеку" в данном случае мне кажется проще, чем задача "как подстроиться под реляционную бд".
     
  10. tenshi

    tenshi Активный пользователь

    С нами с:
    1 июн 2010
    Сообщения:
    191
    Симпатии:
    0
    1. потому что слишком много кода и слишком мало объяснения

    подстраиваться под рбд все и так умеют, а если не умеют - есть куча мануалов в сети. подстраиваться под твою библиотеку - это совершенно новый экспририенс
     
  11. Mark32

    Mark32 Активный пользователь

    С нами с:
    15 июн 2008
    Сообщения:
    539
    Симпатии:
    2
    Volt(220)

    если можно, вкратце, чем отличаются вообще - Adjacency List, Redundant Adjacency List, Nested Sets

    Сам работаю с Nested Sets - плюс в том что 1 запрос к бд.

    Минус в том, что както негибко извлекаются данные. Т.е. например если прибавится доп. данные, нужно функцию перелопачивать, или уже в несколько запросов.

    Что вообще сейчас по деревьям самое функциональное и быстрое?
     
  12. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    Разница в способе хранения. По ссылкам в первом сообщении вроде все есть.

    Это если надо выбрать. А если надо перенести поддерево от одного родителя к другому, вот тут все и начинается.

    В Nested Sets данные извлекаются на ура. Вот изменения данных это уже задачка.
    В Redundant Adjacency List извлекаются так же просто, и немного проще изменяются.
    В Adjacency List легко изменить родителя, легко работать со всем деревом, а вот с поддеревьями уже не удобно.

    Но т.к. в основном идет выборка, то Nested Sets оказываются удобнее Adjacency List.
    Redundant Adjacency List столь же удобен, но занимает больше места для хранения дерева (и, по идее, требует больше памяти для обработки).

    Понятия не имею. Использую то, что удобнее в конкретном случае.

    Имея библиотеку типа той что в данном топике, можно замерить время выполнения операций и посмотреть на какой схеме хранения данных программа работает быстрее.
     
  13. Mark32

    Mark32 Активный пользователь

    С нами с:
    15 июн 2008
    Сообщения:
    539
    Симпатии:
    2
    Volt(220)

    спасибо за ответ, буду разбираться. Тема деревьев одна из самых важных в любой программе.

    Это да, и к сожалению универсальное и красивое вещь крайне редкая.
     
  14. Koc

    Koc Активный пользователь

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
     
  15. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    Добавил как вариант.
     
  16. jei

    jei Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    542
    Симпатии:
    0
    Здарова умник.А для чего вообще нужны деревья?)))
     
  17. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    Для поддержания биогеоценоза и управления сложностью.
     
  18. jei

    jei Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    542
    Симпатии:
    0

    А проще говоря?
     
  19. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    Чтоб животные и растения жили, и чтоб программы были проще и понятнее.
     
  20. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.549
    Симпатии:
    0
    Адрес:
    Мариуполь
    jei
    Надеюсь через 5 лет ты поймешь зачем используются древовидные структуры данных :)
     
  21. Gromo

    Gromo Активный пользователь

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    Деревья отделают кислород в воздух, и поглощают углекислый газ, как и другие растения.
    А также приносят фрукты, некоторые - довольно вкусные. Ещё можно отдыхать в тени от дерева или наслаждаться видом.

    Я думал это проходят в детском садике, ну максимум, в первом классе в школе :D
     
  22. jei

    jei Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    542
    Симпатии:
    0
    Коллллллега что бы понять что такое деревья,мне достаточно пару часов.
    Был бы нормальный объяснитель.
     
  23. Mark32

    Mark32 Активный пользователь

    С нами с:
    15 июн 2008
    Сообщения:
    539
    Симпатии:
    2
    jei
    деревья это неотъемлемая часть любого немалого приложения.
    вся информация нуждается в классификации и стройном представлении.

    PS я думаю jei прикалывается насчёт того зачем нужны деревья
     
  24. Mark32

    Mark32 Активный пользователь

    С нами с:
    15 июн 2008
    Сообщения:
    539
    Симпатии:
    2
    простите за глупый вопрос, а почему класс Redundant Adjacency List (Closure Table) назван class.FHTree.php?
     
  25. Padaboo

    Padaboo Старожил
    Команда форума Модератор

    С нами с:
    26 окт 2009
    Сообщения:
    5.242
    Симпатии:
    1
    Mark32