算法
文章平均质量分 55
weixin_41387874
这个作者很懒,什么都没留下…
展开
-
从调度问题看贪心算法最优性证明
贪心算法最优性证明 首先我们引入一个问题Interval Scheduling(调度问题) 现在你拥有一个资源,它可能是一间教室、一台计算机等,许多人都要求使用这个资源(计算机),但是这个资源(计算机)同一时间只能被一个人使用,我们想要达成的目标是,从起始时间s开始到结束时间f,我们可以尽可能多的满足使用这个资源的要求。 我们也可以更正式的理解这个问题。 现在我们有一组请求 request = {1, 2, 3, … , n},requesti的开始时间是starti,结束时间是endi,我们的目标是原创 2021-09-02 01:17:27 · 1639 阅读 · 0 评论 -
从LeetCode 5. 最长回文子串分析动态规划
详细部分见我在力扣的题解原创 2021-08-14 21:09:50 · 50 阅读 · 0 评论 -
JavaScript实现5种排序算法及其稳定性(分治类算法时间复杂度分析)
快速排序简介 快速排序擅长于处理大数据集,当数据集较大时,我们一般使用快速排序。 快速排序也十分脆弱,经常会出现实际时间复杂度只有O(n^2)的情况。 快速排序的平均时间复杂度是O(n*logn)(n是数据集种数据个数)。 快速排序实际上是一种分治的排序算法,利用递归实现。 快速排序的过程 1.选择一个基准元素pivot 2.把数组中小于pivot的数据放到pivot左侧,大于pivot的数据放到pivot右侧。 3.递归的进行这个过程,直到数组为空。 首先我们给出问题,我们想要对以下数据进行排序原创 2021-08-06 20:51:25 · 629 阅读 · 1 评论 -
分治算法学习笔记
分治算法范式 把问题分成几个同类子问题。 递归地解决这些子问题。 把子问题的解决方案组合成整体解决方案。 分治算法最多的用法 分治算法时间复杂度 O(n log n) 归并排序 归并排序中的分治算法范式 同类子问题:把序列分成左右两个序列。 递归对子序列完成排序,当子序列只有一个元素时,递归终止。 把左右两个有序序列组合成大的有序序列。 归并排序的合并阶段 假设我们需要合并序列A和序列B: 我们的思路是: 归并排序的时间复杂度 分治算法的时间复杂度一般可以通过递推关系式求得。 假原创 2021-07-05 08:18:16 · 83 阅读 · 0 评论 -
0-1背包问题
0-1背包问题 假设有一个背包可以装物品的总重量为W,现有N个物品,每个物品重W[i],价值V[i],用背包装物品,求能装的最大价值。 我们可以这样理解,我们有一个背包能装W重的东西和n个物品,我们想要的是找出一组物品组合使得,能装入背包的情况下,并且这组物品的价值最大。 子问题 由上面的描述,我们可以给出子问题的定义: Def:OPT[i][j]表示当我们装到第i个物品时,背包剩余能装的重量是j时的最大价值。 Goal:OPT[n][W] 最优子结构 对于每一个子问题,我们有两种选择: 装原创 2021-06-13 16:49:27 · 164 阅读 · 0 评论 -
递归以及递归过程分析
递归 递归:就是在函数运行过程中调用自己。 简单的说,递归就像是平时查字典,当你遇到了一个问题 “词A是什么意思?”,你去查了字典,但是你发现字典的解释中有一个词B你不理解,因此你又一次拿起字典查词B,终于在多次查词之后,你没有再碰到不理解的词,于是你倒回去理解了所有词的意思,并解决了一开始的问题“A 是是什么意思?” 在这个过程中,字典就像是递归函数,递归终止条件就是没有再遇到不理解的词。 递归的要素 从上面的例子可以看出,递归有两个要素: 找到重复的逻辑(不认识的词),不断缩小问题规模。 明确递原创 2021-05-15 00:45:05 · 652 阅读 · 1 评论 -
LeetCode165 比较字符串,两种解法
题目描述 比较版本号 题解分析 暴力解法 很自然的想到,先对输入的字符串进行分割,采用"."作为分隔符,得到字符串片段组成的数组。(数组中还是字符串,不能直接比较) 由于数组中还是字符串,直接比较必然会出现问题,因此需要利用Number()方法或parseInt()方法或parseFloat()方法,将数组中的字符串转成数字。 JavaScript中Number类型和String类型的互相转换 使用.length()方法获取数组长度,并比较两个数组长度。 根据数组长度分情况使用for循环判断。 时原创 2021-04-24 23:41:51 · 238 阅读 · 0 评论