![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构和算法
文章平均质量分 86
小夕Coding
大厂程序员,阿里P9
展开
-
动态规划概念
一,动态规划概念 动态规划比较适合用来求解最优问题,比如求最大值、最小值等等。它可以非常显著地降低时间复杂度,提高代码的执行效率。 它和递归一样都非常难学,主要学习难点在于求解问题的过程不太符合人类常规的思维方式。 二,0-1 背包问题 对于一组不同重量、不可分割的物品,我们需要选择一些装入背包,在满足背包最大重量限制的前提下,背包中物品总重量的最大值是多少呢? 关于这个 0-1 背包问题,上一节学习了回溯的解决方法,也就是穷举搜索所有可能的装法(时间复杂度指数级),然后找出满足条件的最大值。有没有什么规律原创 2021-12-22 16:38:43 · 356 阅读 · 0 评论 -
学会分治算法
一,如何理解分治算法 分治算法(divide and conquer)的核心思想其实就是四个字,分而治之 ,也就是将原问题划分成 n 个规模较小,并且结构与原问题相似的子问题,递归地解决这些子问题,然后再合并其结果,就得到原问题的解。 分治和递归的区别:分治算法是一种处理问题的思想,递归是一种编程技巧。 分治算法一般都比较适合用递归来实现。分治算法的递归实现中,每一层递归都会涉及这样三个操作: 分解:将原问题分解成一系列子问题; 解决:递归地求解各个子问题,若子问题足够小,则直接求解; 合并:将子问题的结原创 2021-12-22 16:36:23 · 148 阅读 · 0 评论 -
二分查找算法
一,简单的二分查找算法 二分查找(Binary Search)算法是一种针对有序且不含重复数据集合的查找算法,时间复杂度为 O(logn)O(logn)O(logn) ,二分查找虽然性能比较优秀,但应用场景也比较有限。 因为底层依赖于数组这种结构,所以不适合数据量大的情况。再次,对于较小规模的数据查找,二分查找的优势并不明显,一般直接使用顺序遍历就可以了。二分查找更适合处理静态数据,也就是没有频繁的数据插入、删除操作。 如果数据使用链表存储,二分查找的时间复杂就会变得很高,变成了 O(n)O(n)O(n)。原创 2021-12-22 16:35:04 · 366 阅读 · 0 评论 -
回溯算法题解
一,如何理解回溯算法 深度优先搜索算法利用的就是回溯算法思想,但它除了用来指导像深度优先搜索这种经典的算法设计之外,还可以用在很多实际的软件开发场景中,比如正则表达式匹配、编译原理中的语法分析等。 除此之外,很多经典的数学问题都可以用回溯算法解决,比如数独、八皇后、0-1 背包、图的着色、旅行商问题、全排列等等。 回溯的处理思想,有点类似枚举搜索。暴力枚举所有的解,找到满足期望的解。为了有规律地枚举所有可能的解,避免遗漏和重复,我们把问题求解的过程分为多个阶段。每个阶段,我们都会面对一个岔路口,我们先原创 2021-12-22 16:20:45 · 122 阅读 · 0 评论 -
【数据结构和算法】平衡查找树
总结自《算法》(第4版) 查找树 一般的二插查找树如果节点有序插入,树的高度会是n,因此无法实现logn的查找,平衡查找树保证树的高度平衡,因此不管节点插入顺序如何,都可以满足logn的查找 2-3查找树 一棵2-3查找树或为一棵空树,或由以下节点组成: 2-节点:含有1个键(及其对应的值)和2条链接,左链接指向的2-3树中的键都小于该节点,右链接指向的2-3树中的键都大于该节点 3-节点:含有2个键(及其对应的值)和3条链接,左链接指向的2-3树中的键都小于该节点,中链接指向的2-3树中的键都位于.原创 2021-09-13 18:49:14 · 874 阅读 · 0 评论 -
【数据结构和算法】排序
1.插入排序 逐个处理待排序的记录,每个记录与前面已排序已排序的子序列进行比较,将它插入子序列中正确位置 代码 template<class Elem> void inssort(Elem A[],int n) { for(int i = 1;i < n;i++) for(int j = i;j >= 1 && A[j] < A[j-1];j--) swap(A,j,j-1); } 性能 最佳:升序。时间复杂度原创 2021-09-13 18:39:54 · 168 阅读 · 0 评论 -
【数据结构和算法】二叉树
两种特殊二叉树 满二叉树(下图左):除叶子节点外的所有分支节点都含有2个非空子节点的二叉树 完全二叉树(下图右):除了最后一层,其余层都是“满”的,这样的二叉树是完全二叉树 二叉树定理 1)任意二叉树度数为2节点的个数等于叶节点个数减1 当只有1个节点时,度为0。每派生出1度,就会多出1个节点。派生出的度和派生出的节点数一定相等。那么就得出了总度数和节点总数的关系: 节点总数 = 总度数 + 1 设度数为2的节点数为X2,度数为1的节点数为X1,度数为0的节点数为X0。可以得出如下关系式: X2原创 2021-09-13 18:32:44 · 701 阅读 · 1 评论