数据结构与算法
文章平均质量分 88
King-Blog
选择了技术这条路,就不能怕艰苦。骐骥一跃,不能十步;驽马十驾,功在不舍!
展开
-
算法的力量
算法是计算机科学领域最重要的基石之一,但却受到了国内一些程序员的冷落。许多学生看到一些公司在招聘时要求的编程语言五花八门,就产生了一种误解,认为学计算机就是学各种编程语言,或者认为,学习最新的语言、技术、标准就是最好的铺路方法。其实,大家被这些公司误导了。编程语言虽然该学,但是学习计算机算法和理论更重要,因为计算机语言和开发平台日新月异,但万变不离其宗的是那些算法和理论,例如数据结构、算法、编译原转载 2015-10-26 12:45:09 · 578 阅读 · 0 评论 -
浅谈算法和数据结构: 十二 无向图相关算法基础
从这篇文章开始介绍图相关的算法,这也是Algorithms在线课程第二部分的第一次课程笔记。图的应用很广泛,也有很多非常有用的算法,当然也有很多待解决的问题,根据性质,图可以分为无向图和有向图。本文先介绍无向图,后文再介绍有向图。之所以要研究图,是因为图在生活中应用比较广泛:无向图图是若干个顶点(Vertices)和边(Edges)相互连接组成的。边仅由两个翻译 2015-12-15 13:49:56 · 431 阅读 · 0 评论 -
浅谈算法和数据结构: 十一 哈希表
在前面的系列文章中,依次介绍了基于无序列表的顺序查找,基于有序数组的二分查找,平衡查找树,以及红黑树,下图是他们在平均以及最差情况下的时间复杂度:可以看到在时间复杂度上,红黑树在平均情况下插入,查找以及删除上都达到了lgN的时间复杂度。那么有没有查找效率更高的数据结构呢,答案就是本文接下来要介绍了散列表,也叫哈希表(Hash Table)什么是哈希表哈希表就翻译 2015-12-15 13:50:44 · 808 阅读 · 0 评论 -
网络爬虫的实现
作者:Gupta, P. ; Johari, K. ; Linagay's Univ., India 文章发表在: Emerging Trends in Engineering and Technology (ICETET), 2009 2nd International Conference on pages 838~844摘要-万维网是一个通过H转载 2016-01-11 17:02:45 · 1834 阅读 · 0 评论 -
设计模式 (持续更新)
1、工厂模式1)优点:统一管理对象的实例化。大规模的企业程序里要创建成千上万个对象,每个都去new,程序的业务逻辑就很混乱,统一由工厂创建,就比清晰。如果对象的初始化的过程很长很复杂,放在构造器中是很危险的,就像很多鸡蛋放到一个篮子里。所以要把对象的创建过程抽象独立出来。工厂就是你要什么去到工厂里拿就好了,工厂负责生产,你除了使用什么都不用管,小程序你看不出优势来,打个比方说如果1原创 2016-04-02 17:03:23 · 322 阅读 · 0 评论 -
我的算法学习之路
关于严格来说,本文题目应该是我的数据结构和算法学习之路,但这个写法实在太绕口——况且CS中的算法往往暗指数据结构和算法(例如算法导论指的实际上是数据结构和算法导论),所以我认为本文题目是合理的。这篇文章讲了什么?我这些年学习数据结构和算法的总结。一些不错的算法书籍和教程。算法的重要性。初学第一次接触数据结构是在大二下学期的数据结构课程。然而这门课程并没有让我转载 2016-03-22 23:05:35 · 719 阅读 · 0 评论 -
算法的上帝——Donald E.Knuth
开始介绍前先膜拜之~密尔沃基市,是美国威斯康辛州最大的城市。1938年1月10日,圣诞刚过不久,密尔沃基市民像往常一样平静地生活着。咖啡店里,有人在议论着罗斯 福总统的救市新政策,有人在议论着到底该不该限制公民持枪。而更多的人呢,则一边品尝着密尔沃基闻名全国的啤酒,一边听着广播里面的实时战况:侵华日军登 陆青岛了。谁也没有想到,这个平静的日子将载入这座城市的史册。这天,密尔沃基路德教会高中转载 2015-12-19 23:21:56 · 795 阅读 · 0 评论 -
遗传算法
from http://blog.sina.com.cn/s/blog_4b837cbf010008rm.html这两天在本部做项目,到现在脑子还是一头雾水,不知如何进入。 开会后,分配了“遗传算法”,好歹也是咱数据挖掘的兄弟,那本书来研究研究。 学到了点小小小小的意思,放到这,千万别忘了。 遗传算法(Genetic A原创 2016-05-05 23:23:34 · 42658 阅读 · 4 评论 -
数据挖掘&机器学习
一、数据挖掘&机器学习最大熵学习笔记(零)目录和引言最大熵学习笔记(一)预备知识最大熵学习笔记(二)最大熵原理最大熵学习笔记(三)最大熵模型最大熵学习笔记(四)模型求解最大熵学习笔记(五)最优化算法最大熵学习笔记(六)优缺点分析Sparse Filtering 学习笔记(一)网络结构与特征矩阵Sparse Filtering 学习笔记原创 2016-04-22 19:54:32 · 456 阅读 · 0 评论 -
浅谈算法和数据结构: 十 平衡查找树之B树
前面讲解了平衡查找树中的2-3树以及其实现红黑树。2-3树种,一个节点最多有2个key,而红黑树则使用染色的方式来标识这两个key。维基百科对B树的定义为“在计算机科学中,B树(B-tree)是一种树状数据结构,它能够存储数据、对其进行排序并允许以O(log n)的时间复杂度运行进行查找、顺序读取、插入和删除的数据结构。B树,概括来说是一个节点可以拥有多于2个子节点的二叉查找树。与自平衡二翻译 2015-12-15 13:49:07 · 586 阅读 · 2 评论 -
浅谈算法和数据结构: 八 平衡查找树之2-3树
前面介绍了二叉查找树(Binary Search Tree),他对于大多数情况下的查找和插入在效率上来说是没有问题的,但是他在最差的情况下效率比较低。本文及后面文章介绍的平衡查找树的数据结构能够保证在最差的情况下也能达到lgN的效率,要实现这一目标我们需要保证树在插入完成之后始终保持平衡状态,这就是平衡查找树(Balanced Search Tree)。在一棵具有N 个节点的树中,我们希望该树翻译 2015-12-15 13:47:27 · 273 阅读 · 0 评论 -
浅谈算法和数据结构: 六 符号表及其基本实现
前面几篇文章介绍了基本的排序算法,排序通常是查找的前奏操作。从本文开始介绍基本的查找算法。在介绍查找算法,首先需要了解符号表这一抽象数据结构,本文首先介绍了什么是符号表,以及这一抽象数据结构的的API,然后介绍了两种简单的符号表的实现方式。一符号表在开始介绍查找算法之前,我们需要定义一个名为符号表(Symbol Table)的抽象数据结构,该数据结构类似我们再C#中使用的D翻译 2015-12-15 13:45:27 · 282 阅读 · 0 评论 -
浅谈算法和数据结构: 七 二叉查找树
前文介绍了符号表的两种实现,无序链表和有序数组,无序链表在插入的时候具有较高的灵活性,而有序数组在查找时具有较高的效率,本文介绍的二叉查找树(Binary Search Tree,BST)这一数据结构综合了以上两种数据结构的优点。二叉查找树具有很高的灵活性,对其优化可以生成平衡二叉树,红黑树等高效的查找和插入数据结构,后文会一一介绍。一 定义二叉查找树(Binary S翻译 2015-12-15 13:46:21 · 350 阅读 · 0 评论 -
浅谈算法和数据结构: 九 平衡查找树之红黑树
前面一篇文章介绍了2-3查找树,可以看到,2-3查找树能保证在插入元素之后能保持树的平衡状态,最坏情况下即所有的子节点都是2-node,树的高度为lgN,从而保证了最坏情况下的时间复杂度。但是2-3树实现起来比较复杂,本文介绍一种简单实现2-3树的数据结构,即红黑树(Red-Black Tree)定义红黑树的主要是像是对2-3查找树进行编码,尤其是对2-3查找树中的3-node翻译 2015-12-15 13:48:16 · 302 阅读 · 2 评论 -
浅谈算法和数据结构: 一 栈和队列
最近晚上在家里看Algorithems,4th Edition,我买的英文版,觉得这本书写的比较浅显易懂,而且“图码并茂”,趁着这次机会打算好好学习做做笔记,这样也会印象深刻,这也是写这一系列文章的原因。另外普林斯顿大学在Coursera 上也有这本书同步的公开课,还有另外一门算法分析课,这门课程的作者也是这本书的作者,两门课都挺不错的。计算机程序离不开算法和数据结构,本文简单介绍栈(St翻译 2015-12-15 13:41:22 · 327 阅读 · 0 评论 -
浅谈算法和数据结构: 二 基本排序算法
本篇开始学习排序算法。排序与我们日常生活中息息相关,比如,我们要从电话簿中找到某个联系人首先会按照姓氏排序、买火车票会按照出发时间或者时长排序、买东西会按照销量或者好评度排序、查找文件会按照修改时间排序等等。在计算机程序设计中,排序和查找也是最基本的算法,很多其他的算法都是以排序算法为基础,在一般的数据处理或分析中,通常第一步就是进行排序,比如说二分查找,首先要对数据进行排序。在Donald翻译 2015-12-15 13:40:30 · 330 阅读 · 0 评论 -
浅谈算法和数据结构: 三 合并排序
合并排序,顾名思义,就是通过将两个有序的序列合并为一个大的有序的序列的方式来实现排序。合并排序是一种典型的分治算法:首先将序列分为两部分,然后对每一部分进行循环递归的排序,然后逐个将结果进行合并。 合并排序最大的优点是它的时间复杂度为O(nlgn),这个是我们之前的选择排序和插入排序所达不到的。他还是一种稳定性排序,也就是相等的元素在序列中的相对位置在排序前后不会发生变化。他的唯一翻译 2015-12-15 13:42:41 · 360 阅读 · 0 评论 -
浅谈算法和数据结构: 四 快速排序
上篇文章介绍了时间复杂度为O(nlgn)的合并排序,本篇文章介绍时间复杂度同样为O(nlgn)但是排序速度比合并排序更快的快速排序(Quick Sort)。快速排序是20世纪科技领域的十大算法之一 ,他由C. A. R. Hoare于1960年提出的一种划分交换排序。快速排序也是一种采用分治法解决问题的一个典型应用。在很多编程语言中,对数组,列表进行的非稳定排序在内部实翻译 2015-12-15 13:43:56 · 379 阅读 · 0 评论 -
浅谈算法和数据结构: 五 优先级队列与堆排序
在很多应用中,我们通常需要按照优先级情况对待处理对象进行处理,比如首先处理优先级最高的对象,然后处理次高的对象。最简单的一个例子就是,在手机上玩游戏的时候,如果有来电,那么系统应该优先处理打进来的电话。在这种情况下,我们的数据结构应该提供两个最基本的操作,一个是返回最高优先级对象,一个是添加新的对象。这种数据结构就是优先级队列(Priority Queue) 。本文首先介绍优先级队翻译 2015-12-15 13:44:45 · 282 阅读 · 0 评论 -
用遗传算法走迷宫 [Java语言实现]
通过遗传算法走迷宫。虽然图1和图2均成功走出迷宫,但是图1比图2的路径长的多,且复杂,遗传算法可以计算出有多少种可能性,并选择其中最简洁的作为运算结果。示例图1:示例图2:实现代码:import java.util.ArrayList;import java.util.Collections;import java.util.原创 2016-05-22 22:30:07 · 1101 阅读 · 0 评论