数据结构和算法
文章平均质量分 90
LoveStackover
大龄码农,依然坚持,脚踏实地,不放弃梦想。
展开
-
DSAA之图论Euler Circuits问题(九)
1. 从实际演变的问题 A popular puzzle is to reconstruct these figures using a pen, drawing each line exactly once. The pen may not be lifted from the paper while the drawing is being performed. As an extra...原创 2018-06-15 12:24:55 · 115 阅读 · 1 评论 -
DSAA补充之B树、B+树
1. 回顾 以前记录的B树DSAA之B-tree(六),这个定义真是有点四不像啊。是B+树的感觉,又没有底层的link。所以今天有必要重新审视下B树和B+树的概念。本文内容摘自维基百科。2. B树定义 According to Knuth’s definition, a B-tree of order m is a tree which satisfies the fol...原创 2018-06-14 13:16:47 · 126 阅读 · 1 评论 -
《DP学习系列》从零开始学习动态规划,泛化物品(八)
1. 定义 更严格的定义之。在背包容量为V 的背包问题中,泛化物品是一个定义域为0 … V 中的整数的函数h,当分配给它的费用为v时,能得到的价值就是h(v)。这个定义有一点点抽象,另一种理解是一个泛化物品就是一个数组h[0 …V ],给它费用v,可得到价值h[v]。 一个物品组可以看作一个泛化物品h。对于一个0 … V 中的v,若物品组中不存在费用为v的物品,则h(v) = 0...原创 2018-06-13 21:29:36 · 107 阅读 · 1 评论 -
DSAA之图论DFS算法,初识回溯(八)
1. 回顾 Depth-first search is a generalization of preorder traversal. We implicitly assume that for undirected graphs every edge (v, w) appears twice in the adjacency lists: once as (v, w) and ...原创 2018-06-13 20:46:45 · 151 阅读 · 1 评论 -
从零开始算法篇之分治(二)
1. 回顾 回顾笔者以前记录的文章,DSAA之最大子序列之和问题(三)第一次遇到分治的思想,对最大子序列求和问题使用分治可以将O(n3)O(n3)O(n^3)降低到O(nlogn)O(nlogn)O(nlogn);然后在 DSAA之合并排序学习到了归并排序,使用分治的思想可以将排序的时间复杂度稳定在O(nlogn)O(nlogn)O(nlogn);之后DSAA之快速排序(一)篇中也使用了分...原创 2018-06-21 16:04:49 · 81 阅读 · 1 评论 -
DSAA之图论Dijkstra(贪婪算法)(五)
1. 前言 有网友把Dijkstra归为BFS算法,笔者觉得是不准确的,两者的差别在于每个阶段是否是最优选择,也就是是否达到局部最优,当然不保证全局最优。2. 定义 We keep all of the same information as before. Thus, each vertex is marked as either known or unknown. A ...原创 2020-11-20 11:46:41 · 267 阅读 · 0 评论 -
《DP学习系列》从零开始学习动态规划,有依赖的背包问题(七)
1. 预备部分 如果真的从零开始学习DP,那么从七讲以后的部分就要烧脑细胞了。如果是为了笔试准备,笔者感觉后面就可以不用看了。但是笔者这里还是完整记录完,我们看别人的结论尚且要思索万千,所以崔添翼真是非常聪明。该部分来自NOIP2006的比赛原题,所以我们初学者也有必要看看前因后果,原题如该博主记录所示。2. 简化的问题 金明的预算的原题节选: 把想买的物品分为两类:主...原创 2020-11-20 11:47:44 · 225 阅读 · 0 评论 -
DSAA之补充冒泡排序和选择排序
1. 回顾 之前学习过的排序算法有:归并排序、堆排序、快速排序、快速选择排序、基数排序、桶排序、计数排序、希尔排序、插入排序。其中不稳定的排序算法为堆、快、希、直接选择(区分快速选择),其他都是稳定排序。现在补充两个基础排序算法:冒泡和直接选择排序。2. 冒泡排序 比较简单,可以直接看代码:for(int i=0;i<nums.size();++i) //每次当前...原创 2018-06-16 17:20:13 · 83 阅读 · 1 评论 -
DSAA之图论双连通及割点问题(十一)
1. 定义 A connected undirected graph is biconnected if there are no vertices whose removal disconnects the rest of the graph. If a graph is not biconnected, the vertices whose removal would dis...原创 2018-06-16 21:01:07 · 82 阅读 · 1 评论 -
从零开始算法篇之动态规划(三)
1. 回顾 此篇和笔者之前记录的背包九讲系列笔记接轨,现在回顾下笔者总结的背包九讲的一些内容:背一中,使用滚转数组优化了空间复杂度,针对不同的问题,初始状态的赋值也会相应不同。背二中,对于输入数据提前优化,减少待处理数据量的,这种排序优化应该保证是稳定的。然后对于选多件物品的问题,又可以使用二进制优化,将原本O(n)O(n)O(n)的复杂度降低到O(logn)O(logn)O(log...原创 2018-07-06 12:21:05 · 129 阅读 · 1 评论 -
《leetcode》第一阶段汇总(10-20题)(一)
前言 总结花时间蛮长的,比做题慢多了。~10. Regular Expression Matching 算是比较难的一道DP题,会有几个地方比较难想:状态比较难确定,F[i,j]F[i,j]F[i,j]该怎么表示会有疑惑状态转移方程难确定,很容易写出错的转移方程初始状态难确定,初始状态又是一个子DP题。 现在整理下自己AC版本的一些思考过程:1. 设F[i...原创 2018-07-05 17:40:16 · 116 阅读 · 1 评论 -
《leetcode》第一阶段汇总(21-25题)
递归算法 如果深入探讨递归,会有非常多的东西。在做这几个题的时候,使用递归能大大简化代码复杂度。在旧认知篇里面,自己提到了递归和迭代是等价的,更准确的说尾递归和迭代是等价的。然后做了以下几个题之后,我发现我似乎没有真正理解递归的精髓。本篇也是冰山一角,以后有时间再深入研究。21. Merge Two Sorted Lists 已知mergeTwoLists返回两个链表合成后链表的头...原创 2018-07-11 18:31:31 · 93 阅读 · 1 评论 -
算法补充之KMP作用原理(一)
1. 整体把握 一般都可以想到O(n2)O(n2)O(n^2)的暴力算法,KMP改进暴力算法使其算法复杂度为O(m+n)。本文参考:维基百科。2.算法学习2.1 使用局部匹配表 To illustrate the algorithm’s details, consider a (relatively artificial) run of the algorithm,...原创 2020-11-20 11:47:04 · 199 阅读 · 0 评论 -
《leetcode》第一阶段汇总(1-9题)
序言 终于leetcode完成了前100题,现在总结下前阶段部分我觉得值得总结的题的细节。并非完整的结题报告,那将没有任何意义,毕竟在leetcode官网有更多详解的信息。1. Two Sum 和 3. Longest Substring Without Repeating Characters 这两个题都使用哈希表可以很快解决,但是在解决第三题的时候,我犯了点奇怪的错误,由此错误...原创 2018-07-03 18:14:51 · 93 阅读 · 1 评论 -
DSAA之图论Kruskal算法(七)
1. 回顾 Kruskal算法需要使用并查集,所以记录该篇前需要回顾DSAA之THE DISJOINT SET ADT(一)和DSAA之THE DISJOINT SET ADT(二)。不相交集合的概念和实现都是比较简单。2. Kruskal’s Algorithm A second greedy strategy is continually to select ...原创 2020-11-20 11:47:15 · 213 阅读 · 0 评论 -
DSAA之图论Prim算法(六)
备注 笔者暂时不记录网络流和关键路径分析法,DSAA这里讲的很粗略。以后根据需要单独补充。1. Minimum Spanning Tree Informally, a minimum spanning tree of an undirected graph G is a tree formed from graph edges that connects all the v...原创 2018-06-10 21:41:08 · 98 阅读 · 1 评论 -
《DP学习系列》从零开始学习动态规划,分组背包(六)
前言 引文来自崔添翼背包九讲1. 题目 背包有N件物品和一个容量为V的背包。第i件物品的费用是Ci,价值是Wi。这些物品被划分为K组,每组中的物品互相冲突,最多选一件。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。2. 分析 这个问题变成了每组物品有若干种策略:是选择本组的某一件,还是一件都不选。也就是说设F [k,v]表示前k组物品花...原创 2018-06-10 20:35:26 · 72 阅读 · 1 评论 -
从零开始算法篇之贪婪(一)
1. 回顾 图论篇忽略了网络流、关键路径分析法和NP完全问题,在DSAA的论述里面,这些内容都是作为了解性质,以后如果需要深入再单独学习。整体上看,基本的数据结构已经全部学完了,从此篇开始将详细学习经典五大常用算法,这章的课后题也会尽量解决。 回溯或者动态规划,笔者之前都或多或少接触过。背包九讲的下一步学习计划也正式和该篇汇合。另外笔者leetcode做题分支,已经快接近100道了。到...原创 2018-06-18 17:14:40 · 126 阅读 · 1 评论 -
《DP学习系列》Longest Valid Parentheses的一些DP细节思考
1. Longest Valid Parentheses Given a string containing just the characters ‘(’ and ‘)’, find the length of the longest valid (well-formed) parentheses substring. Example 1: Input: “(()” ...原创 2020-11-20 11:44:18 · 229 阅读 · 0 评论 -
DSAA之中缀转后缀表达式(三)
1. 简单回顾 笔者认为该算法,只需要记住流程,而记住流程的关键就是多做几个笔试选择题,比如 牛客网: 可以完全按照中缀表达式转换成后缀表达式的算法来: 步骤 栈 后缀表达式 遇到X输出 空 X 遇到=入栈 = X 遇到A输出 = XA 遇到A输出 = XA 遇到+,比=优先级高,入栈...原创 2018-04-22 16:12:08 · 214 阅读 · 0 评论 -
The Search Tree的Python实现(二)
1. The Search Tree ADT-Binary Search Trees The property that makes a binary tree into a binary search tree is that for every node, X, in the tree, the values of all the keys in the left subtree...原创 2020-11-20 11:45:42 · 199 阅读 · 0 评论 -
《DP学习系列》从零开始学习动态规划,完全背包(二)
前言 如果您也是参考笔者的记录学习,那么推荐您至少先看一遍原版背包九讲。本系列只是初学者对若干问题的补充和思考。1. 题目 有N种物品和一个容量为V的背包,每种物品都有无限件可用。放入第i种物品的费用是CiCiC_{i},价值是WiWiW_{i}。求解:将哪些物品装入背包,可使这些物品的耗费的费用总和不超过背包容量,且价值总和最大。 2. 基本思路 如果仍然按照...原创 2020-11-20 11:43:53 · 226 阅读 · 0 评论