自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(407)
  • 资源 (2)
  • 收藏
  • 关注

原创 std::vector的reserve、resize与堆内存破坏

今天费了一个下午调试一个诡异的内存崩溃问题(coredump)基本上可以稳定复现,但会有不同。经分析崩溃栈,发现都是malloc内存时出现了signal 11段错误?分配内存时崩溃有可能是传入了非法size值,比如说-1或者0什么的,但那种情况下会抛bad alloc异常,或者返回空指针。起初怀疑是std::string的默认allocator的问题,甚至怀疑是全局变量未初始化导致的问题。。。但是...

2018-03-17 00:22:35 5168

原创 软件外包行业最大的问题

软件外包行业最大的问题,不是其中的技术人员难有大的发展,原因是大部分发注都是测试类的,不,真正的问题在于,作为外包的甲方乙方,只看甲方的需求,实质是只看甲方某部门领导(或发注项目负责人)的,而忽略了最终客户(消费者)的核心诉求。换句话说,外包行业的产业链条中存在着不当的压榨行为,使得从业人员增加了痛苦指数,最终的消费者客户也没有从这些软件系统的使用上得到乐趣。那么,直接做产品的企业,情况会不会好一...

2018-03-01 23:47:43 5712

原创 CSS布局里图文混排的缺陷(语义描述不完备)

HTML CSS布局的概念里,<img>和text默认都是inline的,但text默认不对应HTML Element(对应DOM的Text node)。当把图片<img>元素和文本默认放在一起时,由于默认文档流的流式布局,<img>图片元素和文本显示在一行上,基于文本的baseline位置水平对齐。奇怪的是,假如图片的高度不止一行文本时,则图片的右边只有一行文...

2018-02-11 11:06:21 765

原创 Why Isomorphic Go(同态Go应用,用Go语言编写前端和后端)

最近Packt出了一本书,《Isomorphic Go》。我就好奇,已经有了Isomorphic JavaScript(后端用Node.js),为何还要再来一个Isomorphic Go?也就不说Isomorphic Go了,为什么要用Go来写前端?已经有TypeScript、clojurescript这些的情况下?现在我忽然领悟了,关键在于protobuf!protobuf是一种二进制数据交换格

2018-01-18 16:44:08 1646

原创 一些记录

https://github.com/envoyproxy/envoy envoy作为Istio service mesh的主要组件,用于服务器集群内部环境的部署,是否可以简单地用于本地测试环境呢?C++ 11实现的http proxy,支持自定义filter、http2、gRPC。其JSON解析用到了RapidJSON。一个作家最主要的能力就是编故事,这个故事并不一定是他亲身经历的,但他

2018-01-10 11:15:34 517 1

原创 一次git stash pop引发的血案、、、

由于需要切换到master分支,我暂时将本地的working分支(mybranch)工作直接赞存:git stash然后切换:git checkout mastermaster上的工作处理完后,现在重新切换回来:git checkout mybranch$ git stash popAuto-merging test.cppCONFLICT (content): Merge con

2017-11-15 10:47:49 17000 2

原创 OpenGrok在Windows处理UTF-8编码无BOM信息的源代码时,中文注释显示为乱码的问题

一句话:默认解码需要改成UTF-8,用ant重新分析源代码:public abstract class TextAnalyzer extends FileAnalyzer { public TextAnalyzer(FileAnalyzerFactory factory) { super(factory); } protected Reader ge

2017-10-20 11:19:23 1312 1

原创 使用Python WSGI编写Web服务器前端,并利用Boost.Python在同一进程内连接到C++服务后端实现

首先,是WSGI application文件:其次,

2017-10-16 21:47:08 684

原创 集中式的内容分发网络本就是错误的互联网设计,账号登录机制更是垃圾

集中式的内容分发网络发展壮大了,总会蛮横地审查言论、举起所谓社区条约来封杀封禁用户帐号。而假如用户看见有趣的文章想参与讨论/评论,还必须实名认证,取一个id去登录。完全没有必要。正确的做法是P2P基于兴趣路由的分布式内容分发网络。用户每个人的机器既是客户端也是服务器,假如用户看到别人的文章觉得不错,自然可以复制到本地,作为一个新的副本,可以转发给别人。假如用户想评论别人的文章,数据保存到本

2017-10-15 20:25:34 444

原创 2017.10.14晚,用迅雷下载大部分BT资源出现失败,tracker服务器被封了?FK

2017.10.14晚,用迅雷下载大部分BT资源出现失败,tracker服务器被封了?FK

2017-10-15 08:22:55 49817 3

原创 问题:C++编写的核心模块如何暴露给外部HTTP Web服务接口???

问题:C++编写的核心模块,其API调用接口是一个C/C++函数:输入是一个复杂的嵌套struct,输出也是一个复杂的嵌套struct(注意,这里的struct定义应该只用于序列化传输,不是内存表示,因此其内部应该包含指针类型、内部id引用等等),如何暴露给外部HTTP Web服务接口???方法0:使用C/C++编写http server模块的代码,借助ACE、Boost.Asio这些库来实现

2017-10-14 11:05:52 3339 2

原创 面向逻辑概念的虚拟编程

今天提出一个概念,是为“面向逻辑概念的虚拟编程”。什么是面向逻辑概念呢?其实这很好说明:关系数据库设计里有概念建模、(业务)逻辑建模、物理建模。编程也当然可以如此。而加上虚拟编程,是为了强调这种“编程”只是一种架构设计层次的思维游戏,它甚至不是伪代码。因为一般提到伪代码,实际上还是绑定到某种命令式编程语言,而伪代码的主要特征就是不一定能通过实际的编译。现在再次回到“面向逻辑概念“的

2017-10-11 00:18:28 714 1

原创 亚马逊:您的评论无法发布。 (靠)

您的评论无法发布。我们非常感谢您在亚马逊上提交商品评论。但是,很遗憾您的评论因为不符合发表规则而没有通过审核。我们诚挚地盼望您分享对产品本身的观点,不论褒贬。我们不会因为批评特定产品而删除评论。您发表的评论必须遵守以下的规定:http://www.amazon.cn/review-guidelines   由 亚马逊买家 于 20

2017-10-09 22:16:28 2986

原创 Spring Microservices in Action-Manning(2017) 读书笔记(```里的xml为什么不能显示为缩进?Markdown的bug??)

Spring Microservices in Action-Manning(2017)-ReadingNotes.mdWelcome to the cloud, Springhttps://github.com/carnellj/spmia-chapter1依赖 spotify/docker-maven-plugin 已经更新为:https://github.com/sp

2017-09-28 00:38:27 1663

原创 让我们考虑一个地图引擎系统。。。

传统的GIS数据库,如ArcGIS这种传统桌面型的软件,主要还是强调测绘模型数据的规范化输入。GIS的本质上在于多维索引,对一个最简单的平面地图来说,主要就是靠最原始的GPS芯片返回的经纬度坐标。问题是,即使静止在同一个位置,由于地球在自转(?),卫星反射返回的信号时间可能不一样,这样得到的经纬度坐标不能保持一模一样。更不用说移动中的目标(汽车)了。中国的GPS坐标还会涉及到一个非线性的加密扰乱,

2017-09-27 14:44:38 2004

原创 成熟的产品环境代码:bounded capacity(受限容量)

Java以前的容器类没有考虑这一点,导致用户可以不停地add元素,这导致内存占用大幅升高,同时也会让服务器无法正常执行,DoS。又如Thread对象,没有考虑周全的话,会很容器new一个新线程去执行,这很容易导致大量线程同时调度执行(由于某种原因它们都没有快速执行完任务干净地退出)后来的并发类库好了一点,可以有blocking queue,当queue的容量达到预先配置的上限后,添加元素的线程

2017-09-18 12:31:49 510

原创 Java的3个问题:synchronized方法、volatile关键字、及内部类

synchronized方法:当修饰类静态方法时,相当于对类的class对象(Class类型的实例)加monitor锁。当修饰实例方法时,相当于对this加锁。synchronized块建立了happens-before关系(即当前线程独占访问被synchronized的对象)。volatile关键字:非long、double的primitive类型不需要加volatile(如果是64

2017-09-17 17:29:24 518

原创 分布式大数据存储:向上索引法

在Hadoop/HDFS里,namenode负责记录datanode的文件元信息,这样当小文件太多的情况下,namenode可能存在DoS漏洞。在实际使用中,namenode的SOP问题由增加冗余备份节点解决,小文件的问题则由引入容器封装的文件格式来解决。在HBase这类基于Master/Slave架构的大数据存储系统中,当出现数据倾斜(分布不均衡)时,将根据key的range自动切分,切分后

2017-09-15 20:27:43 1169

原创 在线招聘网站的问题

本质上,在线招聘网站做的还是信息中介的生意。在线招聘网站说是帮你找工作,实质不过是提供了一个简历托管的地方而已。它本身并不能就帮你找到满意的工作作出任何承诺。与之相反的是,寻找工作的个体,则需要将自身的详细简历信息公开给招聘网站。对于用户个体隐私数据的使用等法律条款,实际上很含糊。当招聘网站收取到了足够多的简历后,则形成了规模效益,它一方面可以向企业方用人单位,及猎头等,收取信息浏览的费用

2017-09-06 16:50:33 543 1

原创 关于推荐系统(Recommender System)推荐引擎的吐槽

# 关于推荐系统(Recommender System)推荐引擎的吐槽大数据的一个最原始的使用似乎就是从推荐系统开始的。尤其是B2C电子商务网站,为了多卖点商品给用户,或者是想让用户多消耗一点内容,当然是值得做的。但是目前这些现有的推荐系统做得怎么样呢?一个字:矬。拿亚马逊来说吧,我真想告诉它(假如它是个聪明的AI的话):我喜欢的书是翻译类的计算机编程、数学物理

2017-09-04 23:44:39 1691

原创 基本算法:生成元素数组的所有排列(permute)

static void permute(int[] A, int k){ //[0, k-1] is prefix, [k, n) is for recursive call; if(k==A.length-1){//递归结束条件 for(int v : A){ System.out.print(v);

2017-09-04 23:02:35 595

原创 Cloud Native Java-OReilly 2017 读书笔记

Cloud Native Java-OReilly 2017-ReadingNotes.mdBasicsSaaS的12 Factor:Bootcamp: Introducing Spring Boot and Cloud FoundrySpring Initializr:http://start.spring.io配置好依赖后,下载得到一个demo.zip$

2017-09-03 16:58:20 2483

原创 Node Cookbook 3rd-Packt Publishing 2017 读书笔记

Node Cookbook 3rd-Packt Publishing 2017-ReadingNotes.md调试进程用DevTools调试Node $ mkdir app $ cd app $ npm init -y $ npm install --save express $ node --inspect index.js (6.3.0+,这个调试

2017-09-02 20:13:34 687

原创 信息聚合系统的数据库后台(比如RSS订阅,feedly)应该如何设计?

我想起之前有研究生同学曾经参与一个实习项目,他们用SQL数据库来实现一个RSS订阅聚合系统,结果遇到了扩展性问题:当RSS源达到上千的时候,并发查询性能就已经下降到不可接受。之后我遇到的实用的信息聚合系统:Google阅读器、以及Feedly。Feedly的官方博客里说它的后台是用HBase来存的。我不禁好奇其数据架构设计到底是怎么做的。首先,容易想到的是,为每篇博客文章关联RSS源id(

2017-08-31 10:38:20 1462

原创 系统工程师/软件架构师在对软件系统进行故障排查时的公共技巧(Debugging的艺术)

系统工程师/软件架构师在对软件系统进行故障排查时的公共技巧(Debugging的艺术)从问题的log中使用特殊的关键词搜索Web,比如特殊的error信息,检查此问题是否别人也遇到过,并有解决方案;尝试基于bug的问题表现症状,设计关键词,在开源软件的上游bug数据库中寻找patch每次解决了新的问题,使用本地基于Lucene的索引系统保存,这样当以后如果觉得问题相似时,可以检索一下,

2017-08-31 10:17:31 515

原创 JIT编译器里面的“逃逸分析”(Escape analysis)

逃逸分析是一种编译器后端优化技术,它不是局部优化,而是过程间分析,这意味着它会分析函数调用关系,以判断变量是否“逃逸”出当前作用域范围。对于JIT类语言来说,一般对象总是堆上分配,逃逸分析是否意味着局部的未逃逸的对象可以改成栈上分配呢?不是这样的,至少对于JVM不是这样。另外一个有趣的例子是Go语言,写惯了C/C++语言的代码会发现一个很奇怪的Go语言特性:当你return一个&{...}

2017-08-31 00:39:47 1148

原创 DHT里面Hash算法的设计,及其如何抵御极端情况下的DoS攻击?

DHT里,要存储的数据对象,本身根据其id(或者其内容本身),经过hash运算,映射到一个32位或者64位整数的区间范围。譬如可以使用密码学hash,如MD5、SHA1、乃至SHA256。Cassandra 3.0里使用的是Murmur3(非密码学hash)这里的问题是,既然是hash,就必然存在一种可能性:数据映射的目标区间的分布不均匀。——极端情况下,可能导致大部分数据都被映射到了

2017-08-30 17:55:45 909

原创 Cloud Native时代SaaS类Web应用的后端数据库架构设计:核心概念的简化:主键设计

云计算时代要求偏业务类的SaaS Web应用做到:可伸缩可扩展、高可用高并发。核心在于数据库后端架构设计。怎么做到这一点呢?引入微服务,将原来的单体Web应用拆分为多个分离的服务(实质就是数据库存储层的拆分,分库分表),以及敏捷/精益的项目管理思想(前者在于适应变化保证质量去除冗余,后者在于引入核心度量指标以改善),DevOps(价值有限,今早发布频繁发布)过程管理。而Cloud Native则要

2017-08-30 17:15:13 695 2

原创 MySQL管理之道_ 性能调优、高可用与监控(第2版)-by 贺春畅-读书笔记

MySQL管理之道_ 性能调优、高可用与监控(第2版)-读书笔记MariaDB架构与历史MariaDB:用Percona XtraDB代替InnoDB(前者是后者的增强版,完全兼容后者)新功能:多源复制、基于表的并行复制集成更多存储引擎:Aria(增强版MyISAM)、SphinxSE、TokuDB(可看作ARCHIVE的升级版)、Cassandra、CONNECT、SEQ

2017-08-30 00:43:53 1767

原创 Ceph简介及评论

#分布式文件系统# #OpenStack# Ceph是一个分布式文件系统(RADOS),一个文件,首先按照固定块大小切分为Object,并给予oid(oid的唯一性实际上由客户端提供和保证);oid经过hash“近似均匀”映射到PG。(PG可以理解为DHT里面的vnode)PG再经过一个动态的CRUSH算法映射到物理OSD存储节点。理论上,Ceph还是有缺陷的,譬如hash算法导致数据分布不均匀,

2017-08-29 16:54:04 386

原创 Hadoop权威指南(第4版)-OReilly 2016 读书笔记

Hadoop权威指南(第4版)-OReilly 2016-ReadingNotes.md初识Hadoop关于MapReducemapper和reducercombiner*HDFSp48 Hadoop2: HA,备用namenode2种HA共享存储:NFS过滤器QJM(quorum journal manager)p73 副本怎么放由近到

2017-08-28 13:23:09 3317

原创 Hadoop应用架构-OReilly 2015-读书笔记

Hadoop Application Architectures-OReilly 2015-ReadingNotes.md数据建模p23 HBase基于TTL的旧数据清除(合并到新HFile时跳过)p25 为了能够在Hive外部使用metastore,一个新项目HCatalog启动了数据移动p32 HBase的扫描速度大约是HDFS的1/10-1/8,访问单个记录的

2017-08-28 12:32:15 593

原创 MySQL运维内参_ MySQL、Galera、Inception核心原理与最佳实践 读书笔记

MySQL运维内参_ MySQL、Galera、Inception核心原理与最佳实践点评:看这本书就是想知道MySQL用于互联网行业大并发场景下现在是怎么处理的。讲解MySQL核心存储源码实现原理的部分不细致,MVCC则未涉及。曾经在O'Reilly的高可用MySQL里讲到的MMM、MHA则已经被5.7官方的GTID/Group Replication和Galera Cluster方案代替

2017-08-28 00:25:32 1779 1

原创 Practical Microservices-Packt Publishing(2017) 读书笔记

Practical Microservices-Packt Publishing(2017)-ReadingNotes.md微服务架构介绍boot2docker依赖于VirtualBox?那么docker的图形化界面app呢?docker命令是否自动从hub上下载镜像?Spring Boot:从maven pom.xml文件开始吗?starter项目可以自动生成的吧?定义微

2017-08-22 01:12:00 469

原创 Mastering Microservices with Java-Packt Publishing(2016) 读书笔记

Mastering Microservices with Java-Packt Publishing(2016)-ReadingNotes.mdA Solution Approachignite v. 点燃 ~ your mind as a solution architectmonolithic n. 单一的,整个的 (vs isomorphic)开发环境配置Ne

2017-08-17 01:54:51 389

原创 用NodeJS/express-4.0实现的静态文件服务器(serveStatic插件直接支持HTTP Range请求,因此可用来做mp4流媒体服务器)

var express = require('express'), serveIndex = require('serve-index'), //只能列表目录,不能下载文件? serveStatic = require('serve-static') ; /* $ brew install [email protected] 不使用package.json的依赖安

2017-08-16 23:30:24 4697

原创 实施DevOps/微服务

DevOps的核心在于Delivery。尽早发布,频繁交付。而不是说Dev+Ops,开发人员兼作运维,——后者不是正确的见解。而为了做到“频繁交付”,意味着价值观的改变。DevOps意味着项目参与人员相互之间的信任、客户价值的尽早交付、频繁交付带来的快速迭代,由此需要自动化的测试。DevOps不是一种技巧、技术,而是文化、价值。DevOps属于敏捷(Agile)的其中一支。

2017-08-16 19:20:05 1214

原创 用NodeJS开发云计算时代Web服务的真正技术难点

因为前一阵子做项目用NodeJS/express开发了一个测试服务(代码现已从github删除,无非就是一个查询MySQL的REST/JSON接口的Web服务实现),一些感想:(1)基于NodeJS的Web服务开发实在不要太简单,其url routing、json序列化、express中间件配置,用起来都特别方便。OpenResty的作者春哥非常鄙视Node的嵌套callback的风格

2017-08-15 11:30:18 1438

原创 Log everything in your working time

Log everything in your working time, log everything in your work: code you write, code you review, code you just saw from open source libraries.Sometimes you could add extras: latest tech news,

2017-08-15 00:40:25 353

原创 Apress-Pro Java Clustering and Scalability(2017)读书笔记

Apress-Pro Java Clustering and Scalability_ Building Real-Time Apps with Spring, Cassandra, Redis, WebSocket and RabbitMQ (2017)-ReadingNotes.mdPart 1. Usage(配置环境和部署)Docker 1.13.0+Docker

2017-08-13 23:24:48 889

TCP/IP Sockets in Java, 2rd Edition

Contents Preface xi 1 Introduction 1 1.1 Networks, Packets, and Protocols 1 1.2 About Addresses 4 1.3 About Names 6 1.4 Clients and Servers 6 1.5 What Is a Socket? 7 1.6 Exercises 8 2 Basic Sockets 9 2.1 Socket Addresses 9 2.2 TCP Sockets 15 2.2.1 TCP Client 16 2.2.2 TCP Server 21 2.2.3 Input and Output Streams 25 2.3 UDP Sockets 26 2.3.1 DatagramPacket 27 2.3.2 UDP Client 29 2.3.3 UDP Server 34 2.3.4 Sending and Receiving with UDP Sockets 36 2.4 Exercises 38 3 Sending and Receiving Data 39 3.1 Encoding Information 40 3.1.1 Primitive Integers 40 3.1.2 Strings and Text 45 3.1.3 Bit-Diddling: Encoding Booleans 47 3.2 Composing I/O Streams 48 3.3 Framing and Parsing 49 3.4 Java-Specific Encodings 55 3.5 Constructing and Parsing Protocol Messages 55 3.5.1 Text-Based Representation 58 3.5.2 Binary Representation 61 3.5.3 Sending and Receiving 63 3.6 Wrapping Up 71 3.7 Exercises 71 4 Beyond the Basics 73 4.1 Multitasking 73 4.1.1 Java Threads 74 4.1.2 Server Protocol 76 4.1.3 Thread-per-Client 80 4.1.4 Thread Pool 82 4.1.5 System-Managed Dispatching: The Executor Interface 84 4.2 Blocking and Timeouts 86 4.2.1 accept(), read(), and receive() 87 4.2.2 Connecting and Writing 87 4.2.3 Limiting Per-Client Time 87 4.3 Multiple Recipients 89 4.3.1 Broadcast 90 4.3.2 Multicast 90 4.4 Controlling Default Behaviors 95 4.4.1 Keep-Alive 96 4.4.2 Send and Receive Buffer Size 96 4.4.3 Timeout 97 4.4.4 Address Reuse 97 4.4.5 Eliminating Buffering Delay 98 4.4.6 Urgent Data 98 4.4.7 Lingering after Close 99 4.4.8 Broadcast Permission 99 4.4.9 Traffic Class 100 4.4.10 Performance-Based Protocol Selection 100 4.5 Closing Connections 101 4.6 Applets 107 4.7 Wrapping Up 107 4.8 Exercises 108 5 NIO 109 5.1 Why Do We Need This? 109 5.2 Using Channels with Buffers 112 5.3 Selectors 115 5.4 Buffers in Detail 121 5.4.1 Buffer Indices 121 5.4.2 Buffer Creation 122 5.4.3 Storing and Retrieving Data 124 5.4.4 Preparing Buffers: clear(), flip(), and rewind() 126 5.4.5 Compacting Data in a Buffer 128 5.4.6 Buffer Perspectives: duplicate(), slice(), etc. 129 5.4.7 Character Coding 131 5.5 Stream (TCP) Channels in Detail 132 5.6 Selectors in Detail 135 5.6.1 Registering Interest in Channels 135 5.6.2 Selecting and Identifying Ready Channels 138 5.6.3 Channel Attachments 140 5.6.4 Selectors in a Nutshell 140 5.7 Datagram (UDP) Channels 141 5.8 Exercises 145 6 Under the Hood 147 6.1 Buffering and TCP 150 6.2 Deadlock Danger 152 6.3 Performance Implications 155 6.4 TCP Socket Life Cycle 155 6.4.1 Connecting 156 6.4.2 Closing a TCP Connection 160 6.5 Demultiplexing Demystified 163 6.6 Exercises 165 Bibliography 167 Index 169

2008-11-28

Advanced Data Structures

里面讲述了许多特殊的索引树结构,推荐! Preface page xi 1 Elementary Structures 1 1.1 Stack 1 1.2 Queue 8 1.3 Double-Ended Queue 16 1.4 Dynamical Allocation of Nodes 16 1.5 Shadow Copies of Array-Based Structures 18 2 Search Trees 23 2.1 Two Models of Search Trees 23 2.2 General Properties and Transformations 26 2.3 Height of a Search Tree 29 2.4 Basic Find, Insert, and Delete 31 2.5 Returning fromLeaf to Root 35 2.6 Dealing with Nonunique Keys 37 2.7 Queries for the Keys in an Interval 38 2.8 Building Optimal Search Trees 40 2.9 Converting Trees into Lists 47 2.10 Removing a Tree 48 3 Balanced Search Trees 50 3.1 Height-Balanced Trees 50 3.2 Weight-Balanced Trees 61 3.3 (a, b)- and B-Trees 72 3.4 Red-Black Trees and Trees of Almost Optimal Height 89 3.5 Top-Down Rebalancing for Red-Black Trees 101 3.6 Trees with Constant Update Time at a Known Location 111 3.7 Finger Trees and Level Linking 114 vii 3.8 Trees with Partial Rebuilding: Amortized Analysis 119 3.9 Splay Trees: Adaptive Data Structures 122 3.10 Skip Lists: Randomized Data Structures 135 3.11 Joining and Splitting Balanced Search Trees 143 4 Tree Structures for Sets of Intervals 148 4.1 Interval Trees 148 4.2 Segment Trees 154 4.3 Trees for the Union of Intervals 162 4.4 Trees for Sums of Weighted Intervals 169 4.5 Trees for Interval-Restricted Maximum Sum Queries 174 4.6 Orthogonal Range Trees 182 4.7 Higher-Dimensional Segment Trees 196 4.8 Other Systems of Building Blocks 199 4.9 Range-Counting and the Semigroup Model 202 4.10 kd-Trees and Related Structures 204 5 Heaps 209 5.1 Balanced Search Trees as Heaps 210 5.2 Array-Based Heaps 214 5.3 Heap-Ordered Trees and Half-Ordered Trees 221 5.4 Leftist Heaps 227 5.5 Skew Heaps 235 5.6 Binomial Heaps 239 5.7 Changing Keys in Heaps 248 5.8 Fibonacci Heaps 250 5.9 Heaps of Optimal Complexity 262 5.10 Double-Ended Heap Structures and Multidimensional Heaps 267 5.11 Heap-Related Structures with Constant-Time Updates 271 6 Union-Find and Related Structures 278 6.1 Union-Find: Merging Classes of a Partition 279 6.2 Union-Find with Copies and Dynamic Segment Trees 293 6.3 List Splitting 303 6.4 Problems on Root-Directed Trees 306 6.5 Maintaining a Linear Order 317 7 Data Structure Transformations 321 7.1 Making Structures Dynamic 321 7.2 Making Structures Persistent 330 8 Data Structures for Strings 335 8.1 Tries and Compressed Tries 336 8.2 Dictionaries Allowing Errors in Queries 356 8.3 Suffix Trees 360 8.4 Suffix Arrays 367 9 Hash Tables 374 9.1 Basic Hash Tables and Collision Resolution 374 9.2 Universal Families of Hash Functions 380 9.3 Perfect Hash Functions 391 9.4 Hash Trees 397 9.5 Extendible Hashing 398 9.6 Membership Testers and Bloom Filters 402 10 Appendix 406 10.1 The Pointer Machine and Alternative Computation Models 406 10.2 External Memory Models and Cache-Oblivious Algorithms 408 10.3 Naming of Data Structures 409 10.4 Solving Linear Recurrences 410 10.5 Very Slowly Growing Functions 412 11 References 415 Author Index 441 Subject Index 455

2008-11-28

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除