
数据结构复习
-好好学习-
好好学习天天向上
展开
-
Floyd算法理解
从点i到点j可经由点{1,2,3,…,k-1}到达的最短距离为d[i][j],现考虑顶点k作为中间节点,则d[i][j]有两种可能,一个是最短距离不变,另一个是i到j可经由点k达到。总结上述两种情况dp[i][j]=min(dp[i][j], dp[i][k]+dp[k][j])。因此,算法最外层的循环指的是考虑的顶点集合,而并不是只考虑点k。for (int k = 0; k < n; ++k) { for (int i = 0; i < n; ++i) { fo原创 2022-04-24 21:59:21 · 155 阅读 · 0 评论 -
KMP算法
匹配字符串,大多数人都会想到一种方法,那就是一个一个比如果相同,就比下一个,不同,就把模式串的索引变为0,把主串的索引加一,重新开始比较,但是这样的话,在极端情况下(如匹配aaaaaaaaaaab,aaaaaaab),要比较m*n次才能得到正确结果,那么接下来,就给大家介绍一种新的匹配方法,KMP算法,他能够大大的降低比较次数A:ababababacdB:ababac假设匹配这两个字符串,在...原创 2019-09-27 11:12:30 · 98 阅读 · 0 评论 -
从中序与后序构造二叉树
首先由后序遍历可以很容易地知道,二叉树的根节点是后序遍历的最后一个元素获得根节点后,根据根节点在中序遍历中的位置可以知道左子树右子树的下标范围后序遍历左子树 — 右子树 — 根节点中序遍历左子树 — 根节点 — 右子树于是我们就可以想到通过递归不断获得子树的根节点来求解具体方法第一次获得整个子树的根节点(后序遍历最后一个)通过中序遍历,可以知道左子树和右子树分别有多少个元素...原创 2019-08-11 10:30:51 · 954 阅读 · 0 评论 -
最大子序列
最大子序列问题描述思路分析暴力破解优化后的暴力破解分治动态规划(?)附(时间复杂度分析)问题描述给定整数 A 1,A2,…………,An(可能有负数),求∑k=ij∑^{j}_{k=i}∑k=ij的最大值(如果全为负数,最大子序列和为0)思路分析首先一看到这个题目,最容易想到的方法当然是暴力破解,但是如果不加任何改进,直接从用双重循环表示从i到j,里面再用一个循环来求和,效率是非常低下的,...原创 2019-07-22 15:46:17 · 160 阅读 · 0 评论 -
栈的应用——计算器实现原理(c语言)
我相信许多人都曾想过写一个计算器小程序,但却不知道该怎么下手,只有两个数加减乘除当然简单,但是,只要数的个数一增多,就不知道该怎么写了,主要的困难其实就是判断加减乘除的先后顺序,这主要是因为有一个概念你或许还不太了解,它就是后缀表达式,也叫逆波兰表达式!我们平时写的算式叫做中缀表达式,但是中缀表达式完全无法判断优先级,只能按顺序一个一个算下去,这样是无法满足我们的需求的!先来看一下后缀表达式怎么...原创 2019-07-25 17:21:17 · 2696 阅读 · 0 评论 -
链表的游标实现
概念引入在最开始的学习中,我们实现链表都需要依靠指针来连接链表的各个节点,但是,在一些语言中是不支持指针的,那么,在不使用指针的情况下,我们就无法实现链表了吗?当然不是,其实还有另一种链表的实现方式——游标实现!思路分析那么如果想不使用指针,我们必须了解指针在链表中的作用,我们来想一下,以前在写链表时,我们在那些地方用到了指针,首先当然是在链表的节点定义中,用指针来指向下一个节点,那么我...原创 2019-07-24 16:02:21 · 336 阅读 · 1 评论