![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构和算法学习笔记
囚牢-峰子
这个作者很懒,什么都没留下…
展开
-
【算法分析初篇】复杂度分析
复杂度分析包括时间复杂度分析和空间复杂度分析,用来衡量你编写的算法代码的执行效率。一般情况下,为什么需要复杂度分析?我可以把代码跑一遍,通过统计、监控,就能得到算法执行的时间和占用的大小,这种的方法叫事后统计法。但是这种方法局限性非常大:测试结果非常依赖测试环境;测试结果受数据规模的影响很大。复杂度分析是一种可以不需要一个不用具体的测试数据来测试,就可以粗略地估计算法的执行效率的方法。大...原创 2019-05-16 15:17:46 · 250 阅读 · 0 评论 -
数据结构---堆的应用
如何理解堆 堆是完全二叉树;堆中每个节点的值大于等于(或者小于等于)子树中每个节点的值。如何实现堆 下面说的自下而上和自上而下都是禁止操作本身,而不是从全局角度考虑。并且假设数组从下标1开始存储数据。 存储:完全二叉树适合用数组来存储,省去了保存指针,所以比较节省空间。另外,使用数组下标访问父节点和子节点更 方便...原创 2019-05-21 18:38:59 · 271 阅读 · 0 评论 -
数据结构---图的表示:如何存储微博、微信等社交网络中的好友关系?
如何理解“图” (graph) 先来了解一下图的几个概念: 顶点(vertex)、边(edge)、度(degree)、有向图、无向图、入度(in-degree)、出度(out-degree)、带权图(weighted-graph) 再来利用微博、微信、QQ来形象的诠释一下这几个概念: 微信:把用户比作顶点...原创 2019-05-30 11:43:58 · 4030 阅读 · 1 评论 -
单模式字符串匹配算法(BM、KMP)
在字符串A中查找字符串B,那么管字符串A叫主串,字符串B叫模式串。主串长度m > 模式串长度n。BF算法和RK算法 BF算法:暴力匹配算法(或者叫朴素匹配算法),我们在主串,检查起始位置分别是0, 1, 2, 3 ... n-m 且长度是m 的n-m+1个子串,看有没有跟模式串匹配。在极端情况下,每次比对 m 个字符,共比对 n-m+1 次,所以最坏情况时间复杂度是O(n*...原创 2019-06-17 20:44:41 · 644 阅读 · 0 评论 -
动态规划——实践-理论-再实践
先实践0-1背包问题对于一组物品,重量不同,不可分割,需要选择一些放入背包,在不超过背包最大重量前提下,求这个最大值?先用回溯算法实现一遍:#include <iostream>using namespace std;int maxW = 0;int n = 5; //物品个数int weight[] = {2...原创 2019-07-19 17:26:09 · 456 阅读 · 0 评论 -
实例详解贪心、分治、回溯以及与动态规划的比较分析
贪心、回溯、分治、动态规划,确切地讲,应该是算法思想,并不是具体的算法,常用来知道我们设计具体的算法和编码等。上一章已经详细地分析过动态规划,接下来还是结合具体问题,感受一下这些算法是怎么工作的,是如何解决问题的,再问体体会这些算法的本质。我觉得比单纯记忆原理和定义更有价值。贪心算法1. 如何理解贪心算法?假设我们有一个可以容纳100kg物品的袋子,可以装各种物品。有以下5种豆子,每种豆...原创 2019-07-31 11:35:19 · 2386 阅读 · 1 评论 -
图的深度广度优先遍历 (c语言实现)
目录定义邻接表存储图深度优先遍历广度优先遍历:BFS部分完整代码定义要实现该算法首先要知道邻接表的概念。邻接表是一种常用的图的存储结构,它的结构特点是:顶点由一个一维数组存储;邻接点用链表存储相比于单纯用数组实现的邻接矩阵,邻接表可以避免空间浪费其图解如下:firstedge指向边表第一个结点。边表的adjvex的值代表与V0顶点有边...转载 2019-08-31 14:31:19 · 9356 阅读 · 3 评论