1. 程序的本质
(1)程序是为了解决实际问题而存在的,从本质上而言,程序是解决问题的步骤
(2)一小步的进阶
①确认问题类型:如数值计算、求最小值个数
②确认求解步骤:如打开文件→读数据→关闭文件→计算和
2. 如何判断求解步骤的好坏
(1)程序评鉴初探
①用尽量少的时间解决问题
②用尽量少的步骤解决问题
③用尽量少的内存解决问题
【实例分析】判断求解步骤的好坏
/* 问题:给定一个整数n,编程求解 1 + 2 + 3 + ... + n的和。 */ #include <iostream> using namespace std; //2个for循环,空间复杂度和时间复杂度均为O(n) long sum1(int n) { long ret = 0; int* array = new int[n]; for(int i=0; i<n; i++) { array[i] = i + 1; } for(int i=0; i<n; i++) { ret += array[i]; } delete[] array; return ret; } //1个for循环,时间复杂度均为O(n) long sum2(int n) { long ret = 0; for(int i=1; i<=n; i++) { ret +=i; } return ret; } long sum3(int n) //O(1) { long ret = 0; if( n >0 ) { ret = (1 + n) * n /2; } return ret; } int main() { cout <<"sum1(100) = " << sum1(100) << endl; cout <<"sum2(100) = " << sum2(100) << endl; cout <<"sum3(100) = " << sum3(100) << endl; return 0; }
(2)优秀的开发者追求高质量的代码
3. 数据结构课程的历史起源
(1)1968年,由高纳德教授(Donald E.Knuth)开创
(2)同年,在计算机科学的学位课程中出现(必修)
(3)高纳德的主要成就
①ACM授予图灵奖、软件系统奖和霍泼奖
②美国数学会授予Lester R.Ford奖、J.B.Priestley奖和Steele奖
③TEX排版软件和METAFONT字型设计软件
④《计算机程序设计的艺术》等系列技术书籍
卷数 |
主要内容 |
第1卷 基本算法 |
第1章:基本概念 第2章:信息结构 |
第2卷 半数值算法 |
第3章:随机数 第4章:算术 |
第3卷 排序与查找 |
第5章:排序 第6章:查找 |
第4卷 组合算法 |
第7章:组合检索 第8章:递归 |
第5卷 语法算法 |
第9章:词法扫描 第10章:语法分析 |
第6卷 语言理论 |
第11章——还在准备中… |
第7卷 编译程序 |
第12章——还在准备中… |
Bill Gates的评价:如果你认为你是一名真正优秀的程序员……读Knuth的《计算机程序设计艺术》,如果你能读懂整套书的话,请给我发一份你的简历。 Byte的评价:这是一套集所有基础算法之大成的经典之作。当今软件开发人员所掌握的绝大多数计算机程序设计的知识都来源于此。 |
⑤……
4. 数据结构课程的研究范围
(1)非数值计算类型的程序问题
①数值计算是指使用计算机求解数学问题近似解的方法与过程。数值计算主要研究如何利用计算机更好的解决各种数学问题。
②非数值计算是指计算的对象不仅仅是数字,而是人的思维。是自然界和人类社会的一切事物,更确切地说是某些信息。如数据、文字、语言、图形、知识、事物、事物的运动过程及思维过程。例如,用计算机下棋。)
③数据结构研究的是非数值计算问题,即不是研究科学计算的问题。
(2)数据间的组织和操作方式
(3)数据的逻辑结构和存储结构
(4)历史上的经典公式:程序 = 数据 + 算法,对于数据结构算法的研究,语言不重要,重要的是思想。
5. 小结
(1)程序是为了解决实际问题而存在的
(2)针对同一个问题可以有多种解决方案
(3)专业程序员应该尽量追求高质量的程序
(4)数据结构课程主要研究非数值计算问题