摘要: 设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的, 阅读全文
posted @ 2017-06-13 14:35 不会就问咯 阅读(244) 评论(0) 推荐(0)
摘要: 分类: 设计模式(21) 分类: 设计模式(21) 目录(?)[+] 目录(?)[+] 目录 创建型 1. Factory Method(工厂方法) 2. Abstract Factory(抽象工厂) 3. Builder(建造者) 4. Prototype(原型) 5. Singleton(单例) 阅读全文
posted @ 2017-06-13 14:33 不会就问咯 阅读(278) 评论(0) 推荐(0)
摘要: 今天依然在放假中,在此将以前在学校写的四叉树的东西拿出来和大家分享。 四叉树索引的基本思想是将地理空间递归划分为不同层次的树结构。它将已知范围的空间等分成四个相等的子空间,如此递归下去,直至树的层次达到一定深度或者满足某种要求后停止分割。四叉树的结构比较简单,并且当空间数据对象分布比较均匀时,具有比 阅读全文
posted @ 2017-06-13 14:30 不会就问咯 阅读(1305) 评论(0) 推荐(0)
摘要: 1、 概述 在进行算法设计时,我们常用的两种线性数据结构是数组和链表。它们各有优缺点。数组特点是元素在内存中紧挨着存储,因而优点是定位快(O(1)),缺点是插入删除慢(O(n));而链表则不同,它通过指针将不同位置的元素链接起来,因而优缺点与数组正好相反:定位慢(O(n)),插入删除快(O(1))。 阅读全文
posted @ 2017-06-13 14:29 不会就问咯 阅读(581) 评论(0) 推荐(0)
摘要: 1、 概述 Trie树,又称字典树,单词查找树或者前缀树,是一种用于快速检索的多叉树结构,如英文字母的字典树是一个26叉树,数字的字典树是一个10叉树。 Trie一词来自retrieve,发音为/tri:/ “tree”,也有人读为/traɪ/ “try”。 Trie树可以利用字符串的公共前缀来节约 阅读全文
posted @ 2017-06-13 14:26 不会就问咯 阅读(707) 评论(0) 推荐(0)
摘要: 1、 概述 并查集(Disjoint set或者Union-find set)是一种树型的数据结构,常用于处理一些不相交集合(Disjoint Sets)的合并及查询问题。 2、 基本操作 并查集是一种非常简单的数据结构,它主要涉及两个基本操作,分别为: A. 合并两个不相交集合 B. 判断两个元素 阅读全文
posted @ 2017-06-13 14:23 不会就问咯 阅读(600) 评论(0) 推荐(0)
摘要: 1、概述 树状数组(binary indexed tree),是一种设计新颖的数组结构,它能够高效地获取数组中连续n个数的和。概括说,树状数组通常用于解决以下问题:数组{a}中的元素可能不断地被修改,怎样才能快速地获取连续几个数的和? 2、树状数组基本操作 传统数组(共n个元素)的元素修改和连续元素 阅读全文
posted @ 2017-06-13 14:22 不会就问咯 阅读(303) 评论(0) 推荐(0)
摘要: 1、 概述 二叉查找树(Binary Search Tree,也叫二叉排序树,即Binary Sort Tree)能够支持多种动态集合操作,它可以用来表示有序集合、建立索引等,因而在实际应用中,二叉排序树是一种非常重要的数据结构。 从算法复杂度角度考虑,我们知道,作用于二叉查找树上的基本操作(如查找 阅读全文
posted @ 2017-06-13 14:20 不会就问咯 阅读(329) 评论(0) 推荐(0)
摘要: 1. 概述 后缀数组是一种解决字符串问题的有力工具。相比于后缀树,它更易于实现且占用内存更少。在实际应用中,后缀数组经常用于解决字符串有关的复杂问题。 本文大部分内容摘自参考资料[1][2]。 2. 后缀数组 2.1 几个概念 (1)后缀数组SA 是一个一维数组,它保存1..n 的某个排列SA[1] 阅读全文
posted @ 2017-06-13 14:19 不会就问咯 阅读(411) 评论(0) 推荐(0)
摘要: 1. 概述 同splay tree一样,treap也是一个平衡二叉树,不过Treap会记录一个额外的数据,即优先级。Treap在以关键码构成二叉搜索树的同时,还按优先级来满足堆的性质。因而,Treap=tree+heap。这里需要注意的是,Treap并不是二叉堆,二叉堆必须是完全二叉树,而Treap 阅读全文
posted @ 2017-06-13 14:18 不会就问咯 阅读(494) 评论(0) 推荐(0)
摘要: 1. 概述 AVL树是最早提出的自平衡二叉树,在AVL树中任何节点的两个子树的高度最大差别为一,所以它也被称为高度平衡树。AVL树得名于它的发明者G.M. Adelson-Velsky和E.M. Landis。AVL树种查找、插入和删除在平均和最坏情况下都是O(log n),增加和删除可能需要通过一 阅读全文
posted @ 2017-06-13 14:17 不会就问咯 阅读(413) 评论(0) 推荐(0)
摘要: 1. 概述 位图(bitmap)是一种非常常用的结构,在索引,数据压缩等方面有广泛应用。本文介绍了位图的实现方法及其应用场景。 2. 位图实现 (1)自己实现 在位图中,每个元素为“0”或“1”,表示其对应的元素不存在或者存在。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 阅读全文
posted @ 2017-06-13 14:16 不会就问咯 阅读(712) 评论(0) 推荐(0)
摘要: 1. 简介 红黑树是一种自平衡二叉查找树。它的统计性能要好于平衡二叉树(AVL树),因此,红黑树在很多地方都有应用。在C++ STL中,很多部分(目前包括set, multiset, map, multimap)应用了红黑树的变体(SGI STL中的红黑树有一些变化,这些修改提供了更好的性能,以及对 阅读全文
posted @ 2017-06-13 14:15 不会就问咯 阅读(184) 评论(0) 推荐(0)
摘要: 1、概述 线段树,也叫区间树,是一个完全二叉树,它在各个节点保存一条线段(即“子数组”),因而常用于解决数列维护问题,它基本能保证每个操作的复杂度为O(lgN)。 2、线段树基本操作 线段树的基本操作主要包括构造线段树,区间查询和区间修改。 (1) 线段树构造 首先介绍构造线段树的方法:让根节点表示 阅读全文
posted @ 2017-06-13 14:14 不会就问咯 阅读(376) 评论(0) 推荐(0)
摘要: 1. 概述 堆(也叫优先队列),是一棵完全二叉树,它的特点是父节点的值大于(小于)两个子节点的值(分别称为大顶堆和小顶堆)。它常用于管理算法执行过程中的信息,应用场景包括堆排序,优先队列等。 2. 堆的基本操作 堆是一棵完全二叉树,高度为O(lg n),其基本操作至多与树的高度成正比。在介绍堆的基本 阅读全文
posted @ 2017-06-13 14:11 不会就问咯 阅读(546) 评论(0) 推荐(0)
摘要: A*算法 是一种启发式的搜索算法。 了解BFS、DFS或者Dijkstra算法的人应该知道。这些算法都是一种向四周盲目式搜索的方法。 启发式搜索: 启发式搜索就是在状态空间中的搜索对每一个搜索的位置进行评估,得到最好的位置,再从这个位置进行搜索直到目标。这样可以省略大量无畏的搜索路径,提到了效率。在 阅读全文
posted @ 2017-06-13 14:09 不会就问咯 阅读(531) 评论(0) 推荐(0)
摘要: 我想很多人第一次学习递归的时候,老师或者书本上可能会举汉诺塔的例子。 但是今天,我们讨论的重点不是简单的汉诺塔算法,而是三柱汉诺塔的延伸。先来看看经典的三柱汉诺塔。 一、三柱汉诺塔(Hanoi_Three): 我想大家对于三柱汉诺塔的理解以及算法的实现应该是很熟练了。 我在这里简单的过一遍三柱汉诺塔 阅读全文
posted @ 2017-06-13 14:09 不会就问咯 阅读(1260) 评论(0) 推荐(0)
摘要: 这篇文章是David MacKay利用信息论,来对快排、堆排的本质差异导致的性能差异进行的比较。 信息论是非常强大的,它并不只是一个用来分析理论最优决策的工具。 从信息论的角度来分析算法效率是一件很有趣的事,它给我们分析排序算法带来了一种新的思路。 运用了信息论的概念,我们很容易理解为什么快排的速度 阅读全文
posted @ 2017-06-13 14:08 不会就问咯 阅读(628) 评论(0) 推荐(0)
摘要: 本文主要讲述KMP已经KMP的一种改进方法。若发现不正确的地方,欢迎交流指出,谢谢! KMP算法的基本思想: KMP的算法流程: 每当一趟匹配过程中出现字符比较不等时,不需回溯 i 指针,而是利用已经得到的部分匹配的结果将模式向右滑动尽可能远的一段距离后,继续进行比较。 设S为目标串,T为模式串,设 阅读全文
posted @ 2017-06-13 14:07 不会就问咯 阅读(1843) 评论(0) 推荐(0)
摘要: 摘要 本文论述了在算法分析领域一个重要问题——时间复杂度分析的基础内容。本文将首先明确时间复杂度的意义,而后以形式化方式论述其在数学上的定义及相关推导。从而帮助大家从本质上认清这个概念。前言 通常,对于一个给定的算法,我们要做 两项分析。第一是从数学上证明算法的正确性,这一步主要用到形式化证明的方法 阅读全文
posted @ 2017-06-13 14:06 不会就问咯 阅读(536) 评论(0) 推荐(0)
摘要: 目录 0. 前言 1. 猜数字 2. 称球 3. 排序 3.1 为什么堆排比快排慢 3.2 为什么快排其实也不是那么快 3.3 基排又为什么那么快呢 4. 信息论!信息论? 5. 小结 0. 前言 知道这个理论是在TopLanguage上的一次讨论,先是g9转了David MacKay的一篇文章,然 阅读全文
posted @ 2017-06-13 14:05 不会就问咯 阅读(356) 评论(0) 推荐(0)
摘要: 0、摘要 今天看到吉日嘎拉的一篇关于管理软件中信息加密和安全的文章,感觉非常有实际意义。文中作者从实践经验出发,讨论了信息管理软件中如何通过哈希和加密进行数据保护。但是从文章评论中也可以看出很多朋友对这个方面一些基本概念比较模糊,这样就容易“照葫芦画瓢”,不能根据自身具体情况灵活选择和使用各种哈希和 阅读全文
posted @ 2017-06-13 14:05 不会就问咯 阅读(828) 评论(0) 推荐(0)
摘要: R树在数据库等领域做出的功绩是非常显著的。它很好的解决了在高维空间搜索等问题。举个R树在现实领域中能够解决的例子吧:查找20英里以内所有的餐厅。如果没有R树你会怎么解决?一般情况下我们会把餐厅的坐标(x,y)分为两个字段存放在数据库中,一个字段记录经度,另一个字段记录纬度。这样的话我们就需要遍历所有 阅读全文
posted @ 2017-06-13 14:04 不会就问咯 阅读(284) 评论(0) 推荐(0)
摘要: 【简介】 树形结构是一类重要的非线性数据结构,其中以树和二叉树最为常用。 二叉树是每个结点最多有两个子树的有序树。通常子树的根被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用作二叉查找树和二叉堆或是二叉排序树。二叉树的每个结点至多只有二棵子树(不存 阅读全文
posted @ 2017-06-13 14:01 不会就问咯 阅读(1054) 评论(0) 推荐(0)
摘要: 一、定义与性质 定义 二叉排序树(Binary Sort Tree)又称二叉查找(搜索)树(Binary Search Tree)。其定义为:二叉排序树或者是空树. 性质 (1) 二叉排序树中任一结点x,其左(右)子树中任一结点y(若存在)的关键字必小(大)于x的关键字。 (2) 二叉排序树中,各结 阅读全文
posted @ 2017-06-13 14:00 不会就问咯 阅读(4362) 评论(0) 推荐(0)
摘要: 教你透彻了解红黑树 作者:July、saturnman 2010年12月29日 作者:July、saturnman 2010年12月29日 本文参考:Google、算法导论、STL源码剖析、计算机程序设计艺术。 推荐阅读: 一、红黑树的介绍 先来看下算法导论对R-B Tree的介绍:红黑树,一种二叉 阅读全文
posted @ 2017-06-13 13:59 不会就问咯 阅读(373) 评论(0) 推荐(0)
摘要: 视觉直观感受若干常用排序算法 1 快速排序 介绍: 快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要Ο(n log n)次比较。在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他Ο(n log n) 算法更快,因为它的内部循环(inne 阅读全文
posted @ 2017-06-13 13:58 不会就问咯 阅读(433) 评论(0) 推荐(0)
摘要: 本文转自:http://blog.csdn.net/zheng0518/article/details/8882394 按位与的知识 n&(n-1)作用:将n的二进制表示中的最低位为1的改为0,先看一个简单的例子:n = 10100(二进制),则(n-1) = 10011 ==》n&(n-1) = 阅读全文
posted @ 2017-06-13 10:02 不会就问咯 阅读(1533) 评论(0) 推荐(0)
摘要: 解析:几种常见的排序算法对比: 1、常见数据结构 线性:数组,链表,队列,堆栈,块状数组(数组+链表),hash表,双端队列,位图(bitmap) 树:堆(大顶堆、小顶堆),trie树(字母树or字典树),后缀树,后缀树组,二叉排序/查找树,B+/B-,AVL树,Treap,红黑树,splay树,线 阅读全文
posted @ 2017-06-13 08:30 不会就问咯 阅读(265) 评论(0) 推荐(0)