第01章绪论(Java版)方案.ppt

事业与人生 一个人,无论男女,其社会属性最重要的是事业,事业是一个人赢得自信和尊严的根本。不仅仅表现在挣钱吃饭这种浅层次问题,更是保持积极进取心态、保持身心健康、赢得尊重的良方。 大学是人生的一个重要阶段,承前启后,是初高中应试教育的终点,却是人生自立、独立的起点。确定自己的人生目标和生活准则,选择要做什么?怎样做?并独立承担自己选择 的后果。 好自为之 一个人迟早、肯定能够从他的付出中获得回报,也肯定会因为偷懒、幼稚、无知而付出代价,有些惨痛级别的代价是不能承受的。例如,大学不能毕业、没有学位、留级等,影响终身,后悔莫及。 (2)树结构 图1.5 学生信息表的两种存储结构 ?注意:java.lang.Integer是int整数类型的包装类 调用时默认将int整数与Integer对象相互转换。例如: Integer key = new Integer(100); Integer key = 100; //与上句等价 //Java自动将int整数封装成Integer对象 int i = key.intValue(); int i = key; //与上句等价 // Java自动调用Integer的intValue()方法,将Integer对象转换成int整数 1.2.2 算法分析 度量算法的时间效率 算法的时间效率指算法的执行时间随问题规模的增长而增长的趋势,通常采用时间复杂度来度量算法的时间效率。 T(n)=O(f(n)) 度量算法的空间效率 空间复杂度指算法在执行时为解决问题所需要的额外内存空间,不包括输入数据所占用的存储空间。 S(n)=O(f(n)) 表1-2 时间复杂度随n变化情况的比较 时间复杂度 n=8(23) n=10 n=100 n=1000 O(1) 1 1 1 1 O(log2n) 3 3.322 6.644 9.966 O(n) 8 10 100 1000 O(nlog2n) 24 33.22 664.4 9966 O(n2) 64 100 10000 106 一条简单语句的时间复杂度是O(1)。 int count=0; 一个循环的时间复杂度是O(n)。 int n=8, count=0; for (int i=1; i=n; i++) count++; //循环体执行n次 以下循环语句的时间复杂度是O(log2 n)。 for (int i=1; i=n; i*=2) //i按2的幂(1,2,4,8)递增 count++; //循环体执行1+ 次 以下二重循环的时间复杂度为O(n2)。 for (int i=1; i=n; i++) for (int j=1; j=n; j++) 【例1.2】 算法时间复杂度分析。 【例1.2】 算法时间复杂度分析。 以下二重循环的时间复杂度是O(n×log2n)。 for (int i=1; i=n; i*=2) //循环log2n次 for (int j=1; j=n; j++) //循环n次 以下二重循环的时间复杂度是O(n)。 for (int i=1; i=n; i*=2) //循环log2n次 for (int j=1; j=i; j++) //循环i次 //循环次数 1.2.3 算法设计 【例1.3】 求两个整数的最大公约数。 目的:说明算法必要性。 (1)质因数分解法 (2)更相减损术 “以少减多,更相减损,求其等也,以等数约之。等数约之,即除也,其所以相减者皆等数之重叠,故以等数约之。” :(91,49)=(42,49)=(42,7)=7。 (3)欧几里德(Euclid)的 辗转相除法。 gcd(91,49)=gcd(49,42) =gcd(42,7)=gcd(7,0)=7 返回a与b的最大公约数 int gcd(int a, int b) { while (b!=0) { int temp = a%b; a = b; b = temp; } return a; } 【思考题1-1】 求n个整数的最大公约数。 采用递

文档评论(0)

1亿VIP精品文档

相关文档