Question 1

Suppose that you time a program as a function of N and produce
the following table.

N seconds
-------------------
1024 0.000
2048 0.001
4096 0.007
8192 0.029
16384 0.121
32768 0.519
65536 2.156
131072 9.182
262144 38.784
524288 164.585
1048576 698.592
2097152 2958.141

Estimate the order of growth of the running time as a function of N.
Assume that the running time obeys a power law T(N) ~ a N^b. For your
answer, enter the constant b. Your answer will be marked as correct
if it is within 1% of the target answer - we recommend using
two digits after the decimal separator, e.g., 2.34.

Answer: 2.08

Question Explanation

The theoretical order-of-growth is N ^ (25/12) = 2.08
The empirical order-of-growth is N ^ (log_2 ratio)

log_2
N seconds ratio ratio
---------------------------------------
1024 0.000 - -
2048 0.001 - -
4096 0.007 7.00 2.81
8192 0.029 4.14 2.05
16384 0.121 4.17 2.06
32768 0.519 4.29 2.10
65536 2.156 4.15 2.05
131072 9.182 4.26 2.09
262144 38.784 4.22 2.08
524288 164.585 4.24 2.09
1048576 698.592 4.24 2.09
2097152 2958.141 4.23 2.08


Question 2

What is the order of growth of the worst case running time of the following code fragment
as a function of N?

int sum = 0;
for (int i = 0; i < N; i++)
    for (int j = i+1; j < N; j++)
    for (int k = j+1; k < N; k++)
      for (int h = k+1; h < N; h++)
         sum++;
Answer: N^4

int sum = 0;

for (int i = N*N; i > 1; i = i/2)
     sum++;

Answer: logN

The i loops iterates ~ lg (N^2) ~ 2 lg N times.

int sum = 0;
for (int i = 1; i <= N*N; i = i*2)
for (int j = 0; j < i; j++)
sum++;

Answer: N^2

The body of the innermost loop executes 1 + 2 + 4 + 8 + ... + N^2 ~ 2 N^2 times.


Question 3

Given the following definition of a MysteryBox object:

public class MysteryBox {
private final long x0, x1, x2, x3;
private final double y0, y1, y2, y3;
private final boolean z0;
private final int[] a = new int[320];

...
}

Using the 64-bit memory cost model from lecture, how many bytes does
each object of type MysteryBox use? Include all memory allocated when the
client calls new MysteryBox().

Answer: 1400

Question Explanation:

The correct answer is: 1400

public class MysteryBox {                           //   16 (object overhead)
private final long x0, x1, x2, x3; // 32 (4 long)
private final double y0, y1, y2, y3; // 32 (4 double)
private final boolean z0; // 1 (1 boolean)
private final int[] a = new int[320]; // 8 (reference to array)
// 1304 (int array of size 320)
... 7 (padding to round up to a multiple of 8)
} ----
1400

AlgorithmsI Exercises: Analysis of Algorithms的更多相关文章

  1. 算法分析 Analysis of Algorithms -------GeekforGeeker 翻译

    算法分析 Analysis of Algorithms 为什么要做性能分析?Why performance analysis? 在计算机领域有很多重要的因素我们要考虑 比如用户友好度,模块化, 安全性 ...

  2. 6.046 Design and Analysis of Algorithms

    课程信息 6.046 Design and Analysis of Algorithms

  3. "Mathematical Analysis of Algorithms" 阅读心得

    "Mathematical Analysis of Algorithms" 阅读心得 "Mathematical Analysis of Algorithms" ...

  4. 《Mathematical Analysis of Algorithms》中有关“选择第t大的数”的算法分析

    开头废话 这个问题是Donald.E.Knuth在他发表的论文Mathematical Analysis of Algorithms中提到的,这里对他的算法分析过程给出了更详细的解释. 问题描述: 给 ...

  5. 612.1.002 ALGS4 | Analysis of Algorithms

    我们生活在大数的时代 培养数量级的敏感! Tip:见招拆招 作为工程师,你先要能实现出来. 充实基础,没有什么不好意思 哪怕不完美.但是有时候完成比完美更重要. 之后再去想优化 P.S.作者Rober ...

  6. Analysis of Algorithms

    算法分析 Introduction 有各种原因要求我们分析算法,像预测算法性能,比较不同算法优劣等,其中很实际的一条原因是为了避免性能错误,要对自己算法的性能有个概念. 科学方法(scientific ...

  7. Analysis of algorithms: observation

    例子: 3-Sum 给定N个整数,这里面有多少个三元组,使其三个整数相加为0,如上面的例子为有4个三元组. 这个问题是许多问题如计算机几何,图形学等的基础. 用简单粗暴的方式来解决3-Sum问题 通过 ...

  8. Time complexity analysis of algorithms

    时间复杂性的计算一般而言,较小的问题所需要的运行时间通常要比较大的问题所需要的时间少.设一个程序P所占用的时间为T,则 T(P)=编译时间+运行时间. 编译时间与实例特征是无关的,且可假设一个编译过的 ...

  9. AlgorithmsI Exercises: UnionFind

    Question1 Give the id[] array that results from the following sequence of 6 unionoperations on a set ...

随机推荐

  1. mysql 存储过程项目小结

    1. false :0  true 1 切记 官方文档:http://dev.mysql.com/doc/refman/5.0/en/numeric-type-overview.html BOOL,  ...

  2. mssql 创建触发器

    MS-SMS里创建触发器: 首先右击表内的触发器文件夹图标 然后输入触发器创建指令,一下案例:(添加创建时间) 创建: SET ANSI_NULLS ON GO SET QUOTED_IDENTIFI ...

  3. HDFS的Java客户端操作代码(查看HDFS下的文件是否存在)

    1.查看HDFS目录下得文件是否存在 package Hdfs; import java.io.IOException; import java.net.URI; import org.apache. ...

  4. JavaScript 使用

    HTML 中的脚本必须位于 <script> 与 </script> 标签之间. 脚本可被放置在 HTML 页面的 <body> 和 <head> 部分 ...

  5. C#快速排序法

    最近面试的时候,被问到了快速排序法.一时之间,无法想起算法来. 重新看了书本,算法如下: 1)设置两个变量I.J,排序开始的时候:I=0,J=N-1: 2)以第一个数组元素作为关键数据,赋值给key, ...

  6. app包中的fragment和v4包中的fragment的使用的区别

    app包中的fragment和v4包中的fragment的使用的区别 1.尽量不要用app包中的fragment,因为这个是在3.0之后才有的,支持的版本太高,在低版本中是是用不了的 2.androi ...

  7. asp.net中ashx文件如何调用session

    如果你要保证数据的安全性,你可以在ashx中使用session验证.如:你的index.aspx中使用jquery回调ashx数据,那么在index.aspx page_load时session[&q ...

  8. C#中的Dictionary简介

    简介在C#中,Dictionary提供快速的基于兼职的元素查找.当你有很多元素的时候可以使用它.它包含在System.Collections.Generic名空间中. 在使用前,你必须声明它的键类型和 ...

  9. 解决vim不能使用方向键和退格键问题

    1.使用vi命令时,不能正常编辑文件,使用方向键时老是出现很多字母,或者退格键却变成方向键的功能 只要重装一下vi的依赖包即可完美解决vi编辑器方向键变字母的问题.rpm -e vim-enhance ...

  10. 什么是DOM

    什么DOM,简单的说.DOM是一套对文档的内容进行抽象和概念化的方法. 在现实世界里,人们对所谓的“世界对象模型”都不会陌生.例如,当用“汽车”.房子 和树等名词