精华内容
下载资源
问答
  • 算法入门

    千次阅读 多人点赞 2019-06-25 10:03:44
    计算机基础课第30期分享 转载请联系授权(微信ID:qianpangzi0206) 前两周,我们"初尝"了高级编程语言(比如 Python 和 Java),我们讨论了几种语句 - 赋值语句,if 语句,循环语句...即使结果一致,有些算法...

     

    计算机基础课第 30 期分享

    转载请联系授权(微信ID:qianpangzi0206)

     

     

    前两周,我们"初尝"了高级编程语言(比如 Python 和 Java),我们讨论了几种语句 - 赋值语句,if 语句,循环语句,以及把代码打包成 "函数",比如算指数。重要的是,之前写的指数函数只是无数解决方案的一种,还有其它方案。

    01

    算法的定义

     


    即使结果一致,有些算法会更好,一般来说,所需步骤越少越好。不过有时我们也会关心其他因素,比如占多少内存。

    "算法" 一词来自 波斯博识者 阿尔·花拉子密(1000 多年前的代数之父之一)如何想出高效算法 - 是早在计算机出现前就有的问题,从而诞生了专门研究计算的领域,然后发展成一门现代学科—计算机科学!

    02

    排序算法

     

    记载最多的算法之一是"排序",排序到处都,比如给名字、数字排序,找最便宜的机票,按最新时间排邮件,按姓氏排联系人等这些都要排序。你可能想"排序看起来不怎么难… 能有几种算法呢?" ,答案是超多。计算机科学家花了数十年发明各种排序算法,还起了酷酷的名字,比如冒泡排序,快速排序,插入排序,归并排序等。

    我们来试试排序!试想有一堆机票价格,都飞往  印第安纳波利斯 (美国地名)。

     

    上图的这样一组数据  叫"数组"(Array),来看看怎么排序(建议拿出笔和纸跟着说明来排序),先从一种简单算法开始,先找到最小数,从最上面的 307 开始,因为现在只看了这一个,所以它是最小数,下一个是 239,比 307 小,所以新的最小数变成 239。下一个是 214 ,新的最小数,250 不是,384, 299, 223, 312 都不是,现在扫完了所有数字,214 是最小的

    为了升序排列(从小到大排序),把 214 和最上面的数字,交换位置,刚排序了一个数字。现在重复同样的过程,这次不从最上面开始,从第 2 个数开始,先看到 239,我们当作是 "最小数",扫描剩下的部分,发现 223 最小,所以把它和第 2 位交换,重复这个过程,从第 3 位数字开始,让 239 和 307 互换位置,重复直到最后一个数字。

    数字排好了,可以买机票了!

    刚刚这种方法,或者说算法,叫 选择排序 - 非常基础的一种算法

    以下是"伪代码"

     

    03

    算法复杂度

     

    这个函数可以排序8个, 80个或8千万个数字,函数写好了就可以重复使用。这里用循环遍历数组,每个数组位置都跑一遍循环,找最小数然后互换位置,每个数组位置都跑一遍循环,找最小数然后互换位置,可以在代码中看到这一点(一个 for 循环套另一个 for 循环)。这意味着,大致来说,如果要排 N 个东西,要循环 N 次,每次循环中再循环 N 次,共 N*N,  或 N。算法的输入大小和运行步骤之间的关系叫算法的复杂度,表示运行速度的量级。

    计算机科学家们把算法复杂度叫大 O 表示法,算法复杂度 O(N*N)效率不高

    前面的例子有 8 个元素(n=8), 8*8= 64,如果 8 个变 80 个,运行时间变成 80*80 = 6400。虽然大小只增长了 10 倍(8 到 80),但运行时间增加了 100 倍!(64 到 6400 )。随着数组增大,对效率的影响会越来越大。这对大公司来说是个问题,比如谷歌要对几十亿条信息排序。

     

    作为未来的计算机科学家你可能会问:有没有更高效的排序算法?我们下节继续

    相关阅读:

     

    1. 从汇编语言到高级编程语言的演变

    2. 编程语言的基本元素

    3. 函数的强大之处

     

    展开全文
  • km算法入门

    千次阅读 2018-08-15 22:54:29
    km算法入门 本文知识均由笔者自学,文章有错误之处请不吝指出。   笔者刷数模题的时候有一道题考到了“二分图最大权分配”,需要用到KM算法,但是书上对KM算法的介绍又臭又长,更何况有些同学“匈牙利算法”也没...

    km算法入门

    本文知识均由笔者自学,文章有错误之处请不吝指出。

     

    笔者刷数模题的时候有一道题考到了“二分图最大权分配”,需要用到KM算法,但是书上对KM算法的介绍又臭又长,更何况有些同学“匈牙利算法”也没学过(由匈牙利数学家Edmonds提出),自然难以理解所谓的KM算法。本文旨在用通俗易懂的语言,向读者介绍匈牙利算法和KM算法。

     

    一、匈牙利算法

    匈牙利算法用于解决什么问题?

    匈牙利算法用于解决二分图的最大匹配问题。

    什么是二分图?我们不妨来考虑这样一个问题,在一家公司里,有员工A,B,C,有三种工作a,b,c,如果员工和工作之间有线相连,则代表员工能胜任这份工作。

    figure1.1

    如图所示,员工A能胜任a,c工作,员工B能胜任a,b,c工作,而员工C只能胜任c工作。

    上图就是所谓的“二分图”(请忽略图中箭头),简单的说,上图可划分为两个集合{员工},{工作},两个集合之间的元素可以相连,同一个集合内的元素不能相连。

    下面请解决这样一个问题:请给出一个方案,让尽可能多的员工有不同的工作做。“匈牙利算法”的出现就是为了解决这个问题。

    下面给出这个问题的解决方案:(读者看到这里可能会想,解决这个问题不是很简单吗?A→a,B→b,C→c不就好了?请注意:任何算法的给出都是为了规整化一个问题的解决步骤,其目的是为了在问题规模越来越大时算法对其仍然适用,如果公司有10个员工或者更多,读者想必不能一眼看出答案,此时,算法的作用便体现出来了。)

    我们先帮A找工作做,不妨先帮A连上a(红线表示此时两者已经匹配),表示A去做a工作。

      

    接下来我们帮B找工作做,B的第一条线跟a相连,B也想做工作a。

    这时候就发生了冲突(collision),如何解决呢?

    匈牙利算法”指出 通过一条增广路径,通过取反操作,我们就能匹配更多的点。

    什么是增广路径?增广路径是指,由一个未匹配的顶点开始,经过若干个匹配顶点,最后到达对面集合的一个未匹配顶点的路径,即这条路径将两个不同集合的两个未匹配顶点通过一系列匹配顶点相连。

    比如此题中,B想做工作a,于是A想着换一个工作,我们连上A,c。

     

    如图,B→a→A→c 其中B,c未匹配,A,a已匹配,按照定义,这就是一条增广路径,我们对其进行取反操作,就变成了下图。

     

    取反操作为我们带来了什么?原本只有一边匹配,现在有两边匹配了,而且冲突也解决了,这就是匈牙利算法的妙处,我们能通过不停的寻找这样一条增广路径,从而找到二分图的最大匹配

    下面我们继续寻找增广路径。

    最终,我们得到了一个最大匹配:A匹配a,B匹配b,C匹配c,就算集合中的元素很多很多,我们仍能通过匈牙利算法得到该二分图的最大匹配。

    二、KM算法


    现在我们来考虑另外一个问题:如果每个员工做每件工作的效率各不相同,我们如何得到一个最优匹配使得整个公司的工作效率最大呢?

    这种问题被称为带权二分图的最优匹配问题,可由KM算法解决。

    比如上图,A做工作a的效率为3,做工作c的效率为4......以此类推。

    不了解KM算法的人如何解决这个问题?我们只需要用匈牙利算法找到所有的最大匹配,比较每个最大匹配的权重,再选出最大权重的最优匹配即可。这不失为一个解决方案,但是,如果公司员工的数量越来越多,此种算法的实行难度也就越来越大,我们必须另辟蹊径:KM算法。

    KM算法解决此题的步骤如下所示:

    1.首先对每个顶点赋值,将左边的顶点赋值为最大权重,右边的顶点赋值为0。

    如图,我们将顶点A赋值为其两边中较大的4。

    2.进行匹配,我们匹配的原则是:只与权重相同的边匹配,若是找不到边匹配,对此条路径的所有左边顶点-1,右边顶点+1,再进行匹配,若还是匹配不到,重复+1和-1操作。(这里看不懂可以跳过,直接看下面的操作,之后再回头来看这里。)

    对A进行匹配,符合匹配条件的边只有Ac边。

    匹配成功!

    接下来我们对B进行匹配,顶点B值为3,Bc边权重为3,匹配成~ 等等,A已经匹配c了,发生了冲突,怎么办?我们这时候第一时间应该想到的是,让B换个工作,但根据匹配原则,只有Bc边 3+0=0 满足要求,于是B不能换边了,那A能不能换边呢?对A来说,也是只有Ac边满足4+0=4的要求,于是A也不能换边,走投无路了,怎么办?

    从常识的角度思考:其实我们寻找最优匹配的过程,也就是帮每个员工找到他们工作效率最高的工作,但是,有些工作会冲突,比如现在,B员工和A员工工作c的效率都是最高,这时我们应该让A或者B换一份工作,但是这时候换工作的话我们只能换到降低总体效率值的工作,也就是说,如果令R=左边顶点所有值相加,若发生了冲突,则最终工作效率一定小于R,但是,我们现在只要求最优匹配,所以,如果A换一份工作降低的工作效率比较少的话,我们是能接受的(对B同样如此)。

    在KM算法中如何体现呢?

    现在参与到这个冲突的顶点是A,B和c,令所有左边顶点值-1,右边顶点值+1,即 A-1,B-1. c+1,结果如下图所示。

    我们进行了上述操作后会发现,若是左边有n个顶点参与运算,则右边就有n-1个顶点参与运算,整体效率值下降了1*(n-(n-1))=1,而对于A来说,Ac本来为可匹配的边,现在仍为可匹配边(3+1=4),对于B来说,Bc本来为可匹配的边,现在仍为可匹配的边(2+1=4),我们通过上述操作,为A增加了一条可匹配的边Aa,为B增加了一条可匹配的边Ba。

    现在我们再来匹配,对B来说,Ba边 2+0=2,满足条件,所以B换边,a现在为未匹配状态,Ba匹配!

    我们现在匹配最后一条边C,Cc 5+1!=5,C边无边能匹配,所以C-1。

    现在Cc边 4+1=5,可以匹配,但是c已匹配了,发生冲突,C此时不能换边,于是便去找A,对于A来说,Aa此时也为可匹配边,但是a已匹配,A又去找B。

      

    B现在无边可以匹配了,2+0!=1 ,现在的路径是C→c→A→a→B,所以A-1,B-1,C-1,a+1,c+1。如下图所示。

    对于B来说,现在Bb 1+0=1 可匹配!

    使用匈牙利算法,对此条路径上的边取反。

    如图,便完成了此题的最优匹配。

    读者可以发现,这题中冲突一共发生了3次,所以我们一共降低了3次效率值,但是我们每次降低的效率值都是最少的,所以我们完成的仍然是最优匹配

    这就是KM算法的整个过程,整体思路就是:每次都帮一个顶点匹配最大权重边,利用匈牙利算法完成最大匹配,最终我们完成的就是最优匹配

    PS:笔者此文旨在用通俗易懂的语言解释匈牙利算法和KM算法,所以对部分定理未加以证明,甚至有的部分一笔带过,这是为了全文的流畅性考虑,不专业之处请多多谅解。

    转载自:https://www.cnblogs.com/logosG/p/logos.html

    展开全文
  • matlab遗传算法(GA)详解(一)算法入门

    万次阅读 多人点赞 2019-07-02 13:37:11
    遗传算法(Genetic Algorithm, GA)是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解(所找到的解是全局最优解)的方法。 参数编码、初始群体的设定...

    遗传算法(Genetic Algorithm, GA)是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解(所找到的解是全局最优解)的方法。

    参数编码、初始群体的设定、适应度函数的设计、遗传操作设计、控制参数设定五个要素组成了遗传算法的核心内容。

     1)种群初始化。我们需要首先通过随机生成的方式来创造一个种群,一般该种群的数量为100~500,这里我们采用二进制将一个染色体(解)编码为基因型。随后用进制转化,将二进制的基因型转化成十进制的表现型。

    2)适应度计算(种群评估)。这里我们直接将目标函数值作为个体的适应度。

    3)选择(复制)操作。根据种群中个体的适应度大小,通过轮盘赌等方式将适应度高的个体从当前种群中选择出来。其中轮盘赌即是与适应度成正比的概率来确定各个个体遗传到下一代群体中的数量。

          具体步骤如下:

         (1)首先计算出所有个体的适应度总和Σfi。

         (2)其次计算出每个个体的相对适应度大小fi/Σfi,类似于softmax。

         (3)再产生一个0到1之间的随机数,依据随机数出现在上述哪个概率区域内来确定各个个体被选中的次数。

    4)交叉(交配)运算。该步骤是遗传算法中产生新的个体的主要操作过程,它用一定的交配概率阈值(pc,一般是0.4到0.99)来控制是否采取单点交叉,多点交叉等方式生成新的交叉个体。

         具体步骤如下:

         (1)先对群体随机配对。

         (2)再随机设定交叉点的位置。

         (3)再互换配对染色体间的部分基因。 

    5)变异运算。该步骤是产生新的个体的另一种操作。一般先随机产生变异点,再根据变异概率阈值(pm,一般是0.0001到0.1)将变异点的原有基因取反。

    6)终止判断。如果满足条件(迭代次数,一般是200~500)则终止算法,否则返回step2。

                       

     

    我们首先从函数出发,既然是寻找全局最优解,我们可以想象一个多元函数的图像。遗传算法中每一条染色体,对应着遗传算法的一个解决方案,一般我们用适应性函数(fitness function)来衡量这个解决方案的优劣。所以从一个基因组到其解的适应度形成一个映射。可以把遗传算法的过程看作是一个在多元函数里面求最优解的过程。可以这样想象,这个多维曲面里面有数不清的“山峰”,而这些山峰所对应的就是局部最优解。而其中也会有一个“山峰”的海拔最高的,那么这个就是全局最优解。而遗传算法的任务就是尽量爬到最高峰,而不是陷落在一些小山峰。(另外,值得注意的是遗传算法不一定要找“最高的山峰”,如果问题的适应度评价越小越好的话,那么全局最优解就是函数的最小值,对应的,遗传算法所要找的就是“最深的谷底”)

                                                         

    我们从一元函数出发,已知这样一个函数:

                                             

     

    在matlab下绘制该函数图像 我们可以发现

    x=-1:0.01:2; %从-1到2 每隔0.01取一个点绘制图像
    y = x.*sin(10*pi*x) + 2; 
    plot(x,y)

    我们可以发现

                 

    我们尝试寻找这个函数在定义域内的最高点和最低点,可以尝试下列几种方法:

    既然我们把函数曲线理解成一个一个山峰和山谷组成的山脉。那么我们可以设想所得到的每一个解就是一只袋鼠,我们希望它们不断的向着更高处跳去,直到跳到最高的山峰。所以求最大值的过程就转化成一个“袋鼠跳”的过程。

    下面介绍介绍“袋鼠跳”的几种方式。

    • 爬山算法:一只袋鼠朝着比现在高的地方跳去。它找到了不远处的最高的山峰。但是这座山不一定是最高峰。这就是爬山算法,它不能保证局部最优值就是全局最优值。

    • 模拟退火:袋鼠喝醉了。它随机地跳了很长时间。这期间,它可能走向高处,也可能踏入平地。但是,它渐渐清醒了并朝最高峰跳去。这就是模拟退火算法。

    • 遗传算法:有很多袋鼠,它们降落到喜玛拉雅山脉的任意地方。这些袋鼠并不知道它们的任务是寻找珠穆朗玛峰。但每过几年,就在一些海拔高度较低的地方射杀一些袋鼠。于是,不断有袋鼠死于海拔较低的地方,而越是在海拔高的袋鼠越是能活得更久,也越有机会生儿育女。就这样经过许多年,这些袋鼠们竟然都不自觉地聚拢到了一个个的山峰上,可是在所有的袋鼠中,只有聚拢到珠穆朗玛峰的袋鼠被带回了美丽的澳洲。

     而这里我们使用的就是遗传算法来解决这个问题,首先我们使用matlab中的ga()函数来直接寻找到答案。

    关于ga函数就是将上面的算法思想进行封装成的一个函数

    首先创建一个函数 一个脚本

    在函数中我们定义目标函数

    function y = simple_fitness(x)
    
    y = x*sin(10*pi*x)+2
    
    end
    

    在函数中我们使用ga算法求解

    ObjectiveFunction = @simple_fitness;
    nvars = 1;%变量个数
    LB = [-1]%定义域下限
    UB = [2]%定义域上限
    
    [x,fval] = ga(ObjectiveFunction,nvars,[],[],[],[],LB,UB)%调用ga函数

    这里要注意ga算法默认的全局最优解是全局的最小值 我们这里先求出最小值 

    本次遗传算法得出在1.9505有最小值0.0497

     但是这个只是预测值 与真实值不同 每次遗传迭代的结果也是不同的 下次迭代结果有可能不是这个数值

    Matlab工具箱函数 ga 是求最小值,所有优化工具箱函数都是求最小值,你如果要求最大值,把目标函数取负,然后求得最小值实际上就是原始目标函数的最大值了。这也是为什么matlab里所有优化工具箱函数都是求最小值了

    修改目标函数为

    function y = simple_fitness(x)
    
    y = -x*sin(10*pi*x)-2
    
    end

    得到最大值是在1.6506处取得的3.6503 

    展开全文
  • 【算法学习】分块算法入门

    千次阅读 2018-07-03 16:45:33
    分块算法入门 如何写分块(一) 维护内容 每一块的个数 块的总数目 块的左右端点位置 每个元素所属于的块号 完整代码 如何写分块(二) 思维的转换 如何训练 分块算法入门 所谓分块算法,就是讲一个...

    分块算法入门

    所谓分块算法,就是讲一个序列分成若干块,维护块内的信息。为了保证一定的时间复杂度,所以对于一个n个元素组成的数组,将其分为n块,每块也有n个元素。所以一般分块算法的复杂中都带有根号。

    对于一个暴力的区间修改问题,方法自然是对于区间的每一个元素都暴力修改,这样的话时间复杂度是明显不够优秀的。所以引入了分块的算法,分块相当于一种优雅的暴力

    如何写分块(一)

    维护内容

    在分块中,我们需要维护的基本内容有:总的元素个数n,每一块的个数block,块的总数目num,这块左端点的位置l[i],这块右端点的位置r[i],元素data[i]具体属于那一块,根据具体情况,可以适当修改。

    下面就对上面需要进行预处理的一一解释。

    每一块的个数

    这个就很简单,根据分块的思想,每一块要维护n个元素,故每一块的个数block=(n)

    块的总数目

    总共分为block个块,那么每一块就有num=nblock个元素,这时候要注意是否能整除,若可以则恰好分完,否则num+1

    块的左右端点位置

    如果我们求出了每一块的左右端点,那么也就相当于计算出了每一块所维护信息的左右区间,由于每一块有block个元素,我们这里设第i块所维护的区间为[l[i],r[i]],则有如下的式子:

    l[i]=(i1)block+1,r[i]=iblock

    这样便可以求解出每块所维护的区间。

    每个元素所属于的块号

    自然我们想到用元素下标i去除以每块的个数block,这样的话,当i=block的时候显然是不正确的,故稍作修正belong[i]=i1block+1即可。

    完整代码

    int n,m,num,block;
    int l[nmax],r[nmax],belong[nmax];
    void build(){
        block = sqrt(n);
        num = n / block; if(n % block) num++;
        for(int i = 1;i<=num;++i)
            l[i] = (i-1) * block + 1,
            r[i] = i * block;
        r[num] = n;
        for(int i = 1;i<=n;++i) belong[i] = (i-1) / block + 1;
    }

    如何写分块(二)

    思维的转换

    上面的一些基本的内容,只是为了我们更快的维护其他的数据,以达到题目的要求,如果有线段树的基础,你可以把分块理解为既加强又退化的线段树。

    为什么这么说呢?

    在我个人看来,线段树相当于对原数组不断进行分块,直到最后不可再分。由于一块分2块,2块分4块,这样的性质保证了复杂度在log2n的数量级上。而分块只分一次,每块n个元素。

    由于线段树所分块太多,所以在面对不符合区间加法的时候,就会显得十分无力。对于分块,可以采用部分暴力部分利用块内信息来统计。

    由于我目前所做分块题目比较少,以上只是一些个人的看法,也希望大家可以留言交流。

    如何训练

    这里推荐黄学长的 「分块」数列分块入门1 – 9 by hzwer,做题地址在LOJ

    黄雪长的博客有详细的解法和代码。

    To be continue.

    展开全文
  • 算法总结-1算法入门

    千次阅读 多人点赞 2019-09-06 18:54:00
    算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。 简单地说,...
  • 五大常用算法入门(一)——贪心算法

    万次阅读 多人点赞 2019-02-25 21:48:13
    贪心算法简介1.1 基本定义1.2 贪心算法案例3.贪心算法的基本思路2.贪心算法最优性证明2.1 贪心算法的前提2.2 最优子结构2.3 贪心算法与动态规划的区别3.贪心算法的经典问题3.1 近似解3.2 最优解参考资料 1.贪心算法...
  • 图解十大经典机器学习算法入门

    万次阅读 多人点赞 2018-01-30 14:07:46
    弱人工智能近几年取得了重大突破,悄然间,已经成为每个人生活中必不可少的一部分。以我们的智能手机为例,看看到底温...传统的机器学习算法包括决策树、聚类、贝叶斯分类、支持向量机、EM、Adaboost等等。这篇文章将对
  • 算法入门思维导图

    千次阅读 2016-06-23 09:11:52
    看到一大神的算法入门思维导图,就把它拿来借鉴学习了
  • 优化算法入门系列文章目录(更新中):  1. 模拟退火算法  2. 遗传算法   一. 爬山算法 ( Hill Climbing )  介绍模拟退火前,先介绍爬山算法。爬山算法是一种简单的贪心搜索算法,该算法每次从...
  • 三角函数计算,Cordic 算法入门

    万次阅读 多人点赞 2013-01-02 13:47:45
    三角函数计算,Cordic 算法入门 三角函数的计算是个复杂的主题,有计算机之前,人们通常通过查找三角函数表来计算任意角度的三角函数的值。这种表格在人们刚刚产生三角函数的概念的时候就已经有了,它们通常是通过...
  • 算法入门】广度/宽度优先搜索(BFS)

    万次阅读 多人点赞 2012-04-30 02:58:22
    算法入门】 郭志伟@SYSU:raphealguo(at)qq.com 2012/04/27 1.前言 广度优先搜索(也称宽度优先搜索,缩写BFS,以下采用广度来描述)是连通图的一种遍历策略。因为它的思想是从一个顶点V0开始,辐射状地优先...
  • 算法入门-冒泡排序

    万次阅读 2018-07-28 22:52:00
    基本思想: 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 对每一对相邻元素作同样...由于它的简单,常常用来作为算法入门的学习例子。 冒泡排序程序如下: package org.zsl.algorithm.sort.bubble;...
  • 算法入门网站介绍——USACO

    千次阅读 热门讨论 2016-10-04 13:38:07
    算法入门网站介绍——USACO学号: 16340113 本人学院算法入门网站介绍USACO 注册 做题规范 好处usaco是美国中学生的官方竞赛网站,美国著名在线题库,专门为信息学竞赛选手准备,但必须在注册后才能进入题库1,虽然...
  • 遗传、退火算法入门(转载)

    千次阅读 2018-08-05 10:26:05
    优化算法入门系列文章目录(更新中): http://www.cnblogs.com/heaad/archive/2010/12/23/1914725.html  1. 模拟退火算法  2. 遗传算法  遗传算法 ( GA , Genetic Algorithm ) ,也称进化算法 。 遗传算法...
  • 算法入门经典:开灯问题

    千次阅读 2017-08-02 21:12:23
    算法入门经典:开灯问题 前言:一直很羡慕那些善于写算法的同学,感觉他们真的很聪明,不想我这么笨,一思考算法就头疼。罢了,从最简单的开始吧,加油。 问题: 有n盏灯,编号为1~n,第1个人把...
  • CFR-虚拟遗憾最小化算法入门(一)

    千次阅读 2020-06-06 00:49:13
    目录CFR-虚拟遗憾最小化算法入门基本原理实现部分游戏说明CFR实现训练部分参考代码举例说明初始情况(概率相等)一般情况(概率不等)决策部分参考代码举例说明 CFR-虚拟遗憾最小化算法入门 CFR, Counterfactual ...
  • 路由算法入门

    万次阅读 多人点赞 2017-01-12 18:37:25
    路由算法是提高路由协议功能,尽量减少路由时所带来开销的算法。 路由器使用路由算法来找到到达目的地的最佳链路。 网络可以抽象成图来理解 路由算法分类: 静态路由是指由用户或网络管理员手工配置的路由...
  • 算法快学笔记(一):算法入门

    千次阅读 2018-12-21 17:16:49
    1. 算法的定义 “算法”一词在不同的书籍以及网站上可能会存在一些差异,但是下面的定义个人觉得最为贴切: 1. 算法代表着用系统的方法描述解决问题的策略机制 2. 能够对一定规范的输入,在有限时间内获得所要求的...
  • Verilog算法入门

    千次阅读 多人点赞 2017-10-11 15:21:00
    一、什么是算法算法就是按步就班地解决问题,也就是解决问题的办法。 算法是个很泛的概念,并不是一定得包含高深的数学公式。 二、用Verilog语言实现的算法跟C语言实现的算法有何区别? Verilog是完全可以自主地...
  • 遗传算法入门

    千次阅读 2018-08-11 14:15:43
    遗传算法(Genetic algorithm)属于演化计算( evolutionary computing),是随着人工智能领域发展而来的一种智能算法。正如它的名字所示,遗传算法是受达尔文进化论启发。简单来说,它是一种通过模拟自然进化过程搜索...
  • 算法入门以及时间复杂度推导

    千次阅读 2020-04-18 14:01:07
    本文主要讲解算法入门知识,比如算法的定义,以及算法的时间复杂度推导和常见算法的时间复杂度。
  • 机器学习十大经典算法入门

    万次阅读 多人点赞 2018-06-20 20:11:46
    SVM算法是介于简单算法和神经网络之间的最好的算法。 b. 只通过几个支持向量就确定了超平面,说明它不在乎细枝末节,所以不容易过拟合,但不能确保一定不会过拟合。可以处理复杂的非线性问题。 c. 高斯核函数 ...
  • 遗传算法入门到掌握(二)

    万次阅读 多人点赞 2011-11-05 16:55:45
    此文承接上篇遗传算法入门到掌握(一)  http://blog.csdn.net/emiyasstar__/article/details/6938608  遗传算法引擎――GenAlg   /遗传算法 class GenAlg { public: //这个容器将储存每一个个体的...
  • 人像美颜美妆算法入门必备

    千次阅读 2020-07-19 12:03:03
    在CSDN多年,也积累了不少感悟,2018年本人与电子工业出版社约书一本《图像视频滤镜与人像美颜美妆算法详解》,该书已正式上市,从传统方法开始,系统讲述调色、滤波、变形等图像算法,引申到人像美颜美妆算法,最后...
  • 写在之前 算法所属领域 遗传算法的思想解析 为什么要用遗传算法? 科研现状 应用现状 ... 如果你对遗传算法感兴趣或者正在做有关GA的研究,不妨关注博客右侧专栏 ...(中篇)遗传算法入门(中)实例,求解一元函数最...
  • 推荐算法入门

    万次阅读 2016-04-13 22:03:21
    推荐算法大致可以分为以下几类 基于流行度的算法 协同过滤算法(user-based CF and item-based CF) 基于内容的算法(content-based) 基于模型的算法 混合算法 1. 基于流行度的算法可以按照一个项目的流行度进行...
  • 算法入门教程——图论(1)

    千人学习 2019-04-10 15:53:35
    循序渐进的介绍图论的相关知识。包括了最短路径算法、最小生成树算法和拓扑排序算法的原理、例题和立体的分析与题解。
  • 【深度学习小白教程】(一)图像分类算法入门 主要是我给我们学校的同学直播课做的PPT,未经作者允许,禁止转载哦~
  • Java数据结构与算法入门

    万次阅读 多人点赞 2018-04-29 11:53:50
    所谓的Hash算法都是散列算法,把任意长度的输入,变换成固定长度的输出,该输出就是散列值.(如:MD5,SHA1,加解密算法等) 简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。 Java中的hashCode...
  • 算法入门】深度优先搜索(DFS)

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 242,857
精华内容 97,142
关键字:

算法入门