Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 不相交集数据结构和二叉树?_Algorithm_Data Structures_Binary Tree_Disjoint Sets_Binomial Heap - Fatal编程技术网

Algorithm 不相交集数据结构和二叉树?

Algorithm 不相交集数据结构和二叉树?,algorithm,data-structures,binary-tree,disjoint-sets,binomial-heap,Algorithm,Data Structures,Binary Tree,Disjoint Sets,Binomial Heap,有人能解释什么是不相交集数据结构吗?或者把我链接到一个YouTube视频或一篇解释得很好的文章 几分钟前我搜索了一下,我得到的只是一些数学课,里面有一张看起来像维恩图的图片。也许就是这样,但我不确定,所以我们非常感谢您的帮助 顺便说一句,当我被问到“如何使用二叉树来表示二项式队列中的每一棵二项式树”时,这是指必须相互堆叠的二项式树。就像B1附加一个B1变成B2,然后两个B2变成B3,依此类推。基本上是一个联合查找数据结构 您最初有一组n节点,并且对其执行查找(节点)和联合(node1,node2

有人能解释什么是不相交集数据结构吗?或者把我链接到一个YouTube视频或一篇解释得很好的文章

几分钟前我搜索了一下,我得到的只是一些数学课,里面有一张看起来像维恩图的图片。也许就是这样,但我不确定,所以我们非常感谢您的帮助

顺便说一句,当我被问到“如何使用二叉树来表示二项式队列中的每一棵二项式树”时,这是指必须相互堆叠的二项式树。就像B1附加一个B1变成B2,然后两个B2变成B3,依此类推。

基本上是一个联合查找数据结构

您最初有一组
n
节点,并且对其执行
查找(节点)
联合(node1,node2)
操作

  • union(node1,node2)
    正在将节点“组合”到一个集合中
  • find(node)
    是通过 例如,给出根,如下文所述)
例如,您最初有
{1}、{2}、{3}、{4}、{5}
,您可以:

union(1,2)
union(3,4)
然后你得到
{1,2},{3,4},{5}

这也意味着此时
find(1)==find(2)
(它是相同的集合!)

如果以后
union(2,3)
-它将导致包含2的集合与包含3的集合合并,最终将得到
{1,2,3,4},{5}

关于视频请求:似乎很好地涵盖了材料


关于二叉树——这是一种实现方式,每个“根”都有它的子树,但树实际上是“颠倒的”,不是从父亲到儿子的指针,而是从儿子到父亲的指针。
这样,每个节点的canon表示就是节点指向的根,这确保了如果我们在
a
b
上进行联合,那么
find(a)=find(b)
,因为它们具有相同的根

我希望它能给你一些关于DS是什么的线索。
祝你好运

基本上是一种联合查找数据结构

您最初有一组
n
节点,并且对其执行
查找(节点)
联合(node1,node2)
操作

  • union(node1,node2)
    正在将节点“组合”到一个集合中
  • find(node)
    是通过 例如,给出根,如下文所述)
例如,您最初有
{1}、{2}、{3}、{4}、{5}
,您可以:

union(1,2)
union(3,4)
然后你得到
{1,2},{3,4},{5}

这也意味着此时
find(1)==find(2)
(它是相同的集合!)

如果以后
union(2,3)
-它将导致包含2的集合与包含3的集合合并,最终将得到
{1,2,3,4},{5}

关于视频请求:似乎很好地涵盖了材料


关于二叉树——这是一种实现方式,每个“根”都有它的子树,但树实际上是“颠倒的”,不是从父亲到儿子的指针,而是从儿子到父亲的指针。
这样,每个节点的canon表示就是节点指向的根,这确保了如果我们在
a
b
上进行联合,那么
find(a)=find(b)
,因为它们具有相同的根

我希望它能给你一些关于DS是什么的线索。

祝你好运

不相交集数据结构是用于表示S的数据结构。您可以从一组元素开始,每个元素都属于自己的组。例如:

{1} {2} {3} {4} {5} {6}
不相交集数据结构上的一个操作是并集操作,它将包含给定元素的两个集组合在一起。例如,将1和2联合在一起将返回分区

{1, 2} {3} {4} {5} {6}
{1, 2, 3, 5}, {4}, {6}
联合3和5生产

{1, 2}, {3, 5}, {4}, {6}
现在,将1和3联合起来生成分区

{1, 2} {3} {4} {5} {6}
{1, 2, 3, 5}, {4}, {6}
查找操作告诉您给定元素属于哪个集合。通常,这是通过让find返回它所属元素的代表性元素来完成的。这通常是这样做的

find(x) == find(y)  if and only if  x and y are in the same set.
例如,find(1)可能返回2,因此find(2)=2,find(3)=2,find(5)=2


不相交集数据结构通常用作Kruskal最小生成树算法中的子例程,因为它们提供了一种非常快速的方法来检查图中的两个节点是否连接,以及一种简单的方法来标记两个连接组件中的所有节点在添加边时是否相互连接。使用通过秩和路径压缩并集的实现,可以在O(nα(n))时间内完成不相交集林上的n个操作,其中α(n)是一个函数,该函数增长非常缓慢,实际上是一个常数(对于小于宇宙大小的任何输入,它最多为4个)


至于二叉树和二叉树:我想你们要问的是如何用二叉树来表示二叉树,这是一种多向树,二叉树最多有两个子树。并非所有的二叉树都是二叉树,因此必须使用合适的编码

一种方法是使用称为表示的东西。根据以下设置,它将多路树表示为二叉树:

  • 每个节点的左子节点指向节点的第一个子节点
  • 每个节点的右侧子节点指向其下一个同级节点(同一层中具有相同父节点的节点)
例如,给定此二叉树:

     a
   / | \
  b  c  d
 /|  |
e f  g
  |
  h
左子代和右兄弟代表示将是

                 a
                /
               b
            /    \
           e      c
            \    / \
             f  g   d
            /
           h   
顺便说一下,如果你在二叉树上这样做,你