紫书
chudongfang2015
开心开心!!!!!!
展开
-
紫书_第八章_高效算法设计_8.2.1——归并排序
归并排序是利用分治的思想进行排序分为三步:1.划分问题2.递归求解3.合并问题来看代码:#include#include#include#include#include #include #define INF (1ll<<60)-1using namespace std;void merge_sort(int A[],int x,int y,in原创 2016-06-05 10:29:07 · 675 阅读 · 0 评论 -
紫书_第八章_高效算法设计_8.2.2——快速排序
其分为三个步骤:1.划分问题:把数组的各个元素重排后分成左右两部分,左边始终小于key,右边大于key。2.递归求解:把左右两部分分别排序。3.合并问题:其不用合并,因为此时数组已经有序。来看代码:/************************************************************************* > File Name: 11原创 2016-06-15 17:18:05 · 567 阅读 · 0 评论 -
紫书_第八章_高效算法设计_8.2.3——二分查找
二分查找排序完后利用二分查找可以高效完成数据的查找,二分查找只适用于有序数列,时间复杂度为O(log(n))。其采用折中法,尽量找中间数进行判断,这是最高效的一种查找方法 来看具体代码:/************************************************************************* > File Name: 1166.cpp原创 2016-06-15 18:58:40 · 597 阅读 · 0 评论 -
紫书_第八章_高效算法设计_8.3.1——棋盘覆盖问题
分治——棋盘覆盖问题在一个2k x 2k ( 即:2^k x 2^k )个方格组成的棋盘中,恰有一个方格(黑)与其他方格(白)不同,称该方格为一特殊方格,且称该棋盘为一特殊棋盘。在棋盘覆盖问题中,要用图示的4种不同形态的L型骨牌覆盖给定的特殊棋盘上除特殊方格以外的所有方格,且任何2个L型骨牌不得重叠覆盖。 这里我们用分治法解决该问题。分治法是把一个规模很大的问题分原创 2016-06-15 19:47:18 · 659 阅读 · 0 评论 -
紫书_第八章_高效算法设计_8.3.2——循环日程表问题
循环日程表问题n=2^k个运动员进行网球循环赛,需要设计比赛日程表。每个选手必须与其他n-1选手各赛一次;每个选手一天只能赛一次;循环赛一共进行了n-1天,按此要求设计一张比赛日程表,该表有n行和n-1列,第i行j列为第i个选手第j天遇到的选手。初看此题,感觉无法下手,因为没有任何直接可用的算法和数据结构仔细分析,可以发现,将问题进行分解,能找出规律。当n=1时,共有2个球队参赛,一天就可以比完。...原创 2016-06-15 22:49:28 · 801 阅读 · 2 评论 -
紫书_第八章_高效算法设计_8.3.3——巨人与鬼
巨人和鬼一组n个巨人正与n个鬼进行战斗,每个巨人的武器是一个质子炮, 它可以把一串质子流射中鬼而把鬼消灭。质子流沿直线行进,在击中鬼时就终止。巨人决定采取下述策略。他们寻找鬼配对,以形成n个巨人─鬼对,。然后每个巨人同时向他选取的鬼射出一串质子流。我们知道,让质子流互相交叉是很危险的。因此巨人选择的配对方式应该使质子流都不会交叉。假定每个巨人和每个鬼的位置都是平面上的一个固定点,并且没有三个位原创 2016-06-17 20:20:03 · 2388 阅读 · 0 评论