2013年9月12日

表、栈和队列基础

摘要: 一、表 表有简单数组实现和链表实现。 对比某些操作的算法时间复杂度: 1、查询 1.1 如果查询的参数是对象的下标i,那么数组的时间复杂度为常数时间O(1),单链表为O(i),双链表因为可以从头部或结尾开始查询,所以最坏的情况为i=N/2(N为表的大小),时间复杂度O(N/2)。 1.2 如果查询的参数是对象本身,那么数组的时间复杂度为O(i),单链表为O(i),双链表为O(i)。它们都需要从头到尾来遍历。 2、更新 对于数组的更新代价是昂贵的,因为每次插入一个对象,都需要把该对象后面的所有对象向后移一位,最坏的情况是在顶端插入,时间复杂度就是... 阅读全文

posted @ 2013-09-12 17:28 算徒 阅读(474) 评论(0) 推荐(0) 编辑

2013年9月8日

转:算法时间复杂度基础

摘要: 摘要 本文论述了在算法分析领域一个重要问题——时间复杂度分析的基础内容。本文将首先明确时间复杂度的意义,而后以形式化方式论述其在数学上的定义及相关推导。从而帮助大家从本质上认清这个概念。前言 通常,对于一个给定的算法,我们要做两项分析。第一是从数学上证明算法的正确性,这一步主要用到形式化证明的方法及相关推理模式,如循环不变式、数学归纳法等。而在证明算法是正确的基础上,第二部就是分析算法的时间复杂度。算法的时间复杂度反映了程序执行时间随输入规模增长而增长的量级,在很大程度上能很好反映出算法的优劣与否。因此,作为程序员,掌握基本的算法时间复杂度分析方法是很有必要的。 但是很多朋友并不能清晰的理解这 阅读全文

posted @ 2013-09-08 14:50 算徒 阅读(200) 评论(0) 推荐(0) 编辑

Netty 学习笔记

摘要: Netty是由JBOSS提供的一个java开源框架。Netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。 Netty基于java的NIO核心:缓存区、通道、选择器。这里推荐一本书:java NIO,出版社是O'REILLY。 一、缓存区。 缓冲区的工作与通道紧密联系,通道是I/O传输发生时通过的入口,而缓冲区是这些数据传输的来源或目标。对于离开缓冲区的传输,你想传递出去的数据被置于一个缓冲区,被传送到通道。对于传回缓冲区的传输,一个通道将数据放置在你所提供的缓冲区中。这种在协同对象之间进行的缓冲区数据传递是高效... 阅读全文

posted @ 2013-09-08 14:10 算徒 阅读(2034) 评论(0) 推荐(1) 编辑

2013年9月7日

memcached 学习笔记

摘要: memcached是高性能的分布式内存缓存服务器。一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态应用的速度、提高可扩展性。Memcached基于一个存储键/值对的hashmap,当表满了以后,接下来新增的资料会以LRU机制替换掉。其守护进程是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信。一、分布式 分布式的一个最重要的内容是要保证同一个key每次都必须命中同一个服务器。下面简单介绍两种分布方式:简单hash分布和一致性hash分布。 1、简单hash分布 例如对于每次访问,可以按如下算法计算其哈希值: h =... 阅读全文

posted @ 2013-09-07 16:54 算徒 阅读(548) 评论(0) 推荐(1) 编辑

导航