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