算法导论第1章参考答案与编程题选

系列地址:算法导论(CLRS)参考答案与配套编程题选

1.1 算法

1.1-1 例如大学生学期统计排序以分配奖学金等等。

1.1-2 例如解决问题需要使用的内存等等。

1.1-3 顺序表,优点有支持随机查找,可以在\(O(1)\)内查找元素,缺点是增添/删除元素不方便。

1.1-4 相似:都可以通过带有加权边的图来模拟解决总距离最小化问题。
不同:最短路径和旅行商问题考虑的顶点情况不同,导致复杂度不同。

1.1-5 只有最佳解才行:使用相同外观的钥匙开锁,只有正确的钥匙能打开。
获得近似解也行:开车时走的路线不一定是直线,绕一绕也行。

1.2 作为一种技术的算法

1.2-1 电商广告的推荐系统,选出最有可能被用户点击的广告进行推荐。

1.2-2 问题转化为我们需要确定使得 $ 8n^2<64 n \log _2(n) $ 成立的值,化简为 $ n<8 \log _2(n) $ 或 $n \leq 43 $,即当排序规模不超过43个元素时,插入排序优于归并排序。

原文地址:https://www.cnblogs.com/accepteddoge/p/8708757.html

时间: 2024-10-11 15:57:53

算法导论第1章参考答案与编程题选的相关文章

算法导论第2章参考答案与编程题选

系列地址:算法导论(CLRS)参考答案与配套编程题选 2.1 插入排序 练习2.1-1 原题为 \(A=<31,41,59,26,41,58>\) , 每一次排序后变化如下: 为了演示效果,所有值统一减 \(10\). 下面演示对 \(A=<21,31,49,16,31,48>\) 的排序过程: 练习2.1-2 重写为非升序排序结果如下: 点击查看大图 原文地址:https://www.cnblogs.com/accepteddoge/p/8710241.html

算法导论第2章编程题自选

系列地址:算法导论(CLRS)参考答案与配套编程题选 练习2.3-7 配套编程题 :两数之和 (Two Sum) - LeetCode / LeetCode-CN 原文地址:https://www.cnblogs.com/accepteddoge/p/8718095.html

算法导论 第13章 红黑树

二叉查找树的基本操作包括搜索.插入.删除.取最大和最小值等都能够在O(h)时间复杂度内实现,因此能在期望时间O(lgn)下实现,但是二叉查找树的平衡性在这些操作中并没有得到维护,因此其高度可能会变得很高,当其高度较高时,而二叉查找树的性能就未必比链表好了,所以二叉查找树的集合操作是期望时间O(lgn),最坏情况下为O(n). 红黑树也是一种二叉查找树,它拥有二叉查找树的性质,同时红黑树还有其它一些特殊性质,这使得红黑树的动态集合基本操作在最坏情况下也为O(lgn),红黑树通过给节点增加颜色和其它

算法导论 第6章 堆排序

堆数据结构实际上是一种数组对象,是以数组的形式存储的,但是它可以被视为一颗完全二叉树,因此又叫二叉堆.堆分为以下两种类型: 大顶堆:父结点的值不小于其子结点的值,堆顶元素最大 小顶堆:父结点的值不大于其子结点的值,堆顶元素最小 堆排序的时间复杂度跟合并排序一样,都是O(nlgn),但是合并排序不是原地排序(原地排序:在排序过程中,只有常数个元素是保存在数组以外的空间),合并排序的所有元素都被拷贝到另外的数组空间中去,而堆排序是一个原地排序算法. 1.在堆排序中,我们通常使用大顶堆来实现,由于堆在

算法导论 第6章 堆排序(简单选择排序、堆排序)

堆数据结构实际上是一种数组对象,是以数组的形式存储的,可是它能够被视为一颗全然二叉树,因此又叫二叉堆.堆分为下面两种类型: 大顶堆:父结点的值不小于其子结点的值,堆顶元素最大 小顶堆:父结点的值不大于其子结点的值,堆顶元素最小 堆排序的时间复杂度跟合并排序一样,都是O(nlgn),可是合并排序不是原地排序(原地排序:在排序过程中,仅仅有常数个元素是保存在数组以外的空间),合并排序的全部元素都被复制到另外的数组空间中去,而堆排序是一个原地排序算法. 1.在堆排序中,我们通常使用大顶堆来实现,因为堆

算法导论 第8章 线性时间排序

合并排序和堆排序的时间复杂度为O(nlgn),插入排序和冒泡排序的时间复杂度为O(n^2),快速排序的时间复杂度在平均情况下是O(nlgn),这些排序算法都是通过对元素进行相互比较从而确定顺序的,因此都叫比较排序. 比较排序可以看做是决策树(一个满二叉树),因为每一次比较都是一个分支.n个元素的序列,其排序的结果有 n! 种可能(n个元素的全排),所以这个决策树有 n! 个叶子结点,假设树的高度为h,则有:n! <= 2^h,所以h >= lg(n!) = Ω(nlgn).一次比较排序就是从决

算法导论 第7章 高速排序

高速排序在最坏情况下的时间复杂度为O(n^2),尽管在最坏情况下执行时间比較差,可是高速排序一般是用于排序的最佳选择.由于其平均性能相当好,期望的执行时间为O(nlgn),且在O(nlgn)的记号中隐含的常数因子非常小. 高速排序和合并排序有相似之处,都是须要划分序列,在合并排序中.划分的过程非常easy.直接选择元素序列的中间位划分位置,排序是在合并的过程中实现的,所以合并排序的合并过程非常重要.相比合并排序,高速排序就没有合并的过程.仅仅有划分,高速排序的划分过程非常重要,排序是在划分的过程

算法导论第7章___快速排序

快速排序本质上是插入排序,但是它在这个基础上增强了算法. 下面我们来分析一下快速排序: 有了前面的分析基础,我们在来看排序算法也就容易多了. public class Quick_Sort { private void quick_Sort(int []A,int left,int right){ if(left<right){ //划区比较,这个partition 第一次!得到的就是我们刚才说的2. int partition=partition(A, left, right); //实现第一

算法导论 第9章 中位数和顺序统计学

/* * 算法导论 第九章 中位数和顺序统计学 * 线性时间选择元素 */ #include <iostream> #include <ctime> using namespace std; int minimum(int *arr, int len); int randomizedSelect(int *arr, int p, int r, int i); int randomizedPartition(int *arr, int p, int r); void exchange