nomasp

風立ちぬ、いざ生きめやも」

【万字总结】快速排序详解与各种线性时间排序对比

什么是快速排序快速排序简介快速排序(英文名:Quicksort,有时候也叫做划分交换排序)是一个高效的排序算法,由Tony Hoare在1959年发明(1961年公布)。当情况良好时,它可以比主要竞争对手的归并排序和堆排序快上大约两三倍。这是一个分治算法,而且它就在原地排序。所谓原地排序,就是指在...

2015-12-19 21:27:43

阅读数 3863

评论数 5

【万字总结】图解堆算法、链表、栈与队列(多图预警)

堆算法什么是堆堆(heap),是一类特殊的数据结构的统称。它通常被看作一棵树的数组对象。在队列中,调度程序反复提取队列中的第一个作业并运行,因为实际情况中某些时间较短的任务却可能需要等待很长时间才能开始执行,或者某些不短小、但很重要的作业,同样应当拥有优先权。而堆就是为了解决此类问题而设计的数据结...

2015-12-18 08:40:12

阅读数 20409

评论数 13

【万字总结】探讨递归与迭代的区别与联系及如何求解10000的阶层

递归和迭代这两个概念也许很多童鞋依旧是老虎老鼠傻傻分不清楚,下面通过求解斐波那契数来看看它们俩的关系吧。斐波那契数的定义: f0=0 f_0 = 0 f1=1 f_1 = 1 fi=fi−1+fi−2(i>1) f_i = f_{i-1}+f_{i-2} (i > 1) 递...

2015-12-12 11:32:20

阅读数 2974

评论数 2

【万字总结】以插排和分治为例来看如何分析与设计算法

插入排序及其解决思路算法的作用自然不用多说,无论是在校学生,还是已经工作多年,只要想在计算机这条道路走得更远,算法都是必不可少的。就像编程语言中的“Hello World!”程序一般,学习算法一开始学的便是排序算法。排序问题在日常生活中也是很常见的,说得专业点:输入是:n个数的一个序列<a1...

2015-12-11 18:13:04

阅读数 3409

评论数 2

【算法】1 由插入排序看如何分析和设计算法

插入排序及其解决思路算法的作用自然不用多说,无论是在校学生,还是已经工作多年,只要想在计算机这条道路走得更远,算法都是必不可少的。就像编程语言中的“Hello World!”程序一般,学习算法一开始学的便是排序算法。排序问题在日常生活中也是很常见的,说得专业点:输入是:n个数的一个序列<a1...

2015-07-01 13:17:26

阅读数 13293

评论数 29

【算法】8 图文搭配诠释三种链表及其哨兵

三种链表的介绍原谅我拙劣的绘图能力,花了半天终于还是决定从网上找来了这三张图,因为环形链表的弧形箭头难以完美的展现出来。以下3张图片来自Wikipedia。大家看着图片应该也都知道这分别是哪种链表了。那么链表到底是什么呢?它和前面的栈和队列一般,都是基本的数据结构,其中的各个对象按线性顺序排列。大...

2015-06-28 15:17:30

阅读数 5794

评论数 8

【算法】9 散列表【待补充】

上次写了四个多小时,但文章被荡掉了。暂时不想重写,先搁置下来,以后再补充。

2015-06-28 14:51:06

阅读数 1547

评论数 2

【算法】7 分不清栈和队列?一张图给你完整体会

所谓“一图胜千言”,不知道我这张图能够胜几句话呢?今天又看到了“河内塔”的相关资料,也被称为“汉诺塔”等。于是就想到了画出下面这样的图案。

2015-06-20 16:07:55

阅读数 4394

评论数 8

【算法】6 比较排序之外学习新的线性时间排序

回顾比较排序相信阅读过前面5篇博文的童鞋们已经发现了“在排序的最终结果中,各元素的次序依赖于它们之间的比较”。于是乎,这类排序算法被统称为”比较排序“。比较排序是通过一个单一且抽象的比较运算(比如“小于等于”)读取列表元素,而这个比较运算则决定了每两个元素中哪一个应该先出现在最终的排序列表中。声明...

2015-06-11 12:36:30

阅读数 6024

评论数 13

某大学程序设计竞赛

这是博主学校今天举行的小比赛,校内的,主要用来蓝桥杯选拔。时间2个半小时,题目我也懒得在网上搜,是不是学校原创就不知道了,大家可以试试。我才解出6道……1、西岳华山上有一条长阶梯,若每步跨2阶,则最后剩一阶,若每步跨3 阶,则最后剩2阶,若每步跨5阶,则最后剩4阶,若每步跨6阶则最后剩5阶。只有每...

2015-06-06 14:53:38

阅读数 2715

评论数 4

【算法】5 传说中的快排是怎样的,附实现示例

什么是快速排序 快速排序简介 快速排序(英文名:Quicksort,有时候也叫做划分交换排序)是一个高效的排序算法,由Tony Hoare在1959年发明(1961年公布)。当情况良好时,它可以比主要竞争对手的归并排序和堆排序快上大约两三倍。这是一个分治算法,而且它就在原地排序。 所谓原...

2015-06-02 23:02:59

阅读数 12244

评论数 23

【算法】4 五张图带你体会堆算法

什么是堆堆(heap),是一类特殊的数据结构的统称。它通常被看作一棵树的数组对象。在队列中,调度程序反复提取队列中的第一个作业并运行,因为实际情况中某些时间较短的任务却可能需要等待很长时间才能开始执行,或者某些不短小、但很重要的作业,同样应当拥有优先权。而堆就是为了解决此类问题而设计的数据结构。二...

2015-05-31 23:09:31

阅读数 10587

评论数 29

【算法】3 由招聘问题看随机算法

招聘问题我想看我博客的还是学生人群偏多吧,本身很快就要去面试了,在这篇博客的问题中,我们就把自己当作Boss过把瘾。某天,你想雇用一名算法工程师。当然,不可能让你这个Boss亲自去到处练习应聘者,而是选择了中介。雇用中介每天都会给你推荐一个应聘者(PS:还是让自己轻松点,一天只应聘一个人哈)。是个...

2015-05-29 22:22:00

阅读数 4576

评论数 18

【算法】2 由股票收益问题再看分治算法和递归式

回顾分治算法分治算法的英文名叫做“divide and conquer”,它的意思是将一块领土分解为若干块小部分,然后一块块的占领征服,让它们彼此异化。这就是英国人的军事策略,但我们今天要看的是算法。如前所述,分治算法有3步,在上一篇中已有介绍,它们对应的英文名分别是:divide、conquer...

2015-05-27 18:48:43

阅读数 7581

评论数 31

斐波那契数(C/C++,Scheme)

一、背景斐波那契数的定义: f0=0 f_0 = 0 f1=1 f_1 = 1 fi=fi−1+fi−2(i>1) f_i = f_{i-1}+f_{i-2} (i > 1) 二、分析我引用两张表,大家一看便懂。1.递归(factorial 6) (* 6 (factori...

2015-05-25 21:50:52

阅读数 3042

评论数 6

背包问题

#include <cstdio> #include <iostream>using namespace std;#define MAX_N 100 #define MAX_W 1000int n,W;// 从第i个物品开始挑选总重量小于j的部分 int rec(int i...

2015-05-19 16:47:07

阅读数 1922

评论数 0

Fence Repair

#include <cstdio> #include <iostream> #include <algorithm>using namespace std;#define MAX_N 2000typedef long long ll; int N,L[MAX_N...

2015-05-19 15:55:49

阅读数 1957

评论数 0

Saruman's Army

#include <cstdio> #include <iostream> #include <algorithm>using namespace std;#define MAX_N 2000int N,R; int X[MAX_N];void solve() ...

2015-05-19 15:17:11

阅读数 2211

评论数 0

字典序最小问题——Best Cow Line

#include <cstdio> #include <iostream>using namespace std;#define MAX_N 2000int N;char S[MAX_N+1];void solve() { int a=0,b=N-1; whi...

2015-05-19 14:42:08

阅读数 2219

评论数 0

区间调度问题

#include <cstdio> #include <iostream> #include <algorithm>using namespace std;const int MAX_N = 100000;int N,S[MAX_N],T[MAX_N];pair...

2015-05-19 14:28:22

阅读数 1979

评论数 0

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