算法导论第一章答案

1.1节

  1. 现实生活中需要排序的例子:按照取号时间进行服务。
  2. 除速度外,现实生活中对于效率的度量还可以采用:能源的消耗、资源的消耗等。
  3. 已知的数据结构:链表,优点,插入和删除非常快、缺点是随机访问效率低。
  4. 最短路径和旅行商的相似之处:都是希望得到最短路径,不同之处在于,最短路径得到的是从一点出发,到其它点的最短路径,而旅行商问题,是总路程最短,而且允许走回头路。
  5. 最佳解:找到出价最高者方可;近似最佳解:围棋计算程序。

1.2节

  1. 应用层需要算法的例子:图像识别,设计算法的功能,提取特征,特征相似度分析;
  2. 插入排序8n2,归并排序64nlgn,当n=44时插入排序优于归并排序;
    namespace IA {
    public class CompareInsertionAndMergeSort {
        private int GetTheNumberOfMergeIsFasterThanInsertionSort() {
            // insertion cost 8 * n ^ 2
            // merge cost 64 * n * log2(n)
            var n = 2;
            while (true) {
                var insertionCost = 8 * n * n;
                var mergeCost = 64 * n * Math.Log(n, 2);
                if (insertionCost > mergeCost)
                    break;
                n++;
            }
    
            return n;
        }
    
        [Test]
        public void MergeIsFasterThanInsertionWhenSorting44Numbers() {
            var n = GetTheNumberOfMergeIsFasterThanInsertionSort();
            Assert.AreEqual(44, n);
        }
    }
    }
    
  3. 当n=15时,算法100*n*n的速度将高于2n
    namespace IA {
    public class AlgorithmEfficiencyCompare {
        private int GetMinNumberThatFunc1FasterThanFunc2(Func<int, double> func1, Func<int, double> func2) {
            var n = 1;
            while (func1.Invoke(n) >= func2.Invoke(n)) {
                n++;
            }
    
            return n;
        }
    
        [Test]
        public void Func1FasterThanFunc2When44() {
            Func<int, double> func1 = n => 100 * n * n;
            Func<int, double> func2 = n => Math.Pow(2, n);
            var min = GetMinNumberThatFunc1FasterThanFunc2(func1, func2);
    
            Assert.AreEqual(15, min);
        }
    }
    }
    
  4. 不同时间复杂度,在1秒中内执行的次数,题目中执行时间函数的单位是微秒,所以1秒需要乘以106
    算法导论第一章答案_第1张图片

你可能感兴趣的:(算法导论,答案,第一章)