算法导论
算法导论课程总结
来路与归途
来路慢慢,情不知所起;
归途遥远,眨眼便是过去。
展开
-
【无标题】
给你一个字符串s、一个字符串t。返回s中涵盖t所有字符的最小子串。如果s中不存在涵盖t所有字符的子串,则返回空字符串""。tts"BANC"最小覆盖子串 "BANC" 包含来自字符串 t 的 'A'、'B' 和 'C'。"a"整个字符串 s 是最小覆盖子串。""t 中两个字符 'a' 均应包含在 s 的子串中,因此没有符合条件的子字符串,返回空字符串。原创 2024-09-02 18:44:55 · 303 阅读 · 0 评论 -
最大子数组和
给你一个整数数组nums,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。是数组中的一个连续部分。6连续子数组 [4,-1,2,1] 的和最大,为 6。原创 2024-09-02 17:09:13 · 155 阅读 · 0 评论 -
合并区间【leetcode】
以数组intervals表示若干个区间的集合,其中单个区间为。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].[[1,5]]区间 [1,4] 和 [4,5] 可被视为重叠区间。原创 2024-09-02 16:45:10 · 415 阅读 · 0 评论 -
图中所有节点到尾节点路径
1.从起始节点,以递归的方式逐渐查找子节点,记录走过的路径,直到走到尾节点后,生成的路径就是从起始节点到尾节点所有的可能路径2.原创 2022-04-07 17:07:41 · 702 阅读 · 1 评论 -
直线上最多的点数_leetcode
题目描述给你一个数组points,其中points[i] = [xi, yi]表示X-Y平面上的一个点。求最多有多少个点在同一条直线上。 提示:1 <= points.length <= 300points[i].length == 2-104 <= xi, yi <= 104points 中的所有点 互不相同解题思路遍历每个点,计算该个点与其他所有点之间的斜率,以哈希的形式记录各个斜率的出现次数,斜率出现次数最多的结点就是与该点在同...原创 2021-06-29 16:44:32 · 304 阅读 · 0 评论 -
送外卖问题
有n个小区需要外卖配送,分别有mi(i=0...n-1)个住户需要配送外卖,每户的配送时间均为1小时,现在有w个外卖员,每个外卖员只能送相邻小区,最后配送时间等于配送时间最长的外卖员的配送时间,求最短的配送时间;最小—最大问题,动态规划例有4个小区,每个小区需要配送的住户数: [5,4,5,3] 有2个外卖配送员 最短配送时间【5,4】,【5,3】 9 递归地定义最优解f(k,n):表示k个外卖员,送完n个小区的最短时间,默认参与的外卖员越多,时间越短最.原创 2021-06-25 10:31:36 · 664 阅读 · 0 评论 -
ac自动机
AC自动机,是Aho-Corasick automaton的简称,该算法在1975年产生于贝尔实验室,是著名的多模匹配算法。AC自动机是对字典树算法的一种延伸,是字符串中运用非常广泛的一种算法;AC自动机比字典树Trie多维护一个数组——fail数组。fail数组的作用是指向当前节点表示的字符串的后缀可以和模式串匹配上的最大长度的节点。是不是和KMP的next数组有点相似?KMP的next数组是自己和自己的匹配,而AC自动机的fail数组是自己和模式串(当然也包括自己)的匹配。比如:我们有字典.原创 2021-03-24 20:32:43 · 805 阅读 · 0 评论 -
字符串匹配
字符串匹配问题:假设文本是一个长度为n的数组 T[1...n],而模式是一个长度为m的数组 P[1...m],其中m<=n,进一步假设P和T的元素都是来自一个有限字母集的字符串,例如{0,1}或{a,b,...,z}.字符数组 P 和 T 通常称为字符串。如果0<=s<=n-m,并且 T [s+1...s+m]=P [1...m]那么称模式P在文本T中出现,且偏移为3;字符串匹配问题就是找到所有的有效偏移,使得在该有效偏移下,所给的模式 P 出现在给定的文本 T 中。朴素字原创 2020-09-25 00:02:04 · 241 阅读 · 0 评论 -
python 序列合并
题目描述其中系数aj都是整数满足0≤aj≤1000且至少有两个系数严格大于0,分别将n=1,n=2,n=3n...代入以上函数可以得到一个无穷长度的整数序列,即用8个系数a7,a6...a0可以唯一确定一个无穷长度的整数序列,现在给出k个通过以上方法定义的无穷序列,你需要求出将这些序列所有数字放在一起后,第n小的数字是多少?输入描述:第一行包含一个整数k,1≤k≤104接下来k行,每行包含8个整数a7,a6,.....a0,表示一个函数的系数,0≤aj≤1000最后一行包含一个整数n原创 2020-08-21 14:02:11 · 1010 阅读 · 0 评论 -
python 中位数
有⼀个⽆序的整数序列(⽆重复项,⻓度为奇数),请⽤你认为最优的⽅法求序列的中位数。例如给定数组 1、5、2、9、8、0、6,中位数是 5。要求算法的时间复杂度需要⼩于 O(n2),不能使⽤内置排序函数,可以⽤任何语⾔实现。输⼊:⼀个⽆序的整数序列。输出:中位数。顺序统计量问题输入:一个包含n个(互异的)数的集合A和一个整数i;输出:元素x,A中恰好有i-1个元素小于x;方法1:时间复杂度O(nlgn)使用堆排序或归并排序对输入数据进行排序,然后在输出数组中根据下标找出第i个元素.原创 2020-08-17 01:06:27 · 2870 阅读 · 1 评论 -
python 快速排序
1.快速排序/划分排序法:快速排序使用分治法(Divide and conquer)策略来把一个序列(list)分为较小和较大的2个子序列,然后递归地排序两个子序列。时间复杂度:O(nlgn)步骤为:挑选基准值:从数列中挑出一个元素,称为"基准"(pivot); 分割:重新排序数列,所有比基准值小的元素摆放在基准前面,所有比基准值大的元素摆在基准后面(与基准值相等的数可以到任何一边)。在这个分割结束之后,对基准值的排序就已经完成; 递归排序子序列:递归地将小于基准值元素的子序列和大于基准原创 2020-08-17 00:25:09 · 153 阅读 · 0 评论 -
快速排序
将一个典型的子数组A[p....r]进行快速排序的三步分治过程:1.分解:将数组A[p....r]根据主元A[r](数组最后一个元素)划分为两个子数组A[p...q-1],A[q+1...r],A[p...q-1]<=A[q],A[q+1...r]>=A[q]2.解决:通过递归调用快速排序,对子数组A[p...q-1],A[q+1...r]进行排序3.合并:因为子数组为原址...原创 2019-12-16 20:58:00 · 107 阅读 · 0 评论 -
渐近记号
参考文档:https://blog.csdn.net/so_geili/article/details/53353593求解方法:1.递归树法2.代入法3.主方法原创 2019-12-14 12:05:31 · 111 阅读 · 0 评论 -
分治策略
在分治策略中,我们递归求解一个问题,每层递归中应用如下三个步骤:分解(Divide): 将问题划分为规模更小的子问题解决(Conqquer):递归求解子问题。如果子问题规模足够小,则停止递归,直接求解合并(Combine): 将子问题的解组合为原问题的解最大子数组问题:最大子数组必然是一下三种情况之一:1.完全位于子数组A[low...mid]中,因此...原创 2019-12-14 01:02:21 · 226 阅读 · 0 评论 -
图——二部图匹配
Gale-Shapley(????m, ????w)#输入 :Pm男生喜欢的女生列表 Pw女生喜欢的男生列表#输出 :稳定匹配结果Input: Preference list for men ????????, preference list for women ????????.Output: Stable matching S.步骤1:构建一个空数组SLet S be a new empty matching;...原创 2019-12-09 21:03:39 · 242 阅读 · 0 评论 -
图——单源最短路径
过程中的数组结果1.数组d[维数=结点个数]:存放各个结点到源结点的距离,初始化为无穷大;2.一维数组color[维数=结点个数]={WHITE,BLACK} :表示该结点是否被访问(非必须)3.一维数组pred[维数=结点个数]:存放各个结点的父结点4.优先队列QDijkstra(G, w, s)#输入 G:图 W:为图中边的权重,二维数组,用来存放边的权重 s:源结点...原创 2019-12-09 20:21:06 · 184 阅读 · 0 评论 -
图——最小生成树
加权无向图应用: 城市之间的飞行时长;站点之间的距离;聚类中的相似度值;设备之间的网线。生成树:包含加权无向图上所有结点,且边尽量少的子图结构最⼩⽣成树(Minimum Spanning Trees, MST)——生成树中边权重和最小的生成树 需要注意的是:最小生成树可能不唯一最小生成树算法1——Prim算法算法流程: Step 0: 任...原创 2019-12-08 15:13:37 · 186 阅读 · 0 评论 -
图——强连通分量
强连通分量(strongly connected component, SGG)是满足如下条件的结点的子集????, ???? ∈ ???? 对于任意两个结点????, ???? ∈ ????,都有 从????出发到????的路径; 从????出发到????的路径; ????是最大的(maximal),添加任何一个结点进去,上述条件都不再满足问题描述:给定一个有向...原创 2019-12-08 14:09:47 · 1225 阅读 · 0 评论 -
图——拓扑排序
拓扑排序 Topological-Sort(G)1.选择入度为0的结点作为起始结点,输出该结点2.将相连结点的入度减13.继续执行1,2直到遍历完成Topological-Sort(G)Input: A graph GOutput: None步骤1:构建一个空队列QInitialize Q to be an empty queue;步骤2:遍历图中所有结点,将入度为0的...原创 2019-12-08 12:51:13 · 192 阅读 · 0 评论 -
图——深度优先算法(DFS)
在DFS遍历过程中,需要调用四个数组 Color[u]: 用以区分结点是否被访问 WHITE: 未被发现的结点; GRAY: 已经发现,但是尚未完成计算的结点; BLACK: 已经完成计算的结点。 pred[u]:...原创 2019-12-08 01:23:56 · 1116 阅读 · 0 评论 -
图——广度优先搜索(BFS)
广度优先搜索 Breadth-First Search (BFS)在BFS遍历过程中,需要调用三个数组,一个队列Color[u]: 用以区分结点是否被访问 WHITE: 未被发现的结点; GRAY: 已经发现,但是尚未完成计算的结点; BLACK: 已经完成计算的结点。pred[u]: 前序结点指针,指向结点u的前序...原创 2019-12-08 00:51:54 · 192 阅读 · 0 评论 -
计数排序(稳定的排序算法)
首先,对于每个元素都统计比该元素小的元素的数量;然后,直接把该元素放在它的位置上(对于元素????,如果有17个元素比????小,直接把????放在第18个输出位置上。)Counting-Sort(A, B, k)#输入 A:待排序一维数组,列表中的元素∈ {1,2, … , ????}#输出 B:排序后的一维数组Input: ????[1...n] where ????[????] ∈ {1,2, … , ????}O...原创 2019-12-07 19:27:45 · 471 阅读 · 0 评论 -
堆排序
优先队列: 具有FISO(firt in smallest out 先进,最小的出)行为特征 支持两种操作: Insert :将新到的元素加入队列 Extract-Min :删除或返回...原创 2019-12-07 18:37:19 · 88 阅读 · 0 评论 -
动态规划——最长公共子串问题
问题描述:说明:求解两个字符串的最长公共子字符串,必须连续动态规划求解步骤Step 1: 分析最优解的性质,刻画其结构特征Step 2: 递归地定义最优解仅当X[i]=Y[j]时,d[i,j]=d[i-1,j-1]+1;即当且仅当字符串X[i]=Y[j]时 X[i],Y[j]的最长公共子字符串长度d[i,j] 在 X[i-1],Y[j-1]的最长公共子序列长度d...原创 2019-12-07 11:42:45 · 938 阅读 · 0 评论 -
动态规划——最长公共子序列问题
问题描述:公共子序列:动态规划求解步骤Step 1: 分析最优解的性质,刻画其结构特征Step 2: 递归地定义最优解第一种情况:序列X的第i个元素与序列Y的第j个元素相等,则序列X、Y公共子序列长度=X、Y除去i,j位置元素后的 公共子序列长度+1第二种情况:序列X的第i个元素与序列Y的第j个元素不相等,则公共子序列长度...原创 2019-12-07 01:00:46 · 551 阅读 · 0 评论 -
动态规划——矩阵链乘法
问题描述:给定一个矩阵求解问题,矩阵的维度为如何通过改变矩阵乘法的求解顺序来提高计算效率动态规划求解步骤Step 1: 分析最优解的性质,刻画其结构特征Step 2: 递归地定义最优解Step 3: 自底向上计算子问题的最优解Step 4: 构造问题的最优解伪代码解析MatrixChain(p, n)输入: n为矩阵链乘积的元素个数,p为矩阵链中每...原创 2019-12-06 00:17:15 · 552 阅读 · 0 评论 -
动态规划——钢条切割问题
问题描述:Input: 钢条的长度为 ???? ,长度为 ???? 的钢条的价格为 Goal: 如何切割钢条,以实现收益最大化动态规划求解步骤Step 1: 分析最优解的性质,刻画其结构特征Step 2: 递归地定义最优解最优解必定是钢条切割为长度i和n-i两段的最优解的组合Step 3: 自底向上计算子问题的最优解(进行的是二分割)通过一维数组 r[0...n] 来自底部...原创 2019-12-05 00:59:05 · 575 阅读 · 1 评论 -
动态规划——0/1背包问题
1. 0—1背包问题问题描述: 假设我们有 n 件物品 表示第 ???? 件物品的价值; 表示第 ???? 件物品的重量; 假设背包的容量为 ????; Goal: 如何最大化背包中物品的总价值?动态规划求解步骤Step 1: 分析最优解的性质,刻画其结构特征Step 2: 递归地定义最优解最优解为:物品i包含在最优解(物品i+排除物品i其余物品...原创 2019-12-04 01:45:19 · 375 阅读 · 0 评论