链接 list/binary 树作为存储和搜索数据结构的优点和缺点
Advantages and disadvantages of linked list/binary trees as structures for storing and searching for data
我需要写一篇评估链表和二叉树作为存储和搜索数据结构的优缺点。但是我有点迷失了优势和劣势是什么?
非常感谢任何帮助,谢谢!
让我们想一想链表的工作方式与二叉树的工作方式
对于双向链表,我们有
这样的元素
Head < - > 5 < - > 10 < - > 4 < - > tail
如果我们想添加一个元素,我们可以很容易地将它添加到列表的头部或尾部,方法是将我们的新元素指向终点和终点指向的值,然后更新这两个指向到新元素(确保正确分配上一个和下一个)我在这里略过它但是如果您搜索链接列表中的插入,则有很多可用的资源。此操作具有 O(1) 时间复杂度。做一些关于插入(平衡)二叉树的研究,这将花费更长的时间
现在搜索呢?在上面的链接列表中,如果我想找到一个元素,我必须从一侧遍历整个列表,直到找到我想要的值。这导致 O(n) 时间复杂度,但是如果我们有一个平衡的二叉树,我们可以检查我们正在寻找的值是高于还是低于中间的值 ~ 。如果它更高,我们可以消除数字的下半部分。然后我们可以用剩下的数字做同样的步骤。这在每一步都将剩余数字的数量减少了大约一半,从而显着减少了时间。
有很多方法可以对此进行评估,它们取决于不同的实现。我给你的建议是选择你想关注的每个实现,比较操作的时间复杂度,然后考虑替代实现以及它们对操作时间复杂度的影响。
对于二进制考虑平衡和不平衡。
对于链表,请查看双向链接、单向链接、有和没有指向尾部的指针(本质上是堆栈与队列)
如果您对具体实施及其比较方式有任何疑问,请告诉我们,我们将尽力解决。
我需要写一篇评估链表和二叉树作为存储和搜索数据结构的优缺点。但是我有点迷失了优势和劣势是什么?
非常感谢任何帮助,谢谢!
让我们想一想链表的工作方式与二叉树的工作方式
对于双向链表,我们有
Head < - > 5 < - > 10 < - > 4 < - > tail
如果我们想添加一个元素,我们可以很容易地将它添加到列表的头部或尾部,方法是将我们的新元素指向终点和终点指向的值,然后更新这两个指向到新元素(确保正确分配上一个和下一个)我在这里略过它但是如果您搜索链接列表中的插入,则有很多可用的资源。此操作具有 O(1) 时间复杂度。做一些关于插入(平衡)二叉树的研究,这将花费更长的时间
现在搜索呢?在上面的链接列表中,如果我想找到一个元素,我必须从一侧遍历整个列表,直到找到我想要的值。这导致 O(n) 时间复杂度,但是如果我们有一个平衡的二叉树,我们可以检查我们正在寻找的值是高于还是低于中间的值 ~ 。如果它更高,我们可以消除数字的下半部分。然后我们可以用剩下的数字做同样的步骤。这在每一步都将剩余数字的数量减少了大约一半,从而显着减少了时间。
有很多方法可以对此进行评估,它们取决于不同的实现。我给你的建议是选择你想关注的每个实现,比较操作的时间复杂度,然后考虑替代实现以及它们对操作时间复杂度的影响。
对于二进制考虑平衡和不平衡。
对于链表,请查看双向链接、单向链接、有和没有指向尾部的指针(本质上是堆栈与队列)
如果您对具体实施及其比较方式有任何疑问,请告诉我们,我们将尽力解决。