Exercise 1.14 count change的时间复杂度

题目

  Draw the tree illustrating the process generated by the count-change procedure of section 1.2.2 in making change for 11 cents. What are the orders of growth of the space and number of steps used by this process as the amount to be changed increases?

-----------------------------------------------------------------------------------------------------------------------------------------------------------------

设amount是N。

由于count-change算法是二叉树分支递归,所以树的高度决定了时间复杂度。二叉树的最大高度是 N/1,最小高度是N/50,因此时间复杂度介于 2^N 与2^(N/50)之间,即O(2^N)。这其中进行了大量的重复计算。

如果使用HashMap将 "(amount, change_list)"=>"结果" 中间计算结果存储起来,则时间复杂度取决于(amount,change_list)有多少种组合数量。change_list有包含50、25、10、5、1,共有C(5,0)+C(5,1)+C(5,2)+C(5,3)+C(5,4)+C(5,5)种组合,amount则有N种取值。因此时间复杂度是O(N)。

时间: 2024-08-18 04:22:37

Exercise 1.14 count change的时间复杂度的相关文章

14 | count(*)这么慢,我该怎么办?

在开发系统的时候,你可能经常需要计算一个表的行数,比如一个交易系统的所有变更记录总数.这时候你可能会想,一条select count(*) from t 语句不就解决了吗? 但是,你会发现随着系统中记录数越来越多,这条语句执行得也会越来越慢.然后你可能就想了,MySQL怎么这么笨啊,记个总数,每次要查的时候直接读出来,不就好了吗. 那么今天,我们就来聊聊count(*)语句到底是怎样实现的,以及MySQL为什么会这么实现.然后,我会再和你说说,如果应用中有这种频繁变更并需要统计表行数的需求,业务

[转] stat命令输出结果中, Access,Modify,Change的含义

先建立一个空白文件a.txt 1 [[email protected] tmp]$ touch a.txt 2   3 [[email protected] tmp]$ ls -al a.txt 4   5 -rw-rw-r-- 1 emduser emd 0 Dec 14 16:44 a.txt 利用stat命令查看文件a.txt的各种属性 01 [[email protected] tmp]$ stat a.txt 02   03   File: `a.txt' 04   05   Size

时间复杂度与空间复杂度

1.时间复杂度 所谓时间复杂度实际上就是函数,既是函数计算执行的基本操作次数.ps:这里的函数是指数学里面的函数,而不是C语法里的函数. 如下面这个代码: void Test1 ( int N ) { for (int i = 0; i < N ; ++ i) { for (int j = 0; j < N ; ++ j) { //... } } for (int k = 0; k < 2 * N ; ++ k) { //... } int count = 10; while (coun

mongodb使用aggregate、group、match实现mysql中的having(count(1)&gt;1)的功能

关系型数据库中分组去重一般都是group by - having(count(1)>1)-赛选出来重复的记录组,然后一条sql搞定,但是在mongodb里面,没有这么方便了,需要自己写脚本来实现,可以通过aggregate.group.match来操作处理. 1,准备录入测试数据 db.stu.insert({cid:1,age:14,name:'gom1'}); db.stu.insert({cid:1,age:12,name:'jack2'}); db.stu.insert({cid:2,a

Word Count基础功能

Gitte地址:https://gitee.com/gyuyue/WordCount PSP表格 PSP2.1 PSP阶段 预估耗时 (分钟) 实际耗时 (分钟) Planning 计划 15 20 · Estimate · 估计这个任务需要多少时间 30 30 Development 开发 60 80 · Analysis · 需求分析 (包括学习新技术) 20 40 · Design Spec · 生成设计文档 0 0 · Design Review · 设计复审 (和同事审核设计文档) 0

204. 计数质数 | Count Primes

Count the number of prime numbers less than a non-negative number, n. Example: Input: 10 Output: 4 Explanation: There are 4 prime numbers less than 10, they are 2, 3, 5, 7. 统计所有小于非负整数 n 的质数的数量. 示例: 输入: 10 输出: 4 解释: 小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 .

select count(*) 底层究竟做了什么?

阅读本文大概需要 6.6 分钟. SELECT COUNT( * ) FROM t是个再常见不过的 SQL 需求了.在 MySQL 的使用规范中,我们一般使用事务引擎 InnoDB 作为(一般业务)表的存储引擎,在此前提下,COUNT( * )操作的时间复杂度为 O(N),其中 N 为表的行数. 而 MyISAM 表中可以快速取到表的行数.这些实践经验的背后是怎样的机制,以及为什么需要/可以是这样,就是此文想要探讨的. 先来看一下概况: MySQL COUNT( * ) 在 2 种存储引擎中的部

深入理解select count(*)底层究竟做了什么

SELECT COUNT( * ) FROM t是个再常见不过的 SQL 需求了.在 MySQL 的使用规范中,我们一般使用事务引擎 InnoDB 作为(一般业务)表的存储引擎,在此前提下,COUNT( * )操作的时间复杂度为 O(N),其中 N 为表的行数. 而 MyISAM 表中可以快速取到表的行数.这些实践经验的背后是怎样的机制,以及为什么需要/可以是这样,就是此文想要探讨的. 先来看一下概况: MySQL COUNT( * ) 在 2 种存储引擎中的部分问题: 下面就带着这些问题,以

总结: Sort 排序算法

排序总结 面试经验 硅谷某前沿小Startup面试时,问到的一个题目就是写一个快速排序算法.进而面试官问到了各种算法的算法复杂度,进而又问了Merge Sort 与 QuickSort 的优劣. 对排序算法的全面理解,体现了计算机学生的功底. 现在来讲Merge Sort 与Quick Sort 是最流行的算法,以下我们来一步一步地分析: SORT分类 在计算机科学所使用的排序算法通常被分類為: 計算的時間複雜度(最差.平均.和最好表現),依據串列(list)的大小(n).一般而言,好的表現是O