
数据结构与基础算法
文章平均质量分 79
罗磐
这个作者很懒,什么都没留下…
展开
-
平摊分析(算法导论)
1.平摊分析是什么平摊分析是一种算法分析的手法,其主要思路是:对若干条指令(通常O(n)条)整体进行考虑其时间复杂度(以获得更接近实际情况的时间复杂度),而不是逐一考虑执行每条指令所需的时间复杂度后再进行累加。对于一个操作的序列来讲,平摊分析(Amortize Analysis)得出的是在特定问题中这个序列下每个操作的平摊开销。一个操作序列中,可能存在一、两个开销比较大的操作,在一般地原创 2015-11-02 11:37:16 · 9071 阅读 · 0 评论 -
图基础总结(算法导论)
1.图的基本算法a.广、深度遍历#include#include#include#includeusing namespace std;//邻接矩阵存储bool random(int s,int e){ return s+rand()%(e-s);}void breadthFirstSearch(const vector > &gmap,vector &isvis,原创 2015-11-04 22:55:40 · 931 阅读 · 0 评论 -
字符串匹配(算法导论)
0.KMP图文大都参考:http://blog.youkuaiyun.com/v_july_v/article/details/7041827原创 2015-11-09 21:28:16 · 740 阅读 · 1 评论 -
贪心算法(算法分析与设计)
1.活动安排问题使剩余安排时间极大化#include#include#includeusing namespace std;struct Node{ int s; int f;};bool cmp(Node a,Node b){ return a.f<b.f;}int greedySelector(vector &x,vector &a){ int n=x.s原创 2015-10-07 00:02:06 · 1715 阅读 · 0 评论 -
分治与递归(算法分析与设计)
1.strassen矩阵乘法a.非递归版#include#includeusing namespace std;int main(){ int n; cout<<"please input n!"<<endl; cin>>n; vector > A;//A作为乘数矩阵A,和存储结果矩阵C vector > B; cout<<"please input matrix A原创 2015-09-24 22:04:27 · 1495 阅读 · 0 评论 -
树基础总结(算法导论)
0.树的存储结构a.当孩子个数有限时(全部单列出来)struct Tree{ int data; Tree *ltree; Tree *rtree;} ;b.当孩子个数不定时(将孩子节点连在一起)struct Node{ int data; vector child;//孩子节点的序号 };vector tree; c.对于完全/满二叉树(可以利用,父亲节点序号原创 2015-11-01 11:29:24 · 820 阅读 · 0 评论 -
时间复杂度标记与分析(算法分析与设计)
A.渐进分析记号O:渐进上界记号,算法A时间复杂度最大不会超过O(f(n))Ω:渐进下界记号,算法A时间复杂度最小不低于Ω(f(n))Θ:渐进确界记号,算法A时间复杂度在Θ(f(n))这个级数B.算法分析基本法则a.递归算法复杂度分析1.主方法递归式子:T(n)=aT(n/b)+f(n)(其中f(n)含logn的情形不符合主定理的适用范围)第1)条:n^[l原创 2015-09-18 21:11:41 · 2026 阅读 · 0 评论 -
排序和顺序统计学(算法导论)
1.堆排序堆数据结构是一种数组对象,它可以被视为一颗完全二叉树。存放时利用了二叉树,父亲节点序号(i),子节点序号(2*i,2*i+1)的性质堆的建立,调整,输出实例如下:#include#include#includeusing namespace std;//root从data[1]开始存起 //我想到的是左右孩子先比较,返回大孩子序号。大孩子再与父节点比较,如果不调原创 2015-11-01 21:55:31 · 1794 阅读 · 0 评论 -
NP完全性理论(算法分析与设计)
1.P问题,NP问题,NPC问题的概念此处转自:http://www.matrix67.com/blog/archives/105a.时间复杂度定义:时间复杂度并不是表示一个程序解决问题需要花费多少时间,而是当一个问题规模扩大以后,程序需要的时间长度增长得有多快例子:冒泡排序、插入排序等,数据扩大2倍,时间变慢4倍的,属于O(n^2)的复杂度b.多项式级原创 2015-10-12 22:06:49 · 9207 阅读 · 0 评论 -
概率算法(算法分析与设计)
0.概论包括四种算法,数值概率算法(数值问题的求解,最优化问题的近似解)、蒙特罗卡算法(判定问题的准确解,不一定正确)、拉斯维加斯算法(不一定会得到解,但得到的解一定是正确解)、舍伍德算法(总能求得一个解,且一定是正确解)。1.随机数随机数生成,线性同余法d 为用户输入随机数;m 足够大,一般为最大机器数;b为一质数;c>=02.数值概率算法原创 2015-10-22 15:06:28 · 11851 阅读 · 0 评论 -
回溯法(算法分析与设计)
0.回溯法的算法框架A.简介回溯法,又称试探法。一般需要遍历解空间,子集树原创 2015-10-11 10:13:05 · 18043 阅读 · 0 评论 -
动态规划(算法分析与设计)
1.矩阵连乘问题参考博客:http://blog.sina.com.cn/s/blog_64018c250100s123.htmla.i*k型号的矩阵与k*j型号的矩阵相乘,乘法次数为i*k*jb.假如任意一个规模小于j-i+1的矩阵最少乘法次数m[ i ][ k ]已知,那么j-i+1规模的矩阵连乘最少次数也应易知m[ i ][ j ]=min{ m[ i ][ k ]+m[ k ]原创 2015-10-04 20:11:51 · 1913 阅读 · 0 评论 -
分支限界法(算法分析与设计)
0.概念分支限界法常以广度优先(队列式(先进先出)分支限界)或以最小耗费(最大效益)优先的方式(优先队列分支限界)搜索问题的解空间树。在分支限界法中,每一个活结点只有一次机会成为扩展结点。活结点一旦成为扩展结点,就一次性产生其所有儿子结点。在这些儿子结点中,导致不可行解或导致非最优解的儿子结点被舍弃,其余儿子结点被加入活结点表中。此后,从活结点表中取下一结点成为当前扩展结点,并重复上述原创 2015-10-20 15:42:46 · 8139 阅读 · 1 评论 -
堆基础总结(算法导论)
1.二项堆a.二项树定义:二项树Bk是一种递归定义的有序树。二项树B0只包含一个结点。二项树Bk由两个子树Bk-1连接而成:其中一棵树的根是另一棵树的根的最左孩子。性质:1)共有2的k次方个结点;2)树的高度为k;3)在深度i处恰有(上k,下i)(因此叫二项树)个结点,其中i=0,...,k;4)根的度数为k,它大于任何其他结点的度数,并原创 2015-11-08 12:47:43 · 4366 阅读 · 0 评论 -
leetcode解题总结(持续更新)
树型:DFS或BFS(不够+状态存储,缩短时间)(如数位DP,就是DFS+状态存储)链表:多用two pointer无序数组:hash映射(O(1),map,set等),并查集,字典树tire有序数组:二分查找棋牌类游戏博弈树:极大极小值算法,alpha-beta剪枝原创 2016-09-21 20:53:27 · 1406 阅读 · 0 评论