算法导论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

posted @ 2021-01-14 17:41  ijkzen  阅读(86)  评论(0编辑  收藏  举报