算法
josenxiao
吴军老师的数学之美。我们同时也要做到计算之美,数据之美。学习而快乐
展开
-
动态规划-最长公共子序列
最长公共子序列,是动态规划的一个典型例题。相比原来的遍历查找,优化明显。1⃣️、两个序列--Am,Bn,如果Am=Bn,则再去Am-1,Bn-1;2⃣️、An!=Bm,找其中最大组,即max{{An,Bm-1},{An-1,Bm}};3⃣️、两者其中一个为空,则有CLS=0;简单应用-----------------------------------医学中DNA相同对比,找出相同原创 2017-07-31 11:55:26 · 332 阅读 · 0 评论 -
实现对于n阶行列式的计算
实现对于n阶行列式的计算,对于行列式的计算是对于我们的实际有着很大的帮助的。例如我们在现实生活中遇到一个问题,它抽象成一个数学模型或事一个n元1次方程组,现在求解问题。这类问题有很多。这就要借助我们的线形代数的知识来求解。先实现行列式的求解问题: 行列式的公式为:Sum=∑ (-1)^t*a1p1*a2p2*...*anpn (这里的t表示排列p1 p2...pn原创 2018-01-19 12:25:11 · 8164 阅读 · 0 评论 -
概率算法1-应用定积分计算
概率算法 概率算法的特性:使用概率算法去处理同一个问题,计算两次会得到不同的计算结果。概率算法是对于我们在现实社会中是非常有效的,大家都是学理工科的,知道这里世界上是没有绝对的事情,也没有绝对发生的事情。我们认为一些事情会发生了,它也不是绝对发生,也可以认为它发生是存在着一定的可能性,只是认为可能性发生的大小而决定的。我认为我们要把计算机当成自己的tool to sovle soci原创 2018-01-14 22:07:14 · 3406 阅读 · 0 评论 -
C多线程编程-互斥量
互斥量-mutual exclusion Posix API提供了互斥量的安全函数,#includeint phread_mutex_init(phread_mutex_t * tid,void * atrr);int pthread_mutex_lock(pthread_mutex_t *tid);int pthread_mutex_unlock(pthread_mutex_t原创 2017-10-16 22:12:56 · 783 阅读 · 0 评论 -
OS-银行家算法
银行家算法1、need是申请资源部分;2、max是需要资源;3、allocation 是分配资源;4、rest结构提是指剩余部分的资源;5、分配算法就是need小于rest就表示该资源可以成功;6、这里还要将没有加入部分加入一个counter里面,保存--在其他释放资源后有可能会执行,有可能会等待,flag标记2时候一定不可能在存在的;7、flag数组里面0--表示为不原创 2017-10-09 23:14:30 · 546 阅读 · 0 评论 -
数据结构常见的排序
1、冒泡排序-- 两层循环的run,有一个优化指出就是当后面的数打于前面一个是可以结束一个循环这样可以节省时间;2、插入排序,最好情况为O(NlogN):void insertSort(int *a,const int &length){ int n=length; int j; for(int i=1;i原创 2017-09-02 11:02:50 · 329 阅读 · 0 评论 -
回溯法-bfs--迷宫问题的最短路径
迷宫问题怎样才可以得到最短路径:这里有测试案例:0-通路,-1为墙,输入为:测试经过计算机跑过--为:这样其最短路径为:核心算法为:findpath(int ** map,constint &start_x,constint &start_y){ int m=start_x,n=start_y; Queue Q;原创 2017-08-27 11:48:26 · 7249 阅读 · 0 评论 -
动态规划--01背包问题
01背包问题,实际指的是:放没有?而非重复地去添加一个。现实应用中就有此应用,我们放物品到背包中去时候,我们往往考虑的是包尽量装满,背东西最多:/* 01 背包问题实际就是将它装入一个固定的容器中,但是我们要把有限的容器中装入其价值最大的物品, 02 物品只有第一个装完,有了空间才可以装第二个,正如我们大家装入物品一样的; 03 这里是用动态规划,非用贪心算法原创 2017-08-23 19:09:56 · 411 阅读 · 0 评论 -
回溯算法解决迷宫问题
迷宫问题,首先解决的是两个问题:1、什么时候可以继续走也就是什么时候可以走?--a、不出界限、没有到限制条件,它可以继续运行。---b、当没有障碍物时候就继续运行:这里也会有问题,我走到这里时候那么我又该怎样来走了啊?这是不是你得给它怎样去走啊,对于数组选择路径就是把它的坐标给它加上或减去一个数不是就可以在四周走了。2、它在什么时候走,它停下来是什么条件,遇到障碍物又该怎样走啊?a、出界、运障碍物原创 2017-08-24 23:12:01 · 3753 阅读 · 0 评论 -
最小生成树-prim算法
我之前也写过prim算法,现在再次来写,是因为原创 2017-08-21 09:18:04 · 369 阅读 · 0 评论 -
贪心算法--Dijkstra算法(单源最短路径算法)
其实网上有很多写Dijkstra算法的前辈们,我只是分享一下我自己写的一点心得,还有希望前辈来可以知道自己的错误。其实自己在写的过程中,发现你写一个算法,关键看您对于它了解有多少?你的理解是透彻清楚的吗?还有自己得认真去回味它一步一步是如何得到的,又是怎样的过程,问题就是这样解决的。我自己写的Dijkstra算发的复杂度高于网上前辈写的,但我要是学会自我思考、自我认知、自我寻找之精神。我乐于思原创 2017-08-20 18:03:29 · 14045 阅读 · 0 评论 -
非递归创建二叉树
非递归创建二叉树,其实我们如果学过回溯算法,它的理解是不是还要简单一些。创建一个节点,我们是不是要知道它的左孩子、右孩子是有还是没有,孩子下还有孩子。我们知道这样下去好想无法知道上面该怎样进行。也就是我们要知道下一步还要找到它的根节点。这样我们是不是要借助一个容器来保存节点。将上一级的根入栈,我这里又一个例子使用‘#’来进行判断是否进行下去(简单的就是它有没有该节点)。我是给大家一点思路:一、原创 2017-08-18 17:05:22 · 3013 阅读 · 0 评论 -
Prim算法
贪心算法---prim算法。G=(V,E)-----V顶点集合,E为权值集合,1)S={1}加入顶点集//例如第一个加入是1,i属于S,j属于V-S集合中找出C[i][j]最小的全职,此时将j加入S;2)此时S集合中点数为2,j又在 V-S中取值。3)循环找到最小的值,纪录点。知道找完为止。4)这里要注意是找两个集合最近权值。设计代码:#include us原创 2017-08-02 13:04:15 · 312 阅读 · 0 评论 -
计算多项式--Horner
计算多项式,有着笨的方法就是例如X^3就是直接用循环去计算x*x*x,这当然是一种但是这样的计算其复杂度是在不断上升的。其对于资源的浪费是显而易见的。原来的直接计算--用C++来表示template T ployEval(T coeff[],int n,const T &x){//coeff[]保存的是系数T y=1,value=coeff[0];for(int i=原创 2017-08-02 12:32:19 · 483 阅读 · 0 评论 -
贪心算法--活动安排问题
Greedy algorithm----核心就是用最小的牺牲做最多的事情,这里我做了一个活动的安排问题,对于一个酒店的会议室安排会议,对于每个的公司都有自己的会议时间,酒店当然是越能够安排多的活动,它就可以越挣钱。也就是尽可能多的安排最多的活动,我们设计活动:就是前一个活动完了马上安排下一个活动,这样安排的会议就可以减少冲突还有会议次数要尽可能的多,而且会议不冲突。会议制定一般是:开始时间,结原创 2017-08-01 13:08:15 · 1243 阅读 · 0 评论 -
编程实现克拉默法则求值(1)
1、克拉默法则 含有n个未知数X1,X2,....,Xn的n个线形方程组: a11x1+a12x2+...+a1nxn=b1, .....................1 a21x1+a22x2+...+a2nxn=b2, ...................原创 2018-01-27 17:06:58 · 4275 阅读 · 0 评论