随笔分类 -  算法和数据结构

摘要:MD5用途: MD5不可逆的原因是其是一种散列函数,使用的是hash算法,在计算过程中原文的部分信息是丢失了的 1.防止被篡改: 1)比如发送一个电子文档,发送前,我先得到MD5的输出结果a。然后在对方收到电子文档后,对方也得到一个MD5的输出结果b。如果a与b一样就代表中途未被篡改。 2)比如我提 阅读全文
posted @ 2020-04-06 17:07 whhhd 阅读(351) 评论(0) 推荐(0) 编辑
摘要:哈希函数要做的事情是给一个任意大小的数据生成出一个固定长度的数据,作为它的映射。所谓映射就是一一对应。一个可靠的哈希算法要满足三点。 第一是安全,给定数据 M 容易算出哈希值 X ,而给定 X 不能算出 M ,或者说哈希算法应该是一个单向算法。 第二是独一无二,两个不同的数据,要拥有不相同的哈希。 阅读全文
posted @ 2020-04-06 16:58 whhhd 阅读(383) 评论(0) 推荐(0) 编辑
摘要:堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。我的理解:前提:堆:(具有特定性质的完全二叉树) 1)每个结点的值都大于或等于左右孩子结点的值,称为大顶堆; 2)每个结点的 阅读全文
posted @ 2020-03-31 16:04 whhhd 阅读(123) 评论(0) 推荐(0) 编辑
摘要:快速排序的基本思想:通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。我的解析: 1)先将第一个数为基准,然后以这个数为基准进行选择排序,将小于此数的组成一个序列, 2)一轮比较完成后,将此基准数与小于此数 阅读全文
posted @ 2020-03-31 15:59 whhhd 阅读(146) 评论(0) 推荐(0) 编辑
摘要:归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。归并排序是一种稳定的排序方法。 将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为2-路归并。 最佳情 阅读全文
posted @ 2020-03-31 15:58 whhhd 阅读(166) 评论(0) 推荐(0) 编辑
摘要:希尔排序(它是第一个时间复杂度冲破o(n^2)的) 它是以插入排序为基础建立的, 它的工作原理为:使用增量对序列进行分组进行插入排序,希尔建议的增量(希尔增量):{n/2,(n/2)/2......1},但不是最优的 比如一个序列的长度为10,也就是一开始分为5组,然后2组,直到分为1组时. 它的时 阅读全文
posted @ 2020-03-31 15:55 whhhd 阅读(165) 评论(0) 推荐(0) 编辑
摘要:插入排序(Insertion-Sort)的算法描述是一种简单直观的排序算法。 它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上, 通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中, 需要反复把 阅读全文
posted @ 2020-03-31 15:50 whhhd 阅读(493) 评论(0) 推荐(0) 编辑
摘要:冒泡排序: 冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素, 如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换, 也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。 时间复杂度最优为o(n),已 阅读全文
posted @ 2020-03-31 15:40 whhhd 阅读(244) 评论(0) 推荐(0) 编辑
摘要:选择排序 n + n-1 + n-2 + … + 2 + 1 = n * (n+1) / 2 = 0.5 * n ^ 2 + 0.5 * n,那么时间复杂度是O(N^2),这是雷打不动的时间复杂度 每一趟进行选择出最大值或最小值,然后进行交换首末位置,每趟减少一个 时间复杂度无论什么时候都是o(n^ 阅读全文
posted @ 2020-03-31 15:37 whhhd 阅读(223) 评论(0) 推荐(0) 编辑
摘要:字典树又名前缀树,Trie树,是一种存储大量字符串的树形数据结构,相比于HashMap存储,在存储单词(和语种无关,任意语言都可以)的场景上,节省了大量的内存空间。 怎么理解这颗树呢?你从根节点走到叶子节点,尝试走一下所有的路径。你会发现,每条从根节点到叶子节点的路径都构成了单词(有的不需要走到叶子 阅读全文
posted @ 2020-03-28 11:58 whhhd 阅读(423) 评论(0) 推荐(0) 编辑
摘要:完全二叉树:(子节点必须是从左至右都存在,不能是中间缺少) 关于根据总节点数求子节点数:(节点的度表示节点拥有的子节点数) n(总节点数) = N0(表示度为0的节点) + N1(表示度为1的节点) + N2(表示度为2的节点) 根据度来得到所有的节点数 n(总节点数) = 1 + N1(表示度为1 阅读全文
posted @ 2020-03-22 15:42 whhhd 阅读(300) 评论(0) 推荐(0) 编辑
摘要:1.B-Tree树的介绍: 1)是一种适用于外查找的树,它是一种平衡的多叉树,称为B树 2)一颗M阶B-Tree具有的特性: 1)如果根结点不是叶子结点的话,那么它的子结点数至少为2 2)除结点与叶子结点外,其他结点的孩子数为[ceil(m/2),m]个,ceil函数表示向上取整数 3)所有叶子结点 阅读全文
posted @ 2020-03-22 15:40 whhhd 阅读(789) 评论(0) 推荐(0) 编辑
摘要:分治算法的基本思想是将一个规模为N的问题分解为K个规模较小的子问题,这些子问题相互独立且与原问题性质相同。求出子问题的解,就可得到原问题的解。即一种分目标完成程序算法,简单问题可用二分法完成。记住时间算法度 是指代码要执行的次数,取最高次方,去除系数1)比较排序: 1.选择排序 n + n-1 + 阅读全文
posted @ 2020-03-22 15:38 whhhd 阅读(108) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示