算法--塞奇威克
文章平均质量分 67
dark_tone
编程自学者,喜爱专研未知。
智商不够
展开
-
算法第一章 1.1 基础编程模型--模块化及重定向管道
网上特别多的人都推荐这本塞奇威克的算法书,认为它比高德纳TAOCP好得多(清晰易懂,适合初学者)。 不过书中的代码是java,一度曾让我犹豫,毕竟从来没有学过。 倒不是厌学,而是自己的c语言还没有学会,再学新语言,不成了猴子掰玉米嘛。 后来转念一想,学算法主要是学思想,用什么语言实现并无多大关系,正好用c语言自己去实现,还能锻炼编程能力。 所幸拿到书后,看见第一章一小节,发现原创 2016-09-02 12:43:45 · 433 阅读 · 0 评论 -
第二章 2.3 线性表的第一类:纯数组表
线性结构的概念:①存在唯一的“第一个”元素,存在唯一的“最后一个”元素;②除第一个之外,集合中的每个元素均只有一个前驱;③除最后一个之外,集合中的每个元素均只有一个后继。线性表是由n个数据元素构成的有限序列。至于每个元素的具体含义,它可以是一个数值,或一个符号,也可以是一页书,以及代表其他更复杂的信息。我个人把表的实现方式分成三大类:1. 纯数组表2.原创 2016-09-24 18:16:48 · 336 阅读 · 0 评论 -
第二章 2.1 前期估算与实践编码验证(随机数,clock,time)
单对于算法本身来说,我们最关注的层面是效率性。运行时间(效率)计算方法:①前期估算:一般总是存在几种不同的方法来解决问题,我们总是想尽早除去那些不好的算法思想,尽管确定哪个程序更快的最好方法是将它们编码并运行。但是如果都这样做,无疑会额外消耗太多精力与时间,所以前期估算非常重要。同时,估算能让我们尽快的确定算法瓶颈所在。②实际编码:通过前期估算获得了某些结论,那么在具体的计原创 2016-09-23 04:01:33 · 303 阅读 · 0 评论 -
第二章 2.2 什么是抽象数据类型?
计算机科学建立在许多经典的公理之上,而抽象是其中最重要的一个。语言的发展就是一种抽象的产物。新的简写记号能表达更广泛的概念。一条c语句平均代表10条汇编。一条c++平均代表3条c语句。汇编语言也包含了有用的抽象,难以察觉的是,就是“内存”与“寄存器”的概念,也是抽象,否则就要表示无数个门电路的状态变换。文件也是抽象,你摸不着,打开硬盘也看不见,不是物理存在的。malloc函数实原创 2016-09-24 00:40:54 · 1879 阅读 · 0 评论 -
第一章1.2 算法的本质,5个特性与要求
算法的5个重要特性:①有穷性: 一个算法必须总是在执行有穷步之后结束,且每一步都可在有穷时间内完成。②确定性:算法中的每条指令必须有确切的含义,不会产生二义性,并且对于相同的输入只能得出相同的输出。③可行性:算法中的操作都是可以通过已经实现的基本运算执行有限次数实现。④输入: 一个算法有零个或多个输入,这些输入取自于某个特定的对象集合。⑤输出:一个算法有一个或多个的输出,这些输原创 2016-09-22 17:14:17 · 3377 阅读 · 1 评论 -
第二章 2.4 线性表的第二类:链式数组表
如前所述,链式思想的数组表,把需要存储的额外信息存放在”左边结构体“中,数据元素本身存放在”右边数组“中。 这样解决了单纯数组表的一些缺陷,又最大化的保留其优点。 链式数组表根据“右边数组”的构成,又可以细分为两种分支。 第一种是右边数组大小固定,适用于提前预知数据元素的多少,并且无需担忧内存泄漏。 第二种是右边数组大小动态调整,适用于无法预知数据元素的多少,但因为需要malloc,fre原创 2016-10-11 07:04:45 · 744 阅读 · 0 评论 -
第二章 2.5 链式数组表的代码实践
2.4节阐述了链式数组表的理论思想,并给出了可能的代码实现。但是这些代码是零散的,未经过调试,并没有形成一个可用的程序。为了简化编程模型,假设我们要处理的数据元素为整型,数据来源为键盘输入,右边数组固定大小。添加main()函数,以及输入输出函数,按照软件函数化(模块化)方法设计。#include #include struct list //原创 2016-10-13 06:24:26 · 270 阅读 · 0 评论 -
第二章 2.6 线性表的第三类:纯链表及可能的缺点
在链式数组表的基础上,我们进一步把元素部分也用链式思想完成,这就是纯链表。因为每一个元素之间都通过指针链接,因此纯链表无法进行随机访问,无论是访问元素N,还是元素N+10,都必须从第一个元素开始依次遍历。比起链式数组,无疑在随机存取方面效率会差得多,但同时,纯链表非常适合插入删除操作,因为不需要搬运元素,只需要改变指针的前后逻辑关系。插入时仅仅改变两个指针的逻辑关系,其原创 2016-10-13 10:54:16 · 251 阅读 · 0 评论 -
第二章 2.7 纯链表的代码实践
在2.6节阐述了纯链表的理论思想后,我们可以模仿链式数组表的代码编写方式,编写完整的可执行的链表程序。为了简化编程模型,假设我们要处理的数据元素为整型,数据来源为键盘输入,添加main()函数,以及输入输出函数,按照软件函数化(模块化)方法设计。首先,我们构造出元素结点与头结点:#include #include //malloc,free需要#in原创 2016-10-14 07:01:04 · 287 阅读 · 0 评论