От новичка до гуру: Курсы программирования на CyberDuff

Алгоритм поиска объектов с разной степенью специфичности

У меня есть большое количество объектов, расположенных в виде древовидной структуры (у каждого узла в дереве есть родители и дети, начиная с одного главного узла и заканчивая множеством дочерних узлов). Каждый объект имеет свой собственный идентификатор в виде строки, и существует много повторяющихся идентификаторов, но нет дубликатов, разделенных одним и тем же родителем. Пример:

Родитель А:

  • ребенокА
  • ребенокБ
  • ребенокD

Родитель Б:

  • ребенокА
  • ребенокC
  • ребенокD

Дерево также многослойное.

Мне нужен метод поиска объектов, который будет работать так (пример основан на предыдущем списке):

Пример 1:

  1. ArrayList со строкой {"childB"} передается алгоритму
  2. нет повторяющихся узлов с идентификатором «childB», поэтому возвращается ссылка на childB

Пример 2:

  1. ArrayList со строками {"parentA", "childD"} передается алгоритму
  2. нет повторяющихся узлов с идентификатором «childD» И родителем с идентификатором «parentA», поэтому возвращается ссылка на данный узел

Пример 3:

  1. ArrayList со строкой {"childD"} передается алгоритму
  2. есть повторяющиеся узлы с идентификатором «childD», поэтому алгоритм запрашивает дополнительную информацию (имя родителя (ей))

Имейте в виду, что может быть много уровней специфичности, например {"nodeA", "nodeD", "nodeX", "nodeD"}, поэтому потребуется какой-то цикл или, возможно, рекурсивный метод.

Итак, есть идеи?

Обновление: я создал алгоритм поиска в глубину для просмотра каждого узла дерева, и он работает очень хорошо. Алгоритм возвращает все узлы в виде одного списка ArrayList. Все, что мне сейчас нужно, — это способ выбрать один из них на основе различных степеней специфичности. Кто-нибудь может помочь с этим? Приведенные выше три примера показывают, что мне нужно.

14.07.2012

  • необходима какая-то петля [...]. Абсолютно. Вы пробовали писать код для этого цикла? Сталкиваетесь ли вы с какими-либо конкретными проблемами? Если вы не покажете код, который вы пробовали до сих пор, ваш вопрос, скорее всего, будет закрыт как слишком расплывчатый или слишком широкий. 14.07.2012
  • У меня есть цикл, который может просматривать каждый узел в дереве и возвращать соответствующий узел или выдавать ошибку, если запрос был недостаточно конкретным, но у меня возникают проблемы с созданием цикла, который работает с несколькими строками запроса {nodeA, nodeB }. В общем, я не знаю, с чего начать. 14.07.2012
  • Мне немного непонятно, чего вы пытаетесь достичь. Из вашего вопроса похоже, что вы пытаетесь выполнить поиск идентификатора в своем дереве. Кроме того, в примере 2 вы упоминаете ссылку на данный узел, что также расплывчато. Вы пытаетесь построить алгоритм для поиска родословных? 14.07.2012
  • По сути, мне нужен алгоритм, который может искать дерево строк идентификаторов, но если я передаю алгоритму несколько строк, он сужает поиск. 14.07.2012
  • И идентификаторы в списке упорядочены, и такой порядок должен быть при обходе дерева в глубину? 14.07.2012
  • да. У каждого может быть родитель и ребенок. 14.07.2012

Ответы:


1

Вам может быть полезен алгоритм поиска в глубину!!!

14.07.2012
  • Это должен быть комментарий. Ответы должны быть более информативными, а не просто ссылками на вики. 17.07.2012
  • видите, я не вижу ссылки, чтобы добавить комментарий к какому-либо сообщению/вопросу, поэтому я добавил это как ответ (или, может быть, вы правы, что для этого мне нужна репутация). И что касается этого вопроса, который задал пользователь, я тоже столкнулся ... и я получил решение от сообщества переполнения стека. Это было на питоне, но я ничего не знаю о java; но там применялся тот же алгоритм. Вы можете увидеть этот вопрос по адресу [ссылка]stackoverflow.com/questions/11451167/ 16.11.2012
  • вы можете увидеть все ответы; особенно тот, который не использует внешний импорт, является отличным примером алгоритма поиска в глубину ... и очень хорошо работал для перемещения в древовидных структурах или сетевых отношениях. 16.11.2012
  • Новые материалы

    Представляем Narwhal Technologies (Nrwl)
    6 декабря 2016 г. Маунтин-Вью, Калифорния С тех пор, как Виктор Савкин и я (Джефф Кросс) присоединились к команде Angular в Google на заре Angular 1, Angular продемонстрировал феноменальный..

    Путь AWS  — «Изучение машинного обучения — 10 начинающих ИИ и машинного обучения на AWS».
    Универсальный ресурсный центр для изучения искусственного интеллекта и машинного обучения. НОЛЬ или ГЕРОЙ, начните свое путешествие здесь. Получите решения и пройдите обучение у экспертов AWS...

    5 простых концепций Python, ставших сложными
    #заранее извините 1) Переменные x = 4 y = 5 Переменная в Python — это символическое представление объекта. После присвоения некоторого объекта переменной Python мы приобретаем..

    «Освоение вероятности: изучение совместной, предельной, условной вероятности и теоремы Байеса —…
    Виды вероятности: Совместная вероятность Предельная вероятность Условная вероятность Диаграмма Венна в вероятностях: В “Set Theory” мы создаем диаграмму Венна...

    Основы Spring: Bean-компоненты, контейнер и внедрение зависимостей
    Как лего может помочь нашему пониманию Когда мы начинаем использовать Spring, нам бросают много терминов, и может быть трудно понять, что они все означают. Итак, мы разберем основы и будем..

    Отслеживание состояния с течением времени с дифференцированием снимков
    Время от времени что-то происходит и революционизирует часть моего рабочего процесса разработки. Что-то более забавное вместо типичного утомительного и утомительного процесса разработки. В..

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