Необходимо найти следующий узел для вставки в двоичное дерево с меньшим использованием ресурсов и производительности.Php

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Необходимо найти следующий узел для вставки в двоичное дерево с меньшим использованием ресурсов и производительности.

Сообщение Anonymous »


Схема дерева базы данных
идентификатор узла размещение узлов nodeparentid 1 Слева NULL 2 Слева 1 3 Верно 1 4 Слева 2 5 Верно 2 6 Слева 3 7 Верно 3 8 Слева 4 9 Верно 4
Такое увеличение таблицы продолжается, когда пользователь отправляет древовидную форму.

Создали функцию для поиска следующего родительского узла по заданному значению узла с помощью метода BFS, теперь столкнулись с проблемой производительности, имея 200 тысяч строк при поиске 1, требуется больше ресурсов и производительности, потому что он проверяет каждый узел, поэтому оптимизирован код, извлекающий все строки из одного запроса и выполняющий логику на основе значения, это уменьшит взаимодействие с базой данных, но теперь все строки хранятся в памяти, когда больше пользователи находят следующий nodeparentid для каждого пользователя, все строки хранятся в памяти, поэтому возникает проблема, требующая оптимизации кода

текущее время выполнения — 80 секунд.

Я попробовал использовать приведенный ниже фрагмент кода для поиска следующего родительского узла для данного узла

публичная функция getNodeInsertPostionByParentId($parentIds) { $parent = array('status' => false); $результаты = массив(); // Извлекаем все данные из дерева $qry = "ВЫБРАТЬ nodeid, nodeposition, nodeparentid ИЗ дерева ORDER BY nodeposition"; $stmt = $this->mysqli->prepare($qry); $stmt->выполнить(); $stmt->bind_result($nodeid, $nodeposition, $nodeparentid); // Создаем карту для хранения дочерних элементов каждого родителя $ ChildrenMap = массив (); // Обработка результатов запроса while ($stmt->fetch()) { $childrenMap[$nodeparentid][] = array('id' => $nodeid, 'position' => $nodeposition); } // Используем BFS для обработки каждого родительского идентификатора $queue = $parentIds; while (!empty($queue)) { $currentParent = array_shift($queue); // Обрабатываем текущего родителя $children = isset($childrenMap[$currentParent]) ? $childrenMap[$currentParent]: массив(); $count = count($детей); если ($count == 2) { // Два дочерних элемента, рекурсивно проверяем каждого дочернего элемента foreach ($children как $child) { $queue[] = $child['id']; } } elseif ($count == 1) { // Один дочерний элемент, установите позицию «Справа» или «Слева» в зависимости от идентификатора дочернего элемента $parent['status'] = правда; $parent['parentId'] = $currentParent; $parent['node'] = 'Верно'; перерыв; } elseif ($count == 0) { // Нет дочерних элементов, установите позицию «Справа» или «Слева» на основе идентификатора текущего родителя $parent['status'] = правда; $parent['parentId'] = $currentParent; $parent['node'] = 'Слева'; перерыв; } } // Возвращаем обработанные результаты вернуть $родитель; } $ yourInstance = новое имя вашего класса (); эхо ''; print_r($yourInstance->getNodeInsertPostionByParentId(array('1'))); Как мы можем сократить время выполнения, используя меньше ресурсов.

Древовидное представление приведенных выше данных
1 / \ 2 3 / \ / \ 4 5 6 7 / \ / \ 8 9 10 [*]если найти 1, чтобы следующий узел вставил 5 прямо в качестве вывода. [*]если найти 6, чтобы следующий узел вставил 6 слева в качестве вывода. [*]если найти 3, чтобы следующий узел вставил 6, осталось в качестве вывода. [*]если найти 2, чтобы следующий узел вставил 5 прямо в качестве вывода.
любое предложение или код будут полезны
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Вставка в двоичное дерево не работает с использованием Java
    Anonymous » » в форуме JAVA
    0 Ответы
    19 Просмотры
    Последнее сообщение Anonymous
  • Вставка в двоичное дерево не работает с использованием Java
    Anonymous » » в форуме JAVA
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • Двоичное дерево поиска с использованием типа char
    Anonymous » » в форуме JAVA
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • Как распечатать базовое двоичное дерево в виде треугольника на C++?
    Anonymous » » в форуме C++
    0 Ответы
    70 Просмотры
    Последнее сообщение Anonymous
  • Как реализовать двоичное дерево?
    Anonymous » » в форуме Python
    0 Ответы
    36 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Php»