
算法
文章平均质量分 88
本专栏提供由基础算法到高级算法的一系列博客文章。
nomasp
Android 工程师
展开
-
图论算法 有图有代码 万字总结
图的定义背景知识看到这篇博客相信一开始映入读者眼帘的就是下面这幅图了,这就是传说中的七桥问题(哥尼斯堡桥问题)。在哥尼斯堡,普雷格尔河环绕着奈佛夫岛(图中的A岛)。这条河将陆地分成了下面4个区域,该处还有着7座连接这些陆地的桥梁。问题是如何从某地出发,依次沿着各个桥,必须经过每座桥且每座桥只能经过1次,最终回到原地。不知道这个问题且好奇的童鞋现在肯定在忙活着找出来这道题的结果了。是伟大的数学家欧拉(原创 2015-05-18 20:55:46 · 28226 阅读 · 31 评论 -
【算法】8 图文搭配诠释三种链表及其哨兵
三种链表的介绍原谅我拙劣的绘图能力,花了半天终于还是决定从网上找来了这三张图,因为环形链表的弧形箭头难以完美的展现出来。以下3张图片来自Wikipedia。大家看着图片应该也都知道这分别是哪种链表了。那么链表到底是什么呢?它和前面的栈和队列一般,都是基本的数据结构,其中的各个对象按线性顺序排列。大家应该注意到了图中的大黑点,有些C/C++编程基础的同学肯定能够猜到链表是通过各个对象里的指针来指向下一原创 2015-06-28 15:17:30 · 6883 阅读 · 8 评论 -
【算法】7 分不清栈和队列?一张图给你完整体会
所谓“一图胜千言”,不知道我这张图能够胜几句话呢?今天又看到了“河内塔”的相关资料,也被称为“汉诺塔”等。于是就想到了画出下面这样的图案。原创 2015-06-20 16:07:55 · 4946 阅读 · 8 评论 -
【算法】6 比较排序之外学习新的线性时间排序
回顾比较排序相信阅读过前面5篇博文的童鞋们已经发现了“在排序的最终结果中,各元素的次序依赖于它们之间的比较”。于是乎,这类排序算法被统称为”比较排序“。比较排序是通过一个单一且抽象的比较运算(比如“小于等于”)读取列表元素,而这个比较运算则决定了每两个元素中哪一个应该先出现在最终的排序列表中。声明:下面通过在维基百科中找到的非常完美的图示来介绍一系列比较排序。插入排序在该系列的【算法】1中我们便介绍原创 2015-06-11 12:36:30 · 6616 阅读 · 13 评论 -
【算法】5 传说中的快排是怎样的,附实现示例
什么是快速排序快速排序简介快速排序(英文名:Quicksort,有时候也叫做划分交换排序)是一个高效的排序算法,由Tony Hoare在1959年发明(1961年公布)。当情况良好时,它可以比主要竞争对手的归并排序和堆排序快上大约两三倍。这是一个分治算法,而且它就在原地排序。所谓原地排序,就是指在原来的数据区域内进行重排,就像插入排序一般。而归并排序就不一样,它需要额外的空间来进行...原创 2015-06-02 23:02:59 · 13096 阅读 · 22 评论 -
【算法】4 五张图带你体会堆算法
什么是堆堆(heap),是一类特殊的数据结构的统称。它通常被看作一棵树的数组对象。在队列中,调度程序反复提取队列中的第一个作业并运行,因为实际情况中某些时间较短的任务却可能需要等待很长时间才能开始执行,或者某些不短小、但很重要的作业,同样应当拥有优先权。而堆就是为了解决此类问题而设计的数据结构。二叉堆是一种特殊的堆,二叉堆是完全二叉树或者近似完全二叉树,二叉堆满足堆特性:父节点的键值总是保持固定的序原创 2015-05-31 23:09:31 · 11475 阅读 · 29 评论 -
【算法】3 由招聘问题看随机算法
招聘问题我想看我博客的还是学生人群偏多吧,本身很快就要去面试了,在这篇博客的问题中,我们就把自己当作Boss过把瘾。某天,你想雇用一名算法工程师。当然,不可能让你这个Boss亲自去到处练习应聘者,而是选择了中介。雇用中介每天都会给你推荐一个应聘者(PS:还是让自己轻松点,一天只应聘一个人哈)。是个地球人都知道,你必须要给中介付一小笔钱。然后如果你雇用了一个应聘者则需要更多的钱,一来你要解雇现有的算法原创 2015-05-29 22:22:00 · 5348 阅读 · 18 评论 -
【算法】2 由股票收益问题再看分治算法和递归式
回顾分治算法分治算法的英文名叫做“divide and conquer”,它的意思是将一块领土分解为若干块小部分,然后一块块的占领征服,让它们彼此异化。这就是英国人的军事策略,但我们今天要看的是算法。如前所述,分治算法有3步,在上一篇中已有介绍,它们对应的英文名分别是:divide、conquer、combine。接下来我们通过多个小算法来深化对分治算法的理解。二分查找算法问题描述:在已排序的数组A原创 2015-05-27 18:48:43 · 9263 阅读 · 17 评论 -
【算法】1 由插入排序看如何分析和设计算法
插入排序及其解决思路算法的作用自然不用多说,无论是在校学生,还是已经工作多年,只要想在计算机这条道路走得更远,算法都是必不可少的。就像编程语言中的“Hello World!”程序一般,学习算法一开始学的便是排序算法。排序问题在日常生活中也是很常见的,说得专业点:输入是:n个数的一个序列<a1,a2,...,an−1,an><a_1,a_2,...,a_{n-1},a_n> 输出是:这n个数的一个全原创 2015-07-01 13:17:26 · 14103 阅读 · 13 评论