- 博客(5)
- 收藏
- 关注
原创 时间复杂度的计算
大O表示法的写法为O( ),括号内为这个算法的时间量级,该方法为一个估算,并不是一个准确的执行次数。根据定义我们可以知道,找到某条基本语句与问题规模之间的数学表达式,就是找到了该算法的时间复杂度。而cnt是一条基本的执行语句,其执行次数与我们的问题规模有关,所以对于我们的大O表示法,其时间复杂度即为O(大O的表示法的好处是去掉了那些对结果影响不大的项,简洁明了的表示出了执行次数。在实际问题中我们一般关注的是最坏的运行情况,所以以最坏情况的时间复杂度为准。算法中的基本操作的执行次数,就是算法的时间复杂度。
2023-10-09 22:07:06 103 1
原创 动态规划解决最大子序和
动态规划(),又叫做dp,是一种用于解决一类最优化问题的算法思想,简单来说,动态规划是将一个复杂的问题分解成若干个子问题,或者说若干个阶段,下一个阶段通过上一个阶段的结果来推导出来,为了避免重复计算,必须把每个阶段的计算结果保存下来,方便下次直接使用。这也是动态规划和分治法的一个很大的区别,就是说动态规划分解出来的子问题间不是独立的,可能存在相互关联,而分治法分解出来的子问题间就是相互独立的,互不影响。而且要注意一定要能写出一个状态转移方程才能使用动态规划来解决。
2023-09-05 19:31:19 101
原创 贪心算法解决排队问题
贪心算法(Greedy Algorithm),又名贪婪法,是寻找最优解问题的常用方法,这种方法模式一般将求解过程分成若干个步骤,但每个步骤都应用贪心原则,选取当前状态下最好/最优的选择(局部最有利的选择),并以此希望最后堆叠出的结果也是最好/最优的解。因为我们要让时间短的人先接水,所以我们要对数据进行排序,我们可以使用algorithm库中的sort函数,时间复杂度为O(nlogn)。安排他们的打水顺序才能使所有人的等待时间之和最小,则需要将打水时间最短的人先打水。输出一个整数,表示最小的等待时间之和。
2023-08-01 20:22:06 380
原创 分治思想--快速选择算法解决最小的k个数(TopK问题)
最简单粗暴的做法就是直接使用快速排序来解决这个问题,先对原数组进行排序,再 返回倒数第k个的位置,快速排序的时间复杂度为O(nlogn),但其实可以通过对其过程中进 行优化,是的算法的速度更快。到达边界条件后递归,此时l = 4,j = 4,此时寻找目标在左部分子数组, 所以对左部分子数组进行递归,又l = r,所以递归结束,输出结果。如果每次规模为n的问题都划分成1和n - 1,每次集合又向n -1。
2023-07-25 17:49:22 439 2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人