![](https://img-blog.csdnimg.cn/direct/aba71b6ffd29428fa913cde7434ad14b.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
算法分析与设计
文章平均质量分 96
算法分析与设计是计算机科学领域中的重要学科,它研究如何开发高效、可靠的算法来解决各种计算问题。在算法分析方面,我们将学习如何评估算法的性能和效率,并预测算法在实际应用中的表现。在算法设计方面,我们将学习常见的算法设计技巧,如贪心算法、动态规划、分治法和回溯法等。
长安er
追寻小确幸
展开
-
算法设计与分析实验:动态规划与回溯
力扣第72题本题采用动态规划的思路。原创 2024-02-03 10:43:54 · 934 阅读 · 0 评论 -
算法设计与分析实验:最短路径算法
首先将起点0加入优先队列pq。由于从起点到节点1的路径的成功概率乘以1到0的边权重(即-log(0.5))等于0.5,大于从起点到节点0的最短距离1,并且这个概率乘以边权重大于节点1当前的成功概率0,则更新节点1的最短距离和成功概率,并将(1, -距离)添加到优先队列中。由于从起点到节点3的路径的成功概率乘以2到3的边权重(即-log(0.3))等于0.8,大于从起点到节点2的最短距离并且这个概率乘以边权重大于节点3当前的成功概率0,则更新节点3的最短距离和成功概率,并将(3, -距离)添加到优先队列中。原创 2024-02-02 17:08:19 · 816 阅读 · 0 评论 -
算法设计与分析实验:动态规划与贪心
当前硬币面额为 1,小于等于 2,更新 dp[2] = min(1, dp[2-1]+1) = min(1, dp[1]+1) = min(1, 1+1) = 1。当前硬币面额为 1,小于等于 3,更新 dp[3] = min(1, dp[3-1]+1) = min(1, dp[2]+1) = min(1, 1+1) = 1。当前硬币面额为 2,小于等于 3,更新 dp[3] = min(1, dp[3-2]+1) = min(1, dp[1]+1) = min(1, 1+1) = 1。原创 2024-02-02 09:22:25 · 1046 阅读 · 0 评论 -
算法设计与分析实验:快速选择与单调栈
在这个函数中,首先使用二分查找找到最接近 x 的数的索引,然后使用双指针从该位置开始,向两边扩展,选择最接近 x 的 k 个数。因此,总体时间复杂度为 O(n + max_freq + k),其中 n 是数组的长度,max_freq 表示数组中元素的最大频率。如果枢纽元素的位置小于 k-1,说明第 k 高的元素在右边的子数组中,我们递归地在右边子数组中查找第 k-1 - pivot_index 高的元素。它们的空间复杂度为 O(n)。综上所述,该算法的时间复杂度为 O(n),空间复杂度为 O(n)。原创 2024-02-01 15:10:18 · 1210 阅读 · 0 评论 -
算法设计与分析实验:强连通分量与图遍历
接着我们遍历节点1的相邻节点2、3和4,此时它们的时间戳分别为3、4和5,而它们的low值分别为2、3和2。因为节点2没有其它相邻节点了,所以我们返回到节点1,并继续遍历它的相邻节点,即节点3和4。接着我们遍历节点4的相邻节点1和3,此时它们的时间戳分别为8和9,而它们的low值分别为4和4。这是由于low值表示一个节点能够访问到的最小时间戳,如果一个节点的low值小于它的父节点的时间戳,说明该节点只能通过这条边到达父节点,删除该边会导致该节点无法连接父节点及其它子节点。原创 2024-02-01 09:09:53 · 956 阅读 · 0 评论 -
算法设计与分析实验:DFS与BFS
“我们应该像花朵一样去生活 向上生长 无论是在泥泞里 还是无人注意 都不会影响它 它都会去肆意生长 尽情绽放”“收藏岁月沉淀的芳香 在光阴的剪影中盈盈浅笑 任寒风吹过 依旧向阳 落红散尽 依旧温润”原创 2024-01-31 09:44:25 · 1043 阅读 · 0 评论 -
算法设计与分析实验:并查集与生成树
数理统计告诉我可以允许自己犯错,只是要尽量控制犯第一类错误的概率。我看到围城,一座座围城。有太多的声音和道理,我们是浅薄无知的。我想起来徐涛老师讲矛盾的同一性和斗争性,生活确实是缓慢受锤和螺旋上升的过程。这个世界就是矛盾所以不必害怕失去,依旧存在可能,没有标准答案,开心即是正确。在我们的黄金时代,我们应该可以肆意地,疯狂地,尽情浪漫,尽情享受。原创 2024-01-30 19:22:05 · 1087 阅读 · 0 评论 -
算法设计与分析实验:滑动窗口与二分查找
最坏情况下,算法会进行O(log(min(m, n)))轮二分查找,每一轮查找的时间复杂度为O(1),因此总的时间复杂度为O(log(min(m, n)))。这个算法的时间复杂度是 O(n),其中 n是数组的长度。由于二叉搜索树的高度与其中的节点数量相关,因此在最坏情况下(即插入的节点值是原来树中最大或最小的),时间复杂度为 O(n),其中 n 表示树中节点的数量。在每一轮二分查找中,根据切分位置,在nums1和nums2中找到对应的切分点,然后比较切分点的左右元素,根据比较结果调整切分位置的范围。原创 2024-01-29 19:26:43 · 764 阅读 · 0 评论 -
算法设计与分析实验:二分查找
一、有序数组中的单一元素力扣第540题。原创 2024-01-28 14:58:48 · 912 阅读 · 0 评论 -
算法设计与分析实验:分治算法
分治算法将原问题划分成规模较小的子问题,并通过递归的方式求解子问题,然后将子问题的解合并起来得到原问题的解。综上所述,动态规划算法和分治算法在这个问题中具有相同的时间复杂度,都为 O(n),但动态规划算法的空间复杂度更低,为 O(n)。在斐波那契数列的动态规划算法中,将问题拆解为计算前面两项的和,并利用迭代的方式逐步求解,时间复杂度为 O(n)。逆序对如下所示有8个,分别是(9, 7), (9, 5), (9, 4), (9, 6), (7, 5), (7, 4), (7, 6), (5, 4)。原创 2024-01-28 22:37:08 · 1022 阅读 · 0 评论 -
算法设计与分析实验:堆排序与分治
在合并的过程中,我们可以利用归并排序的思想,比较两个链表头部元素的大小,并将较小的元素加入到合并后的链表中。具体来说,我们可以用两个指针p和q分别指向两个有序链表头部,然后比较这两个链表当前元素的大小,将较小的元素加入到合并后的链表中,并将指针后移。需要注意的是,在构建堆的过程中,我们只是将链表的头节点添加到了一个列表中,并没有将链表整个拷贝一遍,所以我们并没有使用额外的O(nk)的空间,而只是使用了O(k)的空间。对于偶数个元素,最大堆的大小比最小堆大1,此时中位数为最大堆的堆顶元素。原创 2024-01-29 09:44:06 · 944 阅读 · 0 评论 -
动态规划算法专题探究
第一章:动态规划算法理论基础1.1动态规划概述动态规划(Dynamic Programming)是一种解决复杂问题的优化方法,常用于求解具有重叠子问题和最优子结构特征的问题。它将原始问题分解为一系列相互依赖的子问题,并通过保存每个子问题的解来避免重复计算,从而提高算法的效率。动态规划的核心思想是“最优子结构”,即整个问题的最优解可以通过子问题的最优解来构造。动态规划的关键在于合理定义状态和状态转移方程,以及正确处理边界情况和初始条件。原创 2024-01-22 16:40:55 · 1337 阅读 · 0 评论