这两天终于把第一部分(基础知识)给过了一遍,算是热身啦。
第3章:函数的增长
这一章主要讲了复杂度的表示方法:大O小O等。以及各类基本常用函数,像对数,指数。
当然还有阶乘,取整,取模函数。
还有学了计算机后才接触到的函数迭代以及 到处可见的斐波那切数
基本上算是把初等数学给温故了一遍。
第四章:递归式
在“笔记1”中, 我们实现了归并排序, 我们为了求比较次数,把算法简化成这样:
public int mergeSort2(int n) {
if (n == 0 || n == 1) {
return 0;
}
return 2 * mergeSort2(n / 2) + n - 1;
}
上面的函数,如果用数学公式表示,差不多是这样: T(n) = 2 T(n / 2) + n - 1
~~ 我知道这个复杂度差不多是 n log(n) , 可是这个怎么来的呢?
这一章就主要讲了三种解递归式的方法:
1。猜(偶没实力--男人不喜欢说没能力)
2。递归树。 这个无聊了画画倒是可以的, 好用, 就是累
3。主方法。提供几种“模式”去套, 这个很方便
(书上说要记忆,其实不用记, 关键是知道有这回事,到时候翻书就行)
其实上面的三种方法,对于大学的我可能还比较感兴趣,现在离学校的年代越来越远,离数学也越来越远。
我们程序员应该有更懒的方法,更直观, 就是把它画出来。
(记得高中时画的坐标轴吗? 直观。。现在我们用电脑画,呼 可不是PS)
工作了整一天,先直接看看程序的效果图哈:
用的是ruby, wxruby. 附件中有源码和exe文件可供下载(别扔鸡蛋,纯爱好)
现在谁快谁慢, 图中一目了然了。
要往软件中新添加一个函数也很容易, 只要写一个类,放在charts目录下即可。
像这样:
module Charts
class Log
def name
'log(n)'
end
def fun(x)
x > 0 ? Math.log(x) : nil
end
end
end
现在我来看看,那个递归式T(n) = 2 T(n/2) + n 是否真的接近于 nlog(n), 我把n设置得大一点, 这样让递归式的曲线更平滑。因为我的实现是只计算整数的。
和nlog(n)最接近, 就是它啦!
第五章:概率分析和随机算法
这一章内容很少, 毕竟大部分相关的东西可以在专门的概率论数学书中有。
主要是分析了几个例子,重在分析的思路。
不过有两个“打乱数组元素”的算法,需要写一下。 我是用ruby完成的。
第一个比较简单,当然也比较傻瓜, 时间复杂度更高些(要排序,所以复杂度和排序相当 nlog(n))
差不多像这样:
def shuffle(array)
array.sort_by { rand }
end
第二个差不多是这样:
def shuffle(array)
n = array.size
n.times { |i|
j = rand(n)
array[i], array[j] = array[j], array[i]
}
end
在O(n)时间内完成
这一章还分析了两个趣味题:生日悖论,还有在线雇用
其实同年同月同日生没这么难,只是和你同年同月同日生概率低一些 ,一堆人之中找出两个同样生日的,概率还是很高滴!
在线雇用这个问题本来不趣味,只是前段时间看到这个帖子
http://www.iteye.com/topic/534346
第一题像是:苏格拉底的麦田问题。
怎么样才能尽可能的摘到最大的麦穗呢? 只许前进, 只有一次机会~~
是个哲学问题,也是个数学问题。
有个想法: 前面先看几颗钻石,心中有个底,然后见到比前面最大的还要大的就选。
best = -1 # 钻石等级
# 先观察k颗, 以获取经验
k.times { |i|
if level(i) > best # 碰到更好的,记录它
best = level(i)
}
k.upto(n - 1) { |i|
if level(i) > best
return i # 选的就是它
}
那 k 到底是多少,才能让我们拿到最大棵钻石的概率最大呢?
书中详细的分析,可知道当 k = n / e 时, 概率最大化为 1 / e, (e大概是2.72)
也就是说: 十颗钻石,我们要先看4颗, 然后看到一颗比前面多大的,就拿吧, 这时候你拿到最大颗钻石的希望是:35% (还是很低? 比十分之一高多了)
不过这在现实中不这么有用, 现实中我们有太多的先验知识,让我们知道什么样的麦穗是大的。什么样的钻石是好的。
所以麦田问题在现实中又上升到哲学层次,是知足常乐呢, 还是要就要最好的, 这就要看每个人自己啦)
- 大小: 20.5 KB
- 大小: 8.3 KB
分享到:
相关推荐
通过阅读和理解《算法导论》的这些章节,我们可以掌握基础的算法思想,提升问题解决能力,并为后续深入学习打下坚实基础。学习和实践这些算法,不仅可以提升编程技能,也有助于培养分析和解决复杂问题的能力。
作为“算法导论系列读书笔记之三”,本文将主要探讨第三章的内容,这一章通常聚焦于排序与选择算法,这些是数据处理的基础,对理解和优化程序性能至关重要。 在第一章和第二章中,我们可能已经接触到了基本的数据...
书中首先介绍了算法的基本概念、设计方法和分析技巧,包括时间复杂度和空间复杂度的计算,以及如何用大O符号表示算法效率。 2. **排序与搜索**:排序算法如冒泡排序、插入排序、选择排序、快速排序、归并排序和堆...
《麻省理工算法导论读书笔记》是一份深入学习算法理论和实践的宝贵资源,源自世界顶级学府麻省理工学院的教学资料。这份笔记涵盖了算法分析、设计策略、数据结构等多个核心主题,对于想要深入了解算法的朋友们极具...
《算法导论》是一本深度探讨计算机算法的权威著作,涵盖了算法设计、分析以及实现的各个方面。这份"算法导论授课教案学习笔记"是针对该书的深入学习资源,包括了教学教案、课后作业及解答,对于正在学习算法的学生来...
《MIT算法导论》是计算机科学领域的一部经典教材,由Thomas H. Cormen、Charles E. Leiserson、Ronald L. Rivest和Clifford Stein四位教授合著。这本书深入浅出地介绍了算法的设计、分析以及实现,是许多大学计算机...
《麻省理工算法导论全套笔记》是一份深入学习算法的宝贵资料,源自世界顶级学府麻省理工学院(MIT)的课程。这份笔记涵盖了广泛的算法主题,旨在帮助读者掌握算法设计、分析以及实现的核心概念。以下是根据提供的...
《算法导论》深入探讨了算法的设计原则,包括递归、动态规划、贪心算法和分治策略,并提供了多种分析工具,如渐进分析、最坏情况和平均情况分析,帮助理解算法的时间复杂度和空间复杂度。 #### 数据结构的重要性 ...
《算法导论》是计算机科学领域的一本经典之作,它深入浅出地介绍了算法的设计、分析和实现。在第四章中,我们主要探讨了“主定理”和“主方法”,这两个概念对于理解和解决复杂度为递归形式的算法至关重要。 主定理...
### 算法导论的笔记与答案 #### 一、引言 《算法导论》是一本在计算机科学领域非常著名的教材,由Thomas H. Cormen、Charles E. Leiserson、Ronald L. Rivest和Clifford Stein共同编写。这本书广泛地被用作大学本科...
文档《算法导论英文笔记和答案(较全)》是由Thomas H. Cormen、Clara Lee和Erica Lin编写的,它是与《算法导论》(第二版)一书配套的辅助材料。本书的英文版由The MIT Press和McGraw-Hill Higher Education联合...
### 《算法导论》学习笔记关键知识点梳理 #### 第一部分:基础知识 ##### 第1章:算法在计算中的作用 1. **算法定义**:算法是一系列明确且有限的指令集合,旨在解决特定问题或执行特定任务。它可以视为将有效...
《算法导论》是计算机科学领域的一本经典教材,由Thomas H. Cormen、Charles E. Leiserson、Ronald L. Rivest和Clifford Stein四位作者共同编写,广泛应用于全球各大高校的教学中,包括知名的麻省理工学院(MIT)。...
《算法导论》是计算机科学领域的一本经典著作,由麻省理工学院的专家们编写,旨在深入浅出地介绍算法的设计、分析及其应用。这本书不仅涵盖了基础算法,还涉及了高级算法技巧,是学习算法的权威参考资料。描述中提到...
MIT的这门算法导论公开课深入浅出地探讨了算法的设计与分析,本笔记主要聚焦于渐进符号、递归以及问题的解决策略。以下是针对这些主题的详尽解析。 一、渐进符号 渐进符号是分析算法复杂度的重要工具,主要用于...
根据提供的信息,我们可以总结出以下有关《算法导论教师手册》的重要知识点: ### 一、教材背景 《算法导论教师手册》是为配合《算法导论》(第二版)而编写的一本辅助教材,旨在帮助教师更好地理解和教授算法相关...
以上只是《算法导论》部分内容的概述,实际的课堂笔记和讲义会包含更丰富的例子、习题和解析,帮助读者深入理解和掌握这些概念。通过学习这些内容,可以提升对算法和数据结构的理解,为解决实际问题打下坚实基础。
《算法导论》课后解答教师用书是针对Thomas H. Cormen、Charles E. Leiserson、Ronald L. Rivest以及Clifford Stein所著的第二版《算法导论》的一部详尽的教学辅助资料。这本书由Thomas H. Cormen、Clara Lee和Erica...
《算法导论》是计算机科学领域的一本经典著作,它深入浅出地介绍了各种重要的算法,为学习者提供了丰富的理论基础和实践经验。本篇读书笔记主要聚焦于第七章,我们将探讨其中的核心主题——快速排序。 快速排序是一...
《MIT(麻省理工)算法导论笔记》是一份详细记录了麻省理工学院(Introduction to Algorithms)课程精华的学习资料。这门课程是全球计算机科学专业学子深入理解算法的基石,其重要性不言而喻。尽管由于文件大小限制,...