COMP352 Data Structures and Algorithms[数据结构与算法]是计算机专业的一门外围课程,3学分,前置课程为COMP232和COMP249。

本门课程讲授了一些根本的数据结构,如:栈,队列,链表,哈希表,对,二叉树,AVL树,图等。难度比国内大学简略得多。本专栏旨在对课程内容进行梳理与回顾。

如何评估效率?

办法的正确性仅仅取决于算法是否执行它应该做的事件。显然,效率不同于正确性。

效率能够用多种形式掂量,如:

  • 内存利用率更低
  • 更快的执行工夫
  • 更快地开释调配的资源等

如何掂量效率?

  • 测量应独立于应用的软件(编译器/语言等)和硬件(CPU速度/内存大小等)
  • 特地地,在程序运行时运行时剖析可能有重大的弱点

试验钻研

1) 编写一个实现该算法的程序;
2) 将不同数量的数据输出运行程序;
3) 应用相似System.currentTimeMills()的办法精确测量理论运行状况工夫;
4) 将后果描点作图进行剖析。

试验的局限性

1) 有必要实现该算法,这可能艰难/低廉;
2) 后果可能不示意试验中未蕴含的其余输出上的运行工夫;
3) 为了比拟两种算法,必须应用雷同的硬件和软件环境;
4) 在一些多道程序设计环境中,例如Windows,很难确定一个工作须要多长时间。

如何评估效率?

效率在很大水平上取决于办法被如何定义。而对办法定义的的形象剖析是一种能够间接执行的钻研一种,因而成为首选。

疏忽各种限度,如:

  • CPU速度
  • 内存限度;例如,容许int变量取任何容许的整数值,并容许数组取任意长度等。

因为当初的办法与特定的计算机环境无关,咱们称之为算法

预计运行工夫

如何依据算法的定义预计其运行/执行工夫?

咱们能够思考在算法中执行的语句数作为运行工夫的度量。这个度量能够示意为问题规模的函数。算法的运行工夫通常随着问题规模的增大而增大。

咱们个别关注最坏的状况,这对游戏、金融、机器人技术等应用程序至关重要。

给出一个规模为n的,找出worstTime(n),它是一次执行中执行语句的最大数目。咱们要思考所有可能的参数/输出值。

例 - 1:假如有一个数组a[0 ... n],思考以下程序:

for (int i= 0; i<n - 1; i++)    if (a[i] >a[i +1])        System.out.println (i);

worstTime(n)是多少?


所以,worstTime(n)是:4n-2.

伪代码

一种算法的高级形容,比英语散文更有条理,不如程序具体,是形容程序设计问题的算法的首选符号,暗藏程序设计的细节。

例 - 2:找出一个数组的最大元素

Algorithm arrayMax(A, n)  Input array A of n integers  Output maximun element of A  currentMax ← A[0]  for i ← 1 to n-1 do    if A[i]>currentMax then        currentMax ← A[i]  return currentMax
流程管制
if ... then ... [else ...]while ... do ... repeat ... until ...for ... do ...
函数申明
Algorithm method (arg [,arg...] Input ... Output ...
函数调用
var.method(arg[,arg...])
返回值
return expression
表达式
← 赋值,相当于java中的 == 检测相等,相当于java中的 ==

7个重要的函数

在算法剖析中经常出现的7个函数

常数函数 = 1对数函数 = log n线性函数 = nN-Log-N函数 = nlog n二次函数 = n^2三次函数 = n^3指数函数 = 2^n