《算法导论》
文章平均质量分 75
Flammable_ice
需善问,不惧问,恐无解
展开
-
常见算法在实际项目中的应用
转自:常见算法在实际项目中的应用近日Emanuele Viola在Stackexchange上提了这样的一个问题,他希望有人能够列举一些目前软件、硬件中正在使用的算法的实际案例来证明算法的重要性,对于大家可能给到的回答,他还提出了几点要求:使用这些算法的软件或者硬件应该是被广泛应用的;例子需要具体,并给出确切的系统、算法的引用地址;在经典的本科生或者博士的课程中应该教过这些算法或者转载 2017-04-13 08:28:16 · 1486 阅读 · 0 评论 -
最大最小值以及前驱后继操作最坏情况都为O(1)的顺序统计树
改进的顺序统计树。原创 2014-07-08 19:34:38 · 2089 阅读 · 0 评论 -
Treap树
学习过程中的自己写的Treap树的代码以及算法分析。原创 2014-07-04 16:30:32 · 1203 阅读 · 0 评论 -
AVL树
在《算法导论》第12和13章为基础上实现了AVL树,关键部分有注释。原创 2014-07-03 12:01:15 · 1373 阅读 · 0 评论 -
算法导论第三十(30)章多项式与快速傅里叶变换
主要是算法导论上的FFT笔记和作业题。原创 2014-04-22 17:58:59 · 9793 阅读 · 0 评论 -
算法导论第三十一(31)章数论算法
本文简要的总结了 数论算法的一些概念和相关代码以及《算法导论》书上的一些题目的解决方法。原创 2014-03-24 19:40:50 · 26159 阅读 · 4 评论 -
红黑树上的连接操作
红黑树的连接操作。原创 2014-07-01 13:44:55 · 2792 阅读 · 0 评论 -
Josephus排列
约瑟夫排列原创 2014-07-19 21:47:39 · 2185 阅读 · 0 评论 -
算法导论第十四章数据结构的扩张
《算法导论》14数据结构的扩张原创 2014-07-09 17:33:13 · 6316 阅读 · 2 评论 -
最大重叠点
在红黑树基础上利用区间树与顺序统计树来求最大重叠点,就是被最多数目区间覆盖的那个点。原创 2014-07-18 11:33:13 · 2346 阅读 · 0 评论 -
用二叉查找树实现持久动态集合
实现持久动态集合的方式。算法导论上面的问题。代码完全是自己写的。原创 2014-06-29 10:45:02 · 1811 阅读 · 0 评论 -
不带父结点的红黑树实现
红黑树不带父结点实现原创 2014-06-25 22:57:21 · 1417 阅读 · 0 评论 -
确定一组矩形是否有两个重叠的算法
判断矩形重叠是否存在,在VLSI数据库有应用。原创 2014-07-15 23:03:48 · 4406 阅读 · 1 评论 -
算法导论第十一(11)章散列(Hash)表
11.1直接寻址表关键字集合U = { 0, 1, ..., m - 1 },实际的关键字集合K。用一个数组T[0..m - 1],其中每个位置对应U中的一个关键字k。把关键字k映射到槽T(k)上的过程称为散列。散表表仅支持INSERT、SEARCH、DELETE操作。11.1-1假设一动态集合S用一个长度为m的直接寻址表T表示。请给出一个查找S中最大元素的过程。你所给的过原创 2014-03-16 18:26:57 · 7627 阅读 · 0 评论 -
大整数的加减乘除
多项式的加减乘除可以利用多项式的加减乘除进行运算,所以以下程序采用了多项式的加减乘除。多项式运算已经在《算法导论》第30章有简要的介绍,具体的请参考数学书。大整数加法:(利用书上公式轻松得出)//多项式加法-大数加法#include #include using namespace std;#define m1 4#define m2 5//a[0]=x^0 a[1]=x^1.原创 2014-04-28 10:52:45 · 2400 阅读 · 0 评论 -
算法导论第十章基本数据结构
10.1栈与队列(1) 栈概念定义:栈属于动态集合,采用先进后出策略(LIFO)。基本操作是压入(PUSH)和弹出(POP)。如果s.top=0,表示栈空,如果试图对空栈进行POP操作会发生下溢(underflow)。如果s.top>n,表示栈满,如果进行PUSH操作会发生上溢(overflow)。基本代码://基本的栈操作#include #include using na原创 2014-02-14 16:58:26 · 5455 阅读 · 2 评论 -
利用动态规划解决实际问题之多次兑换获取最大外汇收益
动态规划问题之多次兑换货币获取最大收益实例原创 2014-07-26 13:48:27 · 6397 阅读 · 1 评论 -
算法导论第十二(12)章 二叉查找树
12.1 二叉查找树原创 2014-06-06 15:11:06 · 8281 阅读 · 1 评论 -
常见数据结构应用场景
通用数据结构可以简单的按照速度将通用数据结构划分为:数组和链表(最慢),树(较快),哈希表(最快)。增、删、改、查是四大常见操作,不过其实可以浓缩为两个操作:增和查。删除操作和和修改操作都是建立在查找操作上的,所以完美的数据结构应该是具有较高的插入效率和查找效率。通用数据结构关系可以根据下图选择合适的通用数据结构:数组使用场景数组在以下三个情转载 2017-04-13 07:42:17 · 12556 阅读 · 0 评论 -
算法导论第13(十三)章红黑树
红黑树是一般的二叉查找树的一种较为”平衡的“原创 2014-06-22 18:33:35 · 9781 阅读 · 8 评论 -
算法导论第七章课后答案
7.1-1 参照图7-1的方法,说明PARTITION在数组A={13,9,9,5,12,8,7,4,21,2,6,11}上的操作过程。A={13,19,9,5,12,8,7,4,21,2,6,11} ={13,19,9,5,12,8,7,4,21,2,6,11} ={13,19,9,5,12,8,7,4,21,2,6,11} ={9,19,13,5,12,8,7,4,2原创 2014-01-09 19:55:00 · 14940 阅读 · 6 评论 -
动态规划之最长回文子序列
第三版《算法导论》动态规划新增题目之求最长回文子序列。只要能看到书中LCS代码,这个问题就能解决。原创 2014-08-09 16:39:33 · 4397 阅读 · 0 评论 -
动态规划之投资策略规划
你所掌握的算法知识帮助你从Acme计算机公司获得了一份令人兴奋的工作,签约奖金1万美元。你决定利用这笔钱进行投资,目标是10年后获得最大回报。你决定请Amalgamated投资公司管理你的投资,该公司的投资回报规则如下。该公司提供n种不同的投资,从1~n编号。在第j年年底,比你会得到drij美元。回报率是有保证的,即未来10年每种投资的回报率均已知。你每年只能做出一次投资决定。在每年年底,你既可以原创 2014-08-17 21:55:56 · 3440 阅读 · 0 评论 -
动态规划之编辑距离
思考:我们可以从题目中给出的6种操作描述,找到递归式,比如复制操作是i和j都增加1。那么递归式就是c[i][j]=c[i-1][j-1]+cost[COPY]。c[i][j]表示从字符串i复制到字符串j所需要的总代价。其他操作类似。递归式如下:代码如下:#include using namespace std;enum {COPY,REPLACE,DELETE,INSERT,TWI原创 2014-08-18 11:50:47 · 2158 阅读 · 0 评论 -
算法导论第十五章动态规划
概述:动态规划是通过组合子问题的解而解决整个问题的。动态规划适用于子问题不是独立的情况,也就是各子问题的包含公共的子子问题。动态规划对每个子问题只求解一次,将其结果保存在一张表中。动态规划通常用于最优化问题。动态规划的设计步骤:a.描述最优解的结构b.递归定义最优解的值c.按自底向上的方式计算最优觖的值d.由计算出的结构构造一个最优解15.1钢条切割原创 2014-08-18 13:39:25 · 25120 阅读 · 2 评论 -
动态规划之双调欧几里得旅行商问题
动态规划之双调欧几里得旅行商问题原创 2014-08-09 17:27:51 · 3411 阅读 · 0 评论 -
动态规划之字符串拆分
某种字符串处理语言允许程序员将一个字符串拆分为两段。由于此操作需要复制字符串,因此要花费n个时间单位来将一个n个字符的字符串拆为两段。假定一个程序员希望将一个字符串拆分为多段,拆分的顺序会影响所花费的总时间。例如,假定这个程序员希望将一个20个字符的字符串在第2个,第8个以及第10个字符后进行拆分(字符由左至右,从1开始升序编号)。如果她按由左到右顺序进行拆分,则第一次拆分花费20个时间单位,第二原创 2014-08-16 11:55:34 · 6766 阅读 · 4 评论 -
动态规划之签约棒球自由球员
假设你是一支棒球大联盟球队的总经理。在赛季休季期间,你需要签入一些自由球员。球队老板给你的预算为X美元,你可以使用少于X美元来签入球员,但如果超支,球队老板就会解雇你。 你正在考虑在N个不同位置签入球员,在每个位置上,有P个该位置的自由球员供你选择。由于你不希望任何位置过于臃肿,因此每个位置最多签入一名球员(如果在某个特定位置上你没有签入任何球员,则意味着计划继续使用原创 2014-08-15 19:36:52 · 3168 阅读 · 1 评论 -
动态规划之基于接缝裁剪的图像压缩
给定一副彩色图像,它由一个mxn的像素数组A[1..m,1..n]构成,每个像素是一个红绿蓝(RGB)亮度的三元组。假定我们希望轻度压缩这幅图像。具体地,我们希望从每一行中删除一个像素,使得图像变窄一个像素。但为了避免影响视觉效果,我们要求相邻两行中删除的像素必须位于同一列或相邻列。也就是说,删除的像素构成从顶端行到底端行的一条“接缝”(seam),相邻像素均在垂直或对角线方向上相邻原创 2014-08-14 18:55:11 · 3698 阅读 · 0 评论 -
动态规划之整齐打印
动态规划之整齐打印,代码简单易懂,完整的呈现出如何利用动态规划方法解决问题。原创 2014-08-10 11:33:52 · 3587 阅读 · 0 评论 -
利用动态规划找出最长公共单调递增子序列
动态规划法求最长递增子序列的两种方法,一个是n²,一个是nlgn时间的。原创 2014-08-01 15:50:35 · 3432 阅读 · 0 评论 -
动态集合中两个最接近的数的差值
查找动态集合中两个最接近数据之间的差值。借用原始红黑树,以此为基础,本人又增加了新函数为满足新功能。原创 2014-07-14 12:15:13 · 1533 阅读 · 0 评论 -
算法导论第八章线性时间排序课后答案
8.1-1 在一颗比较排序算法的决策树中,一个叶结点可能的最小深度是多少?最少进行n-1次比较,所以深度最小是n-18.1-2不用斯特林近似公式,给出lg(n!)的渐近紧确界,利用A.2节介绍的技术来求累加和∑lgk.∫(lgk)dk=klgk-∫kd(lgk)=klgk-(1/ln2)k 所以∑lgk=(nlgn-1lg1)-(1/ln2)(n-1)=nlg原创 2014-01-19 14:09:13 · 12083 阅读 · 12 评论 -
紧凑的多重数组的静态双向链表实现
相关问题: 我们往往希望双向链表的所有元素在存储器中保持紧凑,例如,在多数组表示中占用前m个下标位置.(在页式虚拟存储的计算环境下,即为这种情况。)假设除指向链表本身的指针外没有其他指针指向该链表元素,试说明如何实现过程ALLOCATE-OBJECT和FREE-OBJECT,使得该表示保持紧凑。(提示,使用栈的数组实现)。思考过程:原创 2014-03-02 15:59:09 · 2374 阅读 · 1 评论 -
用链表表示的可合并最大堆
相关问题:(利用链表实现可合并堆) 可合并堆支持以下操作:MAKE-HEAP(创建一个空的可合并堆),INSERT,MAXIMUM,EXTRACT-MAX和UNION。说明在下列前提下如何用链表实现可合并堆。试着使各操作尽可能高效。分析每个操作按动态集合规模的运行时间。由于对于堆操作需要查找父结点,以及左右孩子结点,所以本程序中用到了非递归非辅助栈的遍历与查找操作,它需要O(nlgn)时间,原创 2014-03-13 16:30:03 · 2326 阅读 · 3 评论 -
算法导论第四章4.2递归式课后答案
根据渐近确界的定义知:T(n)max=cnlog(1/a,n) T(n)min=cnlog(1/(1-a),n)>=d2nlog(2,n) 两个d值是不一样的。。。所以计算完 T(n)max与 T(n)min后的内容是错误的。原创 2013-12-14 15:49:52 · 3680 阅读 · 1 评论 -
算法导论第二章问题研究2
书上习题2-1 在合并排序中对小数组采用插入排序。以下是我写的代码://合并排序+插入排序结合法#include #include using namespace std;int* INSERTION_SORT(int A[],int B[],int p,int q,int r);void MERGE(int A[],int p,int q,int r);void ME原创 2013-12-10 16:27:52 · 1000 阅读 · 0 评论 -
算法导论第二章问题研究
课后题里面有这么一道题。2.3-6.在插入排序法中,对已排序的子数组反向扫描。是否可以采用2分查找策略。将插入排序的总体最坏运行时间改善为O(nlgn)? 以下是代码实现部分。#include #include #includeusing namespace std;void main(){ const int n=10; int a[n],key,med; srand( (unsigned)ti原创 2013-12-10 16:20:40 · 843 阅读 · 0 评论 -
最坏为线性时间的查找第i小元素
既然是线性时间查找元素,那么我们每次划分时都需要均衡划分。所以我们每次总是取中位数辅助数组B的中位数x为原数组A的主元进行划分。开始我卡在书中第三步了,没有想出如何递归的找到中位数x。于是我试图要对得到的中位数辅助数组B排序以找到数组B中的中位数。这样带来的问题是在对含有n/5个元素的数组B排序时,可能会不是线性时间,而用线性时间排序算法又有很多限制。这个代码我就不贴出来了以免误导网友。然后经原创 2014-01-31 20:39:37 · 5978 阅读 · 2 评论 -
算法导论第六章堆排序所给的伪代码转换具体程序
首先SHOW下我自己写的不带类的C++程序:#include using namespace std;const length=100;int Heap_size(int A[]);//始终是数组内从后往前数的第一个非0数开始的一组数。int PARENT(int i);//父节点int LEFT(int i);//左孩子结点int RIGHT(int i);//有孩子结点原创 2014-01-03 19:06:44 · 2236 阅读 · 4 评论