![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法导论
(刘*牛)
这个作者很懒,什么都没留下…
展开
-
算法导论-----二叉搜索树
一 二叉搜索树定义二叉搜索树是一个二叉树,满足如下性质:对于二叉搜索树中一个随机非叶子结点x,其中x的关键值大于(等于)x的左孩子的关键值,x的关键值小于(等于)右孩子的关键值。二 二叉搜索树的遍历二叉搜索树的中序遍历是先遍历左子树,然后是根节点,然后是右子树。遍历结果是一个从小到大的顺序序列。三 查找最小结点和最大结点根据二叉搜索树的性质,最小节点是在结构的最左侧结点,最大节点是在结构的最右侧结点查找最小结点算法如下: FIND_MIN(T) r = T.root While(r.l原创 2021-09-27 08:28:37 · 202 阅读 · 0 评论 -
算法导论-----散列表
一 散列表产生背景散列表是根据数组可以直接随机访问的特性产生的。这样就可以在一定情况下,通过散列函数和很小的数组结构,对数据进行组织,实现在最坏情况下查找为O(n),平均情况下O(1)的算法。二 散列表组成散列表是由散列函数和映射以后的数据存储结构组成的。散列函数先将原始数据通过计算得到一个散列值,然后再将散列值存储到存储结构中但是散列函数面对不同的原始值,可能计算出相同的散列值,这种情况成为冲突,解决冲突的办法有两种:1、链接法:将数据存储结构申请为指针数组,如果有相同的散列值,将相同的散列值原创 2021-09-19 10:28:08 · 145 阅读 · 0 评论 -
算法导论---基数排序和桶排序
一 基数排序1.1 算法思想对一个包含n个d位的输入数组A,我们需要输出它的某种排列顺序。此时我们对这个数组中所有的数按照从最低位开始,先将最低位的数排序一遍,然后是倒数第二低的数再排序一遍,依次循环,将所有的d位的数排序一遍以后,就可以得到排好序的输出序列。子过程对d位中某一位进行排序的时候,选择排序算法很重要,这个会影响整个基数排序算法的性能。二 桶排序2.1 桶排序思想首先,桶排序的先决条件是输入数组均匀分布或者大致均匀分布在某一个区间上。桶排序思想就是对输入数组中数分布的区间进行划分,原创 2021-09-16 07:52:26 · 113 阅读 · 0 评论 -
算法导论-----计数排序
一 计数排序预置条件首先知道待排序的所有元素中的最大值,同时待排序元素是正常的大于等于 0 的正整数二 计数排序算法思想排序算法就是要找到当前的待排序元素在输出数组中的位置在那,然后将待排序元素放到输出数组中即可所以计数排序的基本思想就是对一个元素,我通过计算的方式找到该元素在输出数组中的位置,然后放到输出数组中,这样排序就完成了。三 算法伪代码COUNTING-SORT(A, B, k) // 其中k 是A数组元素中的最大值 let C[0, k] be a new array for原创 2021-09-15 08:22:27 · 117 阅读 · 0 评论 -
算法导论----快速排序
一 快速排序思想基本思路还是根据分治法的思想得出的。首先给定一个数组,然后在数组中选择一个值作为划分标记,然后将数组中剩余的值与这个标记值进行比较,大于标记值的放到标记值右边,小于标记值的放到标记值左边,这个过程就是一次划分过程,然后对标记值左边小于标记值的子数组再进行上述划分,对右边大于标记值的子数组也进行上述划分,实际上就是递归过程,直到最后递归完成,那么快速排序也就完成了。二 快速排序算法实现2.1 总体算法实现 QUICKSORT(A, p, r) if (p < r原创 2021-09-14 08:27:16 · 281 阅读 · 0 评论 -
算法导论------堆排序
一 堆定义堆(Heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵完全二叉树的数组对象。如下所示:二 堆的性质假设堆是使用数组进行存储的,那么对于堆中的节点 i ,其对应的相关性质如下:PARENT(i) = i / 2 // 父节点计算LEFT(i) = i * 2 // 左孩子节点计算RIGHT(i) = i * 2 + 1 // 右孩子节点计算三 最大堆和最小堆3.1 最大堆性质最大堆的简单概括就是堆中任意一个节点的父节点,都比该任意节点的值要大。即:PA原创 2021-09-13 08:12:26 · 135 阅读 · 0 评论