摘要:
一、基本操作: 1、Find:当且仅当两个元素属于相同的集合时,返回相同的名字 2、Union:将两个不相交的集合合并为一个不想交的集合。 应用:在等价关系中,判断两个元素之间是否有关系或者添加等价关系。 二、基本数据结构 1、Quick-Find实现 采用一个数组保存每个等价类的名字,这种实现下F 阅读全文
摘要:
题目:找出数组中的所有三元组a,b,c使得a+b+c = 0,所有的三元组不能重复 提供一个复杂度O(n2)的代码,复杂度为O(n3)会超时。 阅读全文
摘要:
希尔排序代码如下: 堆排序: 归并排序实现代码如下: 阅读全文
摘要:
定义: 零路径长Npl(x):定义为从X到一个没有两个儿子的节点的最短路径长。 Npl(X) = min{ Npl(lchild), Npl(rchild) } + 1 (定义Npl(NULL) = -1,那么这个公式满足只有一个子节点的节点) 左式堆的性质:1、结构性质(对于堆中的任一节点,左儿子 阅读全文
摘要:
二叉堆的两个重要性质: 1、结构性,为完全二叉树,可以用数组方便地表示。2、堆序性:树中每个节点的关键字值大于或等于其父节点的关键字值。 二叉堆的数据结构声明如下: 初始化函数代码如下: Insert函数实现代码如下: DeleteMin函数实现代码如下: 阅读全文
摘要:
数据结构定义如下: 初始化函数代码如下: Find函数实现代码如下: Insert函数代码实现如下: Rehash函数代码实现如下: 阅读全文
摘要:
分离链表法解决冲突的散列表ADT实现 数据结构定义如下: 初始化散列表实现代码如下: Find的实现代码如下: Insert的实现代码如下: Delete的实现代码如下: 阅读全文
摘要:
定义:每个节点的左右子树的高度最多差1的二叉查找树。(空树的高度为-1)。 AVL树保证树的高度只比log(N)多一点,因此除了插入删除外,可以保证所有的树操作都以O(logN)执行。 当插入一个节点的时候,只有那些从插入点到根节点路径上的点的平衡性可能被破坏,在最深的不满足平衡性的节点进行平衡操作 阅读全文
摘要:
首先给出此ADT的声明: 1、MakeEmpty的实现 2、Find的实现 3、FindMax和FindMin的实现(一个递归 一个非递归) 4、Insert的实现 5、Delete的实现 阅读全文
摘要:
首先从一个问题引出下面的内容:如何确定增序的数组x[0...n-1]中整数t第一次出现的位置 1、之前博客中的设计简单并且易于维护的二分搜索效率已经很高,一般情况下不需要改变,但是对其进行调优可以获得不错的加速 2、之前的二分搜索寻找t的位置是随机的,并不一定是t出现的第一个位置 第一种算法(原理查 阅读全文