Разница между LinkedList и бинарное дерево поиска

голоса
28

Каковы основные различия между Linked List и BinarySearchTree? Является BST просто способ поддержания LinkedList? Мой инструктор говорил о LinkedList и затем BST, но did't сравнить их или не сказал, когда предпочитать один над другим. Вероятно, это глупый вопрос, но я действительно путают. Я был бы признателен, если кто-то может прояснить этот вопрос простым способом.

Задан 06/11/2008 в 21:13
источник пользователем
На других языках...                            


13 ответов

голоса
8

Я бы сказал, основное отличие состоит в том, что бинарное дерево поиска сортируется. При вставке в бинарное дерево поиска, где эти элементы в конечном итоге, хранящемся в памяти, является функцией от их стоимости. С связанным списком, элементы слепо добавлены в список, независимо от их стоимости.

Сразу же вы можете некоторые компромиссы: Связные списки сохранить порядок вставки и вставки менее дорогие Бинарные деревья поиска, как правило, быстрее искать

Ответил 06/11/2008 в 21:19
источник пользователем

голоса
12

В информатике бинарного дерево поиска (BST) является бинарной структурой данных дерева , которое обладает следующими свойствами:

  • каждый узел (элемент в дереве) имеет определенное значение;
  • как левые и правые поддеревья также должны быть бинарными деревья поиска;
  • левое поддерево узла содержит только значения меньше, чем значение узла;
  • правое поддерево узла содержит только значения больше или равно значению узла.

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

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

Ответил 06/11/2008 в 21:20
источник пользователем

голоса
5

Связные списки и BSTs на самом деле не имеют много общего, за исключением того, что они оба структуры данных , которые действуют как контейнеры. Связные списки в основном позволяют вставлять и эффективно удалять элементы в любом месте в списке, сохраняя при этом порядок списка. Этот список осуществляется с помощью указателей от одного элемента к другому (и часто предыдущий).

Бинарное дерево поиска с другой стороны , это структура данных более высокой абстракцией (т.е. не указано , как это реализовано внутри) , что позволяет эффективный поиск (т.е. для того , чтобы найти конкретный элемент , который вы не должны смотреть на все элементы.

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

Ответил 06/11/2008 в 21:20
источник пользователем

голоса
71

Связанный список:

Item(1) -> Item(2) -> Item(3) -> Item(4) -> Item(5) -> Item(6) -> Item(7)

Бинарное дерево:

                 Node(1)
                /
            Node(2)
           /    \
          /      Node(3)
  RootNode(4)
          \      Node(5)
           \    /
            Node(6)
                \
                 Node(7)

В связанном списке, элементы связаны друг с другом через один следующий указатель. В бинарном дереве, каждый узел может иметь 0, 1 или 2 подузлов, где (в случае бинарного дерева поиска) ключ левого узла меньше, чем ключ узла и ключ правого узла составляет более узел. Пока дерево сбалансировано, то SearchPath каждому пункту много короче, чем в связанном списке.

SearchPaths:

------ ------ ------
key    List   Tree
------ ------ ------
1      1      3
2      2      2
3      3      3
4      4      1
5      5      3
6      6      2
7      7      3
------ ------ ------
avg    4      2.43
------ ------ ------

При больших структур средний путь поиска становится существенным меньше:

------ ------ ------
items  List   Tree
------ ------ ------
     1      1   1
     3      2   1.67
     7      4   2.43
    15      8   3.29
    31     16   4.16
    63     32   5.09
------ ------ ------
Ответил 06/11/2008 в 21:21
источник пользователем

голоса
1

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

Связанный список просто структура, которая содержит узлы и указатели / ссылки на другие узлы внутри узла. Учитывая головной узел списка, вы можете перейти к любому другому узлу в связанном списке. Двусвязные списки имеют два указателя / ссылки: нормальная ссылка на следующий узел, а также ссылку на предыдущий узел. Если последний узел в дважды связанный список ссылается на первый узел в списке в качестве следующего узла, и первый узел ссылается на последний узел в качестве своего предыдущего узла, она называется круговой список.

Двоичное дерево поиска представляет собой дерево, которое разбивает входные данные на две примерно равные половины-на основе алгоритма двоичного поиска сравнения. Таким образом, нужно только очень немногие поиски, чтобы найти элемент. Например, если у вас есть дерево с 1-10 и вам необходимо найти три, первый элемент в верхней части будет проверяться, вероятно, 5 или 6. Три будет меньше, так что только первая половина дерево затем будет проверяться. Если следующее значение 3, то есть это, в противном случае сравнение будет сделано, и т.д., пока либо не будет не найден или его данные возвращаются. Таким образом, дерево быстро для поиска, но не nessecarily быстро для вставки или удаления. Это очень грубые описания.

Связанный список из Википедии и двоичного дерева поиска , а также из википедии.

Ответил 06/11/2008 в 21:21
источник пользователем

голоса
3

Связанный список только что ... список. Это линейный; каждый узел имеет ссылку на следующий узел (и предыдущий, если вы говорите о дважды связанный список). А ветвь дерева --- каждый узел имеет ссылку на различные дочерние узлы. Двоичное дерево представляет собой особый случай, в котором каждый узел имеет только два ребенка. Таким образом, в связанном списке, каждый узел имеет предыдущий узел и следующий узел, и в бинарном дереве, узел имеет левый ребенок, правильный ребенок, и родитель.

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

Ответил 06/11/2008 в 21:21
источник пользователем

голоса
4

Это на самом деле довольно просто. Связанный список просто куча вещей сцепленных вместе, в произвольном порядке. Вы можете думать о нем, как на самом деле тощем дереве, который никогда не ветки:

1 -> 2 -> 5 -> 3 -> 9 -> 12 -> |i. (Что последняя попытка ASCII-арт в нуль-терминатор)

Двоичное дерево поиска отличается 2 - мя способами: бинарная часть означает , что каждый узел имеет 2 детей, а не один, а поиск часть означает , что эти дети устроены , чтобы ускорить поиски - только небольшие предметы налево, и только более крупные направо:

    5
   / \
  3   9
 / \   \
1   2   12

9 не имеет левого ребенка, а также 1, 2 и 12 являются «листья» - у них нет филиалов.

Смысл?

Для большинства «подстановки» видов использования, BST лучше. Но только «держать список вещей, чтобы иметь дело с более поздним First-In-First-Out или лифо» виды вещей, связанный список может хорошо работать.

Ответил 06/11/2008 в 21:22
источник пользователем

голоса
2

Связанный список является прямолинейной данными с соседними узлами, соединенными друг с другом, например, А-> B-> C. Вы можете рассматривать его как прямой забор.

БСТ представляет собой иерархическую структуру, как и дерева с основного ствола, соединенного с ветвей и тех отраслей, в свою очередь, соединенных с другими ветвями и так далее. Слово «Binary» здесь означает, что каждая ветвь подключена к максимуму двух ветвей.

Вы используете связанный список для представления прямых данных только с каждым элементом, соединенным с не более одного элементом; в то время как вы можете использовать BST для подключения элемента к двум пунктам. Вы можете использовать BST для представления данных, таких как семейное дерево, но станет п-арна деревом поиска, как там может быть больше двух детей на каждый человек.

Ответил 06/11/2008 в 21:22
источник пользователем

голоса
1

Они совершенно разные структуры данных.

Связанный список представляет собой последовательность элементов, где каждый элемент связан к следующему, и в случае дважды связанный список, предыдущий.

Двоичное дерево поиска нечто совершенно другое. Он имеет корневой узел, корневой узел имеет до двух дочерних узлов, и каждый дочерний узел может иметь до двух детей заметки и т.д. и т.д. Это довольно умная структура данных, но это будет несколько утомительно , чтобы объяснить это здесь. Проверьте artcle Википедии на нем.

Ответил 06/11/2008 в 21:22
источник пользователем

голоса
3

Проблема с связным списком поиск в нем (как для извлечения или вставка).

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

Бинарное дерево позволяет более быстрого поиска и вставки, будучи по своей природе отсортированный и судоходным.

Альтернатива, которую я успешно использовал в прошлом это SkipList. Это обеспечивает что-то похожее на связанный список, но с дополнительными ссылками, чтобы производительность поиска сравнима с двоичным деревом.

Ответил 06/11/2008 в 21:23
источник пользователем

голоса
6

Связанный список представляет собой порядковый номер «узлов», связанных друг с другом, а именно:

public class LinkedListNode
{
     Object Data;
     LinkedListNode NextNode;
}

Двоичное дерево поиска использует аналогичную структуру узла, но вместо ссылки на следующий узел, он связывается с двумя дочерними узлами:

public class BSTNode
{
    Object Data
    BSTNode LeftNode;
    BSTNode RightNode;
} 

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

Важно отметить, что если вставить отсортированные данные в BST, вы в конечном итоге с связный список, и вы теряете преимущество использования дерева.

Из-за этого, LinkedList является O (N) структуры данных обхода, в то время как BST является O (N) структуры обхода данных в худшем случае и O (N войти) в лучшем случае.

Ответил 06/11/2008 в 21:23
источник пользователем

голоса
16

Двоичное дерево представляет собой бинарное дерево , в котором каждый внутренний узел х хранит элемент таким образом, что элемент находится в левом поддереве х меньше или равна х и элементов , хранящихся в правом поддереве х больше или равно х .

альтернативный текст

Теперь Связанный список состоит из последовательности узлов, каждый из которых содержит произвольные значения и один или два ссылок , указывающих на следующее и / или предыдущих узлов.

Связанный список

Ответил 06/11/2008 в 21:26
источник пользователем

голоса
3

Они имеют сходство, но основное отличие состоит в том, что Binary Search Tree предназначен для поддержки эффективного поиска для элемента, или «ключ».

Бинарное дерево поиска, как дважды связанный список, указывает на два других элементов в структуре. Однако при добавлении элементов в структуре, а не просто добавляя их в конец списка, бинарное дерево перестраивается таким образом, что элементы, связанные с «левой» узел меньше текущего узла и элементов, связанных с «правом» узел больше, чем текущий узел.

В простой реализации, новый элемент сравнивается с первым элементом структуры (корень дерева). Если он меньше, то «левая» ветвь принимается, в противном случае рассматривается ветвь «право». Это продолжается с каждым узлом, пока ветви не оказывается пустым; новый элемент заполняет эту позицию.

С помощью этого простого подхода, если элементы добавляются в порядке, вы в конечном итоге с связанным списком (с той же производительностью). Существуют различные алгоритмы для поддержания некоторой степени равновесия в дереве, переставив узлы. Например, AVL дерева делают большую работу, чтобы сохранить дерево сбалансированным, насколько это возможно, давая лучшие времена поиска. Красно-черные деревья не держать дерево сбалансированным, в результате чего несколько медленнее поисков, но меньше работы в среднем, как ключи вставлены или удалены.

Ответил 06/11/2008 в 22:46
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more