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

1
摘要:贪心算法有很多经典的应用,比如霍夫曼编码(Huffman Coding)、Prim 和 Kruskal 最小生成树算法、还有 Dijkstra 单源最短路径算法。最小生成树算法和最短路径算法我们后面会讲到,所以我们今天讲下霍夫曼编码,看看它是如何利用贪心算法... 阅读全文
posted @ 2019-01-28 20:12 Tattoo_Welkin 阅读(346) 评论(0) 推荐(0)
摘要:搜索引擎的搜索关键词提示功能不用讲了吧,相信大家都用过.那么他是如何实现的呐?今天就来说一说它底层最基本的原理:Trie 树什么是“Trie 树”?Trie 树,也叫“字典树”。顾名思义,它是一个树形结构。它是一种专门处理字符串匹配的数据结构,用来解决在一组... 阅读全文
posted @ 2019-01-26 14:16 Tattoo_Welkin 阅读(246) 评论(0) 推荐(0)
摘要:对于哈希算法,在我们平时的开发中,都是基本上拿来就用就行了,所以这节我们将重点放在如何使用,并不进行哈希算法的原理剖析和如何设计一个哈希算法的讲解.什么是哈希算法?将任意长度的二进制值串映射为固定长度的二进制值串,这个映射的规则就是哈希算法,而通过原始数据映... 阅读全文
posted @ 2019-01-21 14:51 Tattoo_Welkin 阅读(686) 评论(0) 推荐(0)
摘要:LRU和LFULRU是最近最少使用页面置换算法(Least Recently Used),也就是首先淘汰最长时间未被使用的页面!LFU是最近最不常用页面置换算法(Least Frequently Used),也就是淘汰一定时期内被访问次数最少的页!frist... 阅读全文
posted @ 2019-01-18 15:41 Tattoo_Welkin 阅读(352) 评论(0) 推荐(0)
摘要:散列思想散列表就是我们平常说的哈希表,英文名叫"Hash Table",其基础依据就是:散列表用的是数组支持按照下标随机访问数据的特性,所以散列表其实就是数组的一种扩展,由数组演化而来。可以说,如果没有数组,就没有散列表。这里还是直接使用老师的例子来说事吧.... 阅读全文
posted @ 2019-01-14 18:00 Tattoo_Welkin 阅读(193) 评论(0) 推荐(0)
摘要:二叉查找树由于在频繁的动态更新过程中,可能会出现树的高度远大于 log2n的情况,所以就会导致各个操作效率下降,最坏的情况下就会退化为链表,变为O(n).很明显,想要解决这个问题,有效的一种办法就是使得树的高度不要差很多,也就是平衡它. 最先发明... 阅读全文
posted @ 2019-01-08 19:12 Tattoo_Welkin 阅读(386) 评论(0) 推荐(0)
摘要:单链表以及逆置是什么就不说了,就简单说一下思想:链表的初始状态:具体的方法就是将头节点后面的节点,依次通过指针指向,插入head头节点之后,即可完成逆置过程. 示意图(这里我写一下中间处理流程,因为这样比较直观.第一次的处理与正常处理雷同):需要注意的主... 阅读全文
posted @ 2018-12-10 16:39 Tattoo_Welkin 阅读(894) 评论(0) 推荐(0)
摘要:1.冒泡与选择冒泡:冒泡排序只会操作相邻的两个数据。每次冒泡操作都会对相邻的两个数据进行比较,如果前者比后者大,就互相交换,最后就会找到一个最大的落在数组最后.重复以上工作n次即可完成排序.void BubbleSort(vector a){ int ... 阅读全文
posted @ 2018-12-07 22:32 Tattoo_Welkin 阅读(183) 评论(0) 推荐(0)
摘要:最简单的二分1.循环实现template int binary_search(const vector &set, const T &value){ auto low = set.begin(); auto high = set.end(); auto hi... 阅读全文
posted @ 2018-11-04 22:52 Tattoo_Welkin 阅读(228) 评论(0) 推荐(0)
摘要:前面我们提到输入的数据正好是升序或降序序列时,二叉排序树就会退化成一个单链表,时间复杂度变为 O(N)(如果没看前面,点这里),这是我们所不希望的。我们也提出了解决办法,那就是“平衡”BST树。 AVL树:最先发明的自平衡二叉查找树。在AVL树中任何... 阅读全文
posted @ 2018-08-14 10:29 Tattoo_Welkin 阅读(187) 评论(0) 推荐(0)
摘要:题目1 : 单词搜索给定一个二维网格和一个单词,找出该单词是否存在于网格中。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。示例:board = [ [‘A’,... 阅读全文
posted @ 2018-08-11 09:55 Tattoo_Welkin 阅读(118) 评论(0) 推荐(0)
摘要:关于他们的思想,这里就不再罗嗦了,直接 show you my code ,看题讨论 。题目1:自然是最最经典的塔类问题啦(数字之塔 )有如下所示的数塔,要求从顶层走到底层,若每一步只能走到相邻的结点,则经过的结点的数字之和最大是多少? Input ... 阅读全文
posted @ 2018-08-07 09:31 Tattoo_Welkin 阅读(164) 评论(0) 推荐(0)
摘要:关于他们的思想,这里就不再罗嗦了,直接 show you my code ,看题讨论 。题目1: 5×5迷宫 + 保存路径定义一个二维数组: int maze[5][5] = {0, 1, 0, 0, 0,0, 1, 0, 1, 0,0, 0, 0, ... 阅读全文
posted @ 2018-08-06 12:21 Tattoo_Welkin 阅读(257) 评论(0) 推荐(0)
摘要:最近写项目写得让人有点烦躁,于是找了点新鲜的东西搞——二叉查找树(BST),来提提兴趣,废话不多说,现在就让我们进入BST的世界吧!1. 定义二叉查找树(Binary Search Tree),又称二叉排序树(Binary Sort Tree),亦称二... 阅读全文
posted @ 2018-07-27 14:49 Tattoo_Welkin 阅读(257) 评论(0) 推荐(0)
摘要:最长上升子序列(LIS)的定义: 一个数的序列bi,当b1 #includeusing namespace std ;class Solution {public: int lengthOfLIS(vector& nums) { in... 阅读全文
posted @ 2018-07-20 12:10 Tattoo_Welkin 阅读(120) 评论(0) 推荐(0)
摘要:题目:不同路径一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。问总共有多少条不同的路径? 例如,上图是一个7 x 3 的... 阅读全文
posted @ 2018-07-19 11:16 Tattoo_Welkin 阅读(97) 评论(0) 推荐(0)
摘要:1. 感性认识“动态规划”1. 基本概念 是求解决策过程(decision process)最优化的数学方法。把多阶段过程转化为一系列单阶段问题,利用各阶段之间的关系,逐个求解,是一种解决这类过程优化问题的新方法。2. 使用技巧: 动态规划算法通常用... 阅读全文
posted @ 2018-07-18 19:03 Tattoo_Welkin 阅读(192) 评论(0) 推荐(0)
摘要:什么是模式匹配?给定一个子串,要求在某个字符串中找出与该子串相同的所有子串,这就是模式匹配。也就是我们平常在记事本中的“查找选项”所运用的算法,其实说白了就是让我们编程实现:在一个大的字符串中找到一个小的字符串并返回其第一个匹配字符的下标BF算法时间复杂度为... 阅读全文
posted @ 2017-11-26 15:07 Tattoo_Welkin 阅读(192) 评论(0) 推荐(0)
摘要:1 .三种非递归遍历(栈)所要遍历的树是:先序 + 中序思路:就拿先序遍历为例来说吧。 1.访问根节点,根节点入栈,进入左子树。 2.访问左子树的根节点,根节点入栈,进入下一层左子树。 3.重复直到当前节点为空。即到达了最**左下方**的节... 阅读全文
posted @ 2017-11-23 23:06 Tattoo_Welkin 阅读(222) 评论(0) 推荐(0)
摘要:一.基本知识1. 数学知识(1)在二叉树的第i层上最多有2^(i-1)个节点(2)深度为k的二叉树最多有2^(k)-1 个节点(3)对任意二叉树,若叶子节点数为n0,度(节点拥有子树的个数)为2的节点数为n2,则 n0==n2+1 (4)对于具有n个节点的完... 阅读全文
posted @ 2017-11-14 22:52 Tattoo_Welkin 阅读(189) 评论(0) 推荐(0)

1