算法导论1-2
读书笔记
算法无论如何总是必要的。
同样的问题,使用不同的算法结果可能天差地别。
课后习题
1.2-1
给出在应用层需要算法内容的应用的一个例子,并且讨论设计的算法功能。
在android studio中需要对strings.xml按照字母顺序排序,使得文件内容更加有秩序;
1.2-2
假设我们正比较插入排序和归并排序在同样机器上的实现,对于规模为n的输入,插入排序运行\(8n^2\),归并排序运行\(64\lg{n}\),问对哪些n值,插入排序优于归并排序?
fun main() {
for (index in 1..100) {
if (getFirst(index) - getSecond(index) > 0) {
println(index)
}
}
}
fun getFirst(index: Int) = Math.pow(index.toDouble(), 8.toDouble())
fun getSecond(index: Int) = Math.pow(2.toDouble(), index.toDouble())
题目可以被看做\(n^8 - 2^n > 0\)的整数解;
通过运行上述程序可以得知答案是
\(2\le n \le 43\),n为整数。
1.2-3
当n的最小值为何值时,运行时间为\(100n^2\)的一个算法在同样的机器上快于运行时间为\(2^n\)的了一个算法?
将上述程序稍作修改,便可得到正确答案:
\(n \ge 15\),n为整数。
思考题
运行时间的比较
思路:
f(n) = 1000
f(n) = 1000 * 60
f(n) = 1000 * 60 * 60
f(n) = 1000 * 60 * 60 * 24
f(n) = 1000 * 60 * 60 * 24 * 30
f(n) = 1000 * 60 * 60 * 24 * 30 * 12
f(n) = 1000 * 60 * 60 * 24 * 30 * 12 * 100