
数据结构与算法学习笔记
文章平均质量分 97
学习笔记,内容摘自极客时间《数据结构与算法之美》和网络。
刘彦青-Yannis
这个作者很懒,什么都没留下…
展开
-
数据结构与算法学习笔记——堆 (Heap)
什么是堆:堆是一个完全二叉树; 堆中每一个节点的值都必须大于等于(或小于等于)其子树中每个节点的值。 堆排序是一种原地的、时间复杂度为O(nlogn)的排序算法。堆的一些概念:大顶堆: 每个节点的值都大于等于子树中每个节点值的堆小顶堆: 每个节点的值都小于等于子树中每个节点值的堆 堆化(heapify): 把不符合堆的特征的树调整为...原创 2019-01-04 17:36:05 · 2206 阅读 · 0 评论 -
排序——选择排序
选择排序将数组分成已排序区间和未排序区间。初始已排序区间为空。每次从未排序区间中选出最小的元素插入已排序区间的末尾,直到未排序区间为空。代码:public int[] selectionSort(int[] a) { int n = a.length; for (int i = 0; i < a.length - 1; i++) ...原创 2019-08-28 10:27:19 · 463 阅读 · 0 评论 -
排序——插入排序
插入排序将数组数据分成已排序区间和未排序区间。初始已排序区间只有一个元素,即数组第一个元素。在未排序区间取出一个元素插入到已排序区间的合适位置,直到未排序区间为空。代码: public int[] insertionSort(int[] a) { int n = a.length; if (n<=1) return a; ...原创 2019-08-28 10:22:12 · 356 阅读 · 0 评论 -
排序——冒泡排序
冒泡排序只会操作相邻的两个数据。每次冒泡操作都会对相邻的两个元素进行比较,看是否满足大小关系要求,如果不满足就让它俩互换。代码: public int[] bubbleSort(int[] a) { int n = a.length; if (n<=1) return a; //提前退出冒泡循环的标...原创 2019-08-28 10:16:42 · 472 阅读 · 0 评论 -
数据结构与算法学习笔记
本文是王争老师的《算法与数据结构之美》的学习笔记,详细内容请看王争的专栏。有不懂的地方指出来,我做修改。数据结构与算法思维导图数据结构指的是“一组数据的存储结构”,算法指的是“操作数据的一组方法”。数据结构是为算法服务的,算法是要作用再特定的数据结构上的。最常用的数据结构预算法:数据结构:数组、链表、栈、队列、散列表、二叉树‘、堆、跳表、图、Tire树 算法: 递归...原创 2018-09-25 13:55:49 · 347798 阅读 · 93 评论 -
数据结构与算法笔记——树(Tree)
什么是树树的一些概念根节点、叶子节点、父节点、子节点、兄弟节点,还有节点的高度、深度以及层数,树的高度。你有没有发现, "树"这种数据结构真的很像我们现实生活中的"树" ,这里面每个元素我们叫作"节点" ;用来连线相邻节点之间的关系,我们叫作"父子关系"。比如下面这幅图, A节点就是B节点的父节点, B节点是A节点的子节点。 B.C、D这三个节点的父节点是同一个节点,所以它们...原创 2019-01-03 14:45:57 · 3161 阅读 · 0 评论 -
数据结构与算法学习笔记——排序:冒泡排序,插入排序,选择排序,归并排序,快速排序,桶排序
排序方法与复杂度归类(1)几种最经典、最常用的排序方法:冒泡排序、插入排序、选择排序、快速排序、归并排序、计数排序、基数排序、桶排序。(2)复杂度归类冒泡排序、插入排序、选择排序 O(n^2)快速排序、归并排序 O(nlogn)计数排序、基数排序、桶排序 O(n)如何分析一个“排序算法”<1>算法的执行效率1. 最好、最坏、平均情况时间复杂度。2. 时间复杂度的...原创 2019-01-03 11:58:36 · 1291 阅读 · 0 评论 -
数据结构与算法学习笔记—— 散列表(哈希表)(数据结构)
什么是散列表:散列表用的是数组支持按照下标随机访问数据的特性,所以散列表其实就是数组的一种扩展,由数组演化而来。可以说,如果没有数组,就没有散列表。原理:散列表用的就是数组支持按照下标随机访问的时候时间复杂度是0(1)的特性。我们通过散列函数把元素的键值映射为下标,然后将数据存储在数组中对应下标的位置。当我们按照键值查询元素时,我们用同样的散列函数,将键值转化数组标标,从对应的数组...原创 2019-01-03 11:52:57 · 2326 阅读 · 0 评论 -
数据结构与算法笔记——分治算法(divide and conquer)
什么是分治算法:将原问题划分成n个规模较小,并且结构与原问题相似的子问题,递归地解决这些子问题,然后再合并其结果,就得到原问题的解。分而治之算法是一种处理问题的思想,递归是一种编程技巧. 分而治之能解决的问题:原问题与分解成的小问题具有相同的模式;原问题分解成的子问题可以独立求解,子问题之间没有相关性,这一点是分治算法跟动态规划的明显区别,等我们讲到动态规划的时候,会详细对...原创 2019-01-12 13:55:46 · 978 阅读 · 0 评论 -
数据结构与算法学习笔记——贪心算法(greedy algorithm)
理解贪心算法:假设我们有一个可以容纳100kg物品的背包,可以装各种物品。我们有以下5种豆子,每种豆子的总量和总价值都各不相同。为了让背包中所装物品的总价值最大,我们如何选择在背包中装哪些豆子?每种豆子又该装多少呢? 先算一算每个物品的单价,按照单价由高到低依次来装就好了。单价从高到低排列,...原创 2019-01-12 11:49:32 · 1309 阅读 · 0 评论 -
排序——归并排序
如果要排序一个数组,我们先把数组从中间分成前后两部分,然后对前后两部分分别排序,再将排好序的两部分合并在一起,这样整个数组就都有序了。实现思路:递推公式:merge_sort(p..r) = merge( merge_sort (p...q), merge-sort(q+1..r) )终止条件: p>=r不用再继续分解merge-sort(p...r)表示,给下标...原创 2019-08-28 10:34:08 · 513 阅读 · 1 评论