Algorithm
文章平均质量分 84
勿在浮砂筑高台
视频内容理解/多模态表征学习、搜索推荐算法
展开
-
算法导论-- 线性时间排序(计数排序、基数排序、桶排序)
线性时间排序1.计数排序2.基数排序3.桶排序原创 2015-04-14 19:19:38 · 4173 阅读 · 0 评论 -
算法导论--动态规划(最长公共子序列)
最长公共子序列问题(LCS)给定两个序列X=⟨x1,x2,x3...xm⟩X=\left和Y=⟨y1,y2,y3...xn⟩Y=\left,求X和Y的最长公共子序列。 例如:X=⟨A,B,C,B,D,A,B⟩X=\left,和Y=⟨B,D,C,A,B,A⟩Y=\left,的最长公共子序列为⟨B,C,B,A⟩\left,长度为4; 对于此问题,可以采用暴力求解的方式来比对,即穷举出X的所有子原创 2015-06-05 11:12:33 · 3652 阅读 · 0 评论 -
算法导论--快速排序
快速排序是目前最流行排序算法。文章最后附上随机化版本的快速排序。 #include <stdio.h>int A[]={5,2,7,12,55,3,21,15,1};int Partition(int *A,int p,int r){ int x=A[r]; //最后的元素作为主元,把它的位置先确定下来 int i=p-1; int j; int temp;原创 2015-04-11 16:05:33 · 2491 阅读 · 0 评论 -
算法导论--归并法排序
#include #include #include int C[]={4,2,8,3,6,10,24,5,12};void Merge_Sort(int *A,int p,int r);int main(){ int *p=C,i=0; int Length=sizeof(C)/4-1; //得到数组长度 Merge_Sort(p,0,Length);原创 2015-03-26 20:07:54 · 2850 阅读 · 0 评论 -
算法导论--堆排序
#include #include #include int A[]={7,15,26,1,14,3,16,64,6};int Heap_Size=sizeof(A)/4-1;int *Out=NULL;void Max_Heapify(int *A,int i);void Build_Max_Heap(int *A);void HeapSort(int * A);int mai原创 2015-03-26 19:45:05 · 3134 阅读 · 2 评论 -
算法导论--红黑树
红黑树是平衡搜索树的一种,可以保证在最坏情况下基本动态集合操作的时间复杂度为Lgn。红黑树在二叉搜索树的基础上结点增加了一个属性color,值为black或者red,即一个节点的属性有:left,right,p,color,key。同时,红黑树使用一个哨兵T_NIL代替以一般搜索树中的NULL,T_NIL也是一个普通的结点,也具有以上5个属性,它的color属性为black,其他属性为任意值。即叶子结点的左右孩子全部指向哨兵,以及根节点的父指针也指向哨兵。原创 2015-05-17 09:29:28 · 5382 阅读 · 1 评论 -
算法导论--两种选择算法
算法导论--两种选择算法1.期望为线性时间的选择算法2.最坏情况为线性时间的选择算法原创 2015-11-13 13:31:31 · 4407 阅读 · 0 评论 -
【数据压缩】Huffman原理与代码实现
Huffman算法也是一种无损压缩算法,但与上篇文章LZW压缩算法不同,Huffman需要得到每种字符出现概率的先验知识。通过计算字符序列中每种字符出现的频率,为每种字符进行唯一的编码设计,使得频率高的字符占的位数短,而频率低的字符长,来达到压缩的目的。通常可以节省20%~90%的空间,很大程度上依赖数据的特性!Huffman编码是变长编码,即每种字符对应的编码长度不唯一。前缀码:任何一个字符的编码都不是同一字符集中另一种字符编码的前缀。Huffman编码为最优前缀码,即压缩后数据量最小。-------原创 2015-12-21 23:00:14 · 13859 阅读 · 1 评论 -
算法导论--图的存储(邻接表与邻接矩阵)
图的存储方法有邻接表、邻近矩阵、邻接多重表、十字链表等。本篇文章介绍两种简单且比较常用的两种方法:邻接表与邻接矩阵方法。 以下面的无向图为例,介绍两种存储方法。有向图的存储方法类似,只是边是单方向,无向图的边可以看做双向。 1.邻接链表法邻接链表表示法对图中的每个顶点建立一个带头的边链表;第i条链表代表依附于顶点viv_i所有边信息,若为有向图,则表示以顶点viv_i为弧尾的边信息。邻接链接可以原创 2016-07-12 15:50:25 · 8654 阅读 · 0 评论 -
算法导论--图的遍历(DFS与BFS)
转载请注明出处:勿在浮沙筑高台http://blog.csdn.net/luoshixian099/article/details/51897538图的遍历就是从图中的某个顶点出发,按某种方法对图中的所有顶点访问且仅访问一次。为了保证图中的顶点在遍历过程中仅访问一次,要为每一个顶点设置一个访问标志。通常有两种方法:深度优先搜索(DFS)和广度优先搜索(BFS).这两种算法对有向图与无向图均适用。原创 2016-07-13 17:41:55 · 14264 阅读 · 2 评论 -
算法导论--最小生成树(Kruskal和Prim算法)
转载请注明出处:勿在浮沙筑高台http://blog.csdn.net/luoshixian099/article/details/51908175关于图的几个概念定义:连通图:在无向图中,若任意两个顶点viv_i与vjv_j都有路径相通,则称该无向图为连通图。强连通图:在有向图中,若任意两个顶点viv_i与vjv_j都有路径相通,则称该有向图为强连通图。连通网:在连通图中,若图的边具有一定的原创 2016-07-14 16:58:59 · 142098 阅读 · 33 评论 -
算法导论--动态规划(装配线调度)
装配线问题:某个工厂生产一种产品,有两种装配线选择,每条装配线都有n个装配站。可以单独用,装配线1或2加工生产,也可以使用装配线i的第j个装配站后,进入另一个装配线的第j+1个装配站继续生产。现想找出通过工厂装配线的最快方法。装配线i的第j个装配站表示为Si,jS_{i,j},在该站的装配时间是ai,ja_{i,j} 如果从 Si,jS_{i,j}装配站生产后,转移到另一个生产线继续生产原创 2015-06-02 09:04:11 · 7305 阅读 · 2 评论 -
算法导论--动态规划(矩阵链乘法)
矩阵链乘法问题给定一个n个矩阵的序列⟨A1,A2,A3...An⟩\langle A_1,A_2,A_3...A_n\rangle,我们要计算他们的乘积:A1A2A3...An A_1A_2A_3...A_n,由于矩阵乘法满足结合律,加括号不会影响结果,但是不同的加括号方法,算法复杂度有很大的差别: 考虑矩阵链:⟨A1,A2,A3⟩:\langle A_1,A_2,A_3\rangle,三个原创 2015-06-03 13:34:18 · 11889 阅读 · 2 评论 -
算法导论--二叉搜索树
按照搜索二叉树的定义,若其存在右孩子,则它的下一个结点一定在其右孩子的子树中最小的一个,即查找Tree_Minimum(x->right);若不存在右孩子,则位于它的一个祖先结点上,且这个祖先一定是最底层有左孩子的祖先,且这个左孩子也是它的一个祖先...(好晦涩)。可以这样简单理解,要查x的后继,既然它不存在右孩子,那么说明它是这个子树的最大数,那么它的后继一定要往祖先上找,那就去往上层层找祖先,这个祖先必须满足有左孩子,且这个x必须也要位于祖先的左子树中。这样x就为祖先的左子树中最大的一个了。原创 2015-05-06 11:32:38 · 4044 阅读 · 0 评论 -
算法导论--动态顺序统计与区间树
本文的基础是红黑树 算法导论–红黑树通过在基础的数据结构中添加一些附加信息,来扩张一种标准的数据结构,然后编写新的操作来支持所需要的应用。下面是介绍在红黑树的基础上扩张的数据结构。1.动态顺序统计动态顺序统计可以在O(lgn)时间内确定任何的顺序统计量(即在n个元素的集合中,能在O(lgn)的时间内确定第i小的元素),同时也可以在O(lgn)的时间内计算一个元素的秩(即它在中序遍历下的位置顺序)原创 2015-05-20 15:00:37 · 4816 阅读 · 0 评论 -
算法导论--贪心算法与动态规划(活动选择问题)
活动选择问题有一个教室,而当天有多个活动,活动时间表如下:找出最大兼容活动集!活动已按结束时间升序排序. 动态规划采用动态规划需要满足两个条件:1.最优子结构2.子问题重叠 令SijS_{ij}表示在aia_i结束后和aja_j开始前活动的集合,假定AijA_{ij}为活动集合SijS_{ij}的最大兼容子集,其中包含活动aka_k。问题变成求SikS_{ik}与SkjS_{k原创 2015-06-19 11:21:16 · 4625 阅读 · 0 评论 -
算法导论--动态规划(0-1背包问题)
背包问题小偷发现了n个商品,第i个商品重量为wiw_i,价值为viv_i。小偷希望尽量拿走价值高的商品,但是他的背包只能容纳W重的商品。求如何取舍这些商品? 由于对一个商品,要么被拿走要么不被拿走,所以被称为0-1背包问题。 我们如果采取枚举法进行比较,将会有2n2^n个情况,算法复杂度与n呈指数关系。 下面分析背包问题的性质:动态规划最优子结构令xix_i=1,表示第i个商品被拿走,xix_原创 2015-06-20 10:12:38 · 8846 阅读 · 2 评论 -
算法导论--动态规划(钢条切割)
钢条切割问题现有一段长度为n英寸的钢条和一个价格表pip_i,求切割方案使销售利益最大rnr_n最大 长度为n英寸的钢条共有2n−12^{n-1}种不同的切割方案,因为可以每个整英寸的位置都可以决定切割或者不切割。为了得到rnr_n最大,可以把这个问题分成子问题求解,先切一刀,再考虑余下的部分的最大收益即求 rnr_n=max{pk+rn−kp_k+r_{n-k}}(k=1,2,3…n-1),原创 2015-06-02 19:44:36 · 5271 阅读 · 1 评论 -
算法导论--单源最短路径问题(Dijkstra算法)
转载请注明出处:勿在浮沙筑高台http://blog.csdn.net/luoshixian099/article/details/51918844单源最短路径是指:给定源顶点s∈Vs \in V到分别到其他顶点v∈V−{s}v \in V-\{s\}的最短路径的问题。 Dijkstra算法采用贪心策略:按路径长度递增的顺序,逐个产生各顶点的最短路径。算法过程中需要维护一个顶点集SS,此顶点集保存原创 2016-07-15 18:41:49 · 16507 阅读 · 3 评论