08 2013 档案

摘要:本部分总结前面介绍的数据结构和算法,并讨论在不同的情况下如何进行选择。通用数据结构:数组、链表、树、哈希表专用数据结构:栈、队列、优先级队列排序:插入排序、希尔排序、快速排序、归并排序、堆排序图:邻接矩阵、邻接表外部存储:顺序存储、索引文件、B-树、哈希方法1 通用数据结构 若想存储真实世界中的类似人事记录、存货目录、合同表或销售业绩等数据,则只需要一般用途的数据结构。在本书中属于这种类型的结构有数组、链表、树和哈希表。他们被称之为通用的数据结构是因为它们通过关键字的值来存储并查找数据,这一点在通用数据库程序中常见到(栈等特殊结... 阅读全文
posted @ 2013-08-30 15:33 朗道二级相变 阅读(1512) 评论(2) 推荐(2)
摘要:1 哈希表 哈希表是一种数据结构,它可以提供快速的插入操作和查找操作。第一次接触哈希表时,它的优点多得让人难以置信。不论哈希表中有多少数据,插入和删除只需要接近常量的时间:即O(1)的时间级。实际上,这只需要几条机器指令。 对哈希表的使用者来说,这是非常迅速的事情。哈希表运算得非常快,在计算机程序中,如果需要在一秒钟内查找上千条记录,通常使用哈希表。哈希表的速度明显比树快,树的操作需要O(N)的时间级,哈希表不仅速度快,而且变成实现容易。 哈希表也有一些缺点:它是基于数组的,数组创建后难于扩展,某些哈希表被基本填... 阅读全文
posted @ 2013-08-30 10:30 朗道二级相变 阅读(1376) 评论(0) 推荐(1)
摘要:1 树 树是一种数据结构,既能像链表那样快速的插入和删除,又能像有序数组那样快速查找,树是非常好的数据结构。本章重点介绍的是一种特殊的树————二叉树。 树是由边链结的结点组成,结点通常代表的是其他常用数据结构中存储的数据项。边的意思是从一个结点到另一个结点,在Java中就用引用来表示。计算机里面的树数据结构的拓扑图和真实的树相比是倒过来的。树的每一层结点都可以和下一层多个结点相连接,这里讨论的是二叉树,每一个结点最多有两个子节点。在更普通的树里面,结点的子结点可以多于两个,这种树叫多路树。后面的2-3-4 树可... 阅读全文
posted @ 2013-08-30 08:19 朗道二级相变 阅读(620) 评论(0) 推荐(0)
摘要:前面三章已经讨论过一下排序方法——冒泡排序、选择排序和插入排序,这些都容易实现,但是比较慢,另外还提到了递归排序,这种排序方式比简单排序要快,但是它需要的空间是原始数组空间的两倍,通常这是一个严重的缺点。 本章包含了两个高级的排序算法:希尔排序和快速排序。这两种排序时间比简单排序算法快得多。希尔排序大约需要O(N*(logN)^2)时间,快速排序需要O(N*logN)时间,这两种排序算法和归并排序不同,不需要大量的辅助存储空间,希尔排序几乎和归并排序一样容易实现,而快速排序是所有通用排序算法中最快的一种排序算法。本章最后还简要的介绍了基数排序,它是一种不常用但是很有趣的排序算法。1 希尔... 阅读全文
posted @ 2013-08-23 11:14 朗道二级相变 阅读(497) 评论(0) 推荐(0)
摘要:递归是一种方法调用自己的方式。在数学中的数列中这个是很普遍的,比如递推公式an = an_1 + 1 本章主要用递归来解决一些常见的问题。1 三角数字 三角数字是这样的一个数字序列,1 3 6 10 15 21... 这个数字序列的规律是:a1 = 1,n >= 2时候,an = an_1 + n方法1:使用递归循环查找第n项 我们可以看到第n项是1+2+3...+n的结果,所以可以用一个公式来计算Sn = (1+n)*n/2package chapter6;public class Demo01 { public stati... 阅读全文
posted @ 2013-08-21 20:45 朗道二级相变 阅读(300) 评论(0) 推荐(0)
摘要:前面已经介绍了数组,我们看到数组作为数据存储结构是有一定缺陷的,在无序数组中,搜索是低效的;而在有序数组中,插入效率很低;不管哪一种数组,删除效率都很低。而且创建一个数组后,数组大小不可变。 本部分介绍链表,它是一种新的数据结构,可以解决上面的一些问题,这种数据结构就是链表,链表也是使用非常广泛的数据结构。这里将介绍单链表、双端链表、有序链表、双向链表和有迭代器的链表。1 链结点(Link) 在链表中,每个数据项都被包含在链结点中,一个链结点是某个类的对象,这个类可以叫做Link。因为一个链表中有许多类似的链结点,所以有必要用一个不同于链表的类... 阅读全文
posted @ 2013-08-20 22:12 朗道二级相变 阅读(464) 评论(0) 推荐(0)
摘要:本章涉及到三种数据存储类型:栈、队列和优先级队列。首先介绍着三种结构与数组的区别,然后依次介绍每种数据结构。1 不同的结构类型 本章所讲的数据结构和算法与前面章节提到的有很大不同,下面是三个区别。1.1 程序员的工具 数组是前面介绍过的数据存储结构,和本书后面介绍的其他结构(链表、树)一样,都适用于数据库应用中做数据记录。它常用于记录那些对应于现实世界的对象和活动的数据,如职员档案、目录和商务数据等等。这些结构便于数据的访问:它们易于进行插入、删除和查找特定数据项的操作。 然而,本章要讲解的数据结构和算法更多的是作... 阅读全文
posted @ 2013-08-15 00:00 朗道二级相变 阅读(603) 评论(0) 推荐(0)
摘要:一旦建立了一个重要的数据库后,就可能根据某些需求对数据进行不同方式的排序。比如对姓名按字母顺序排序,对学生按年级排序,对顾客按照邮政编码排序,对国内销售品按价格排序等等。 由于排序非常重要而且可能非常耗时,所以它已经成为计算机可选中广泛研究的课题,而且人们的确已经研究出一些非常成熟的方法。本章里可以看到一些比较简单的算法:冒泡排序、选择排序和插入排序。另外在第7章还可以看到高级排序的方法:希尔排序和快速排序。 计算机程序通常不能像人的大脑一样一下就看到全景,一下就能几个队员进行高低排序,它只能一步一步地解决具体问题和遵循一些简单的规则。但这种方式的好处是,对海量的数据进行处理时候要... 阅读全文
posted @ 2013-08-12 17:31 朗道二级相变 阅读(809) 评论(0) 推荐(1)
摘要:1 channel 一般channel的声明形式为:var chanName chan ElementType 与一般的变量声明不同的地方仅仅是在类型之前增加了chan关键字。ElementType指定这个channel所能传递的元素类型。举个例子,我们声明一个传递类型的int的channel:var ch chan int 或者声明一个map,元素是bool型的channelvar m map[String] chan bool 定义一个channel也很简单,直接使用内置的函数make()即可:ch := mak... 阅读全文
posted @ 2013-08-12 11:36 朗道二级相变 阅读(470) 评论(0) 推荐(0)
摘要:1 简介 GO语言google开发的新语言。有如下特性: 自动垃圾回收、更丰富的内置数据类型、函数多返回值、错误处理、匿名函数和闭包、类型和接口、并发编程、反射、多语言混合编程package main// 我们需要使用fmt包中的Println()函数import "fmt"func main() { fmt.Println("Hello, world!") } 1.1 代码结构 package main:每个GO源代码文件的开头声明该Go代码所属的包,包是Go语言里最基本的分发单位,要生成可执... 阅读全文
posted @ 2013-08-12 11:36 朗道二级相变 阅读(453) 评论(0) 推荐(0)
摘要:1 数据持久化 持久化是将内存中的对象存储在关系数据库中,当然也可以存储在磁盘文件、XML数据文件中。实现数据持久化至少需要实现以下3个接口void Save(object o):把一个对象保存到外存中Object Load(object oid):通过对象标识从外存中取回对象bool Exists(object oid):检查外存中是否存在某个对象 凡是可以序列化的对象可以持久化。序列化需要实现如下两个接口:void Serialize(Stream stream, object o)object Deserialize(Str... 阅读全文
posted @ 2013-08-09 21:37 朗道二级相变 阅读(501) 评论(0) 推荐(0)
摘要:Python是一个很强大的网络编程工具,python内有很多针对场景网络协议的库,在库顶部可以获得抽象层,这样就可以集中精力在程序的逻辑处理上,而不是停留在网络实现的细节中。1 少数几个网络设计模块 在标准库中有很多网络设计模块,在其他地方还有更多,下面是常用的模块。1.1 socket 模块 在网络编程中一个基本组件是套接字(socket,又是哪个人才翻译的),套接字是两个程序之间的信息通道,python因此了socket模块的基本细节,并不直接和套接字交互。套接字包括两个:服务器套接字和客户机套接字,创建一个服务器套接字,让它等待连接,这样它就在某个网络地址处(I... 阅读全文
posted @ 2013-08-09 21:36 朗道二级相变 阅读(869) 评论(2) 推荐(0)
摘要:1 文件读写简介 文件读写是应用程序中的常用操作。下面介绍Python中进行文件读写。Python的文件读写是非常简单的。1.1 open函数 open函数一般有了两个必须参数,一个是文件名参数,另一个是模式参数,所谓模式参数是指读写等模式。还有一个参数用来控制文件的缓存,默认值为0,表示不缓冲,设置为1表示有缓冲。 open函数的模式值r 读模式打开w 读写模式打开a 写入模式打开b 二进制模式打开(可以和其他模式并用)+ 读写模式打开,可以和其他模式并用U 支持换行符例如\n,\r 默认是以r... 阅读全文
posted @ 2013-08-09 21:32 朗道二级相变 阅读(713) 评论(0) 推荐(0)
摘要:面向对象有三大特征:多态(对应方法覆写)、封装、继承(对应方法重载),这个在Java中已经说得很详细了,这里面只是介绍Python在这三个特性方面的实现。1 创建自定义类 Python和Java一样使用class关键字来创建对象。语法格式如下:class 类名: def 方法名1(参数列表): pass 从上述语法来看,类必须使用class关键字来定义,接着是类名,然后使用pass占位。一个例子如下:class Person: def getName(self): print 'My name is... 阅读全文
posted @ 2013-08-09 21:14 朗道二级相变 阅读(395) 评论(0) 推荐(0)
摘要:本章介绍Python中模块和函数的概念。 Python程序是由包、模块和函数三者组成,包是由一系列模块组成的集合,模块是处理某一类问题的函数和类的集合。Python提供的许多工具包和模块安装在Python的安装目录下的lib子目录中。例如,在Python安装目录下lib目录下,有一个sqlite3文件夹,该文件夹就是一个包,这个包用于完成连接sqlite3数据库的基本操作。在sqlite3文件夹下有一个test的子包,还有一个_init_.py文件,该文件是sqlite3包的注册文件,如果没有该文件,Python将不能识别sqlite3包。包必须至少包含一个_init_.py文件,该文件... 阅读全文
posted @ 2013-08-06 09:15 朗道二级相变 阅读(633) 评论(0) 推荐(0)
摘要:1 print和import的更多信息 1.1 使用逗号输出 前面已经讲解过如何使用print来打印表达式,可以使用都好来打印多个表达式,只要用逗号隔开即可。>>> print 'Age:',42Age: 42 在python3.0版本中print变成了一个函数,因此打印时候就需要加上括号。>>> print('Age:','42')('Age:', '42') 如果想要同时输入文本和变量值,却又不希望使用字符串格式化的话,这个特性很有用>>> greeting 阅读全文
posted @ 2013-08-04 21:27 朗道二级相变 阅读(547) 评论(0) 推荐(0)
摘要:1 字典 字典是Python唯一内建的映射类型。字典是键值对的集合。1.1 字典的使用 某些情况下字典更加好用,比如一个电话列表。注意:电话号码只能用字符串数字表示,否则会出问题。因为电话号码一旦以0开头,就有可能被当做8进制解析,为了避免这个麻烦,就用字符串表示就可以了。用引号包住数字即可。1.2 创建和使用字典 字典可以通过下面的方式创建:变量名 = {键名:值名,键名:值名....} 注意:用引号包起来,键值对合在一起被称作项。键和值中间用冒号隔开,项之间用逗号隔开,所有的项用大括号包起来,叫... 阅读全文
posted @ 2013-08-04 07:07 朗道二级相变 阅读(622) 评论(0) 推荐(0)
摘要:数据结构:更好的说法是从数据角度来说,结构化数据,就是说数据并不是随便摆放的,而是有一定结构的,这种特别的结构会带来某些算法上的性能优势,比如排序、查找等。 在Python中,最基本的数据结构是序列(sequence)。序列中的每个元素被分配一个序号————即元素的位置,这个序号也被称为索引。第一个索引从0开始。 本章先介绍序列,然后介绍针对序列(包括元组和列表)都通用的操作,这些操作也适用于字符串。1 序列概览 Python包含6种内建的序列,本章重点讨论最常用的两种类型:列表和元组。其他的内建序列类型有字符串、Un... 阅读全文
posted @ 2013-08-03 08:11 朗道二级相变 阅读(1474) 评论(0) 推荐(0)
摘要:1 Python脚本设计简介 1.1 输出"Hello World" 和一般的语言一样,运行python程序有两种方式,一种是GUI交互式命令,一种是通过脚本文件,前者适合小型简单的任务,后者适合比较大型的。 又是输出Hello World。。。。 提出"Hello World"程序的Simon Cozen说:"它是编程之神的传统咒语,可以帮助你更好的学习语言"。1.1.1 使用带提示符的解释器 输出Hello World 使用函数print print "Hello World"1.1.2 使用源文件 #!/us 阅读全文
posted @ 2013-08-01 14:10 朗道二级相变 阅读(757) 评论(0) 推荐(0)