MFEA论文阅读笔记Ⅰ

  • 多目标进化优化,多任务学习,多任务进化优化
    • 简单介绍基本概念
    • 多目标进化优化和多任务进化优化的区别(个人理解)
    • 多任务学习、迁移学习、元学习
    • 融合:多任务学习&多目标优化
  • 摘要
  • 引言
  • MFO
    • 规范本文讨论的多任务问题
    • 给出MFO基本定义
    • 给出多任务环境下种群个体之间如何进行性能评价及比较的几个定义
  • MFO vs. MOO
  • MFEA
    • 种群初始化
    • 遗传机制
    • 择优评估
    • 选择算子
    • MFEA的突出特征—salient features
  • 参考文献及链接

写在前边:本文是自己的理解笔记,用作本人学习记录。写博客的时候主要参考了原论文以及其他博主的优秀文章,具体链接在文末。

多目标进化优化,多任务学习,多任务进化优化

简单介绍基本概念

多目标进化优化(Multiobjective Optimization):
 基本概念:多目标优化的目标是求得一组解使得多个目标在给定区域内尽可能达到最优。更多可参考:进化计算(三)——多目标优化基本概念。

 经典进化算法:

  • NSGA-Ⅱ算法:基于Pareto支配关系解决多目标进化优化问题;
  • MOEA/D算法:基于分解的方法解决多目标进化优化问题。

多任务学习(Multi-task learning, MTL):多任务学习是一种十分重要的机器学习模式,旨在使用其他相关任务来提升主要任务的泛化能力。多任务学习是一种集成学习方法(ensemble approach)。优化过程中,多个任务共享一个结构,这个结构里面的参数在优化的时候会被所有任务影响。通过对几个任务同时训练而使得多个任务互相影响,这样在所有任务收敛的时候,这个结构就相当于融合了所有任务,因此理论上它的泛化能力是比单任务要好的。

多任务进化优化:受多任务学习算法思想的启发,A. Gupta等人将多任务的概念引入进化优化领域,并提出了一种多任务进化优化的算法:多因子进化算法MFEA。进化多任务优化旨在将多个任务放在一起求解,并利用任务之间的关系加速优化算法的收敛。进化多任务优化是一种优化方法,而不是学习方法。

多目标进化优化和多任务进化优化的区别(个人理解)

多目标进化优化:专注解决一个优化任务,这个任务是一个多目标问题(存在多个相互冲突的目标)。优化结果是一个解集;
多任务进化优化:同时解决多个优化任务,这些优化任务可以是单目标问题,也可以是多目标问题。优化结果是每一个任务的解(集)。

换句话说,多目标进化优化问题所求解的结果是多个冲突目标之间的一种“均衡解集”,解集中的任一解对所有的目标函数都是一种相对较优但非最优的状态。而对于多任务进化优化问题,假设所有的任务都是单目标优化问题,那么所求解的优化结果是每个单目标优化问题的最优解的集合。

多任务学习、迁移学习、元学习

多任务学习 vs. 迁移学习:多任务学习也属于迁移学习的范畴,但是两者在本质上还是有一定区别的。迁移学习是借助别的领域知识,使得目标任务能够更好的解决,属于一种单向迁移;而多任务学习是要借助其它的任务来同时提升所有任务(而非某一个任务)的学习效果,属于一种双向迁移。更多可参考:迁移学习和多任务学习有什么本质区别。
元学习 vs. 迁移学习:元学习(Meta Learning)与迁移学习(Transfer Learning)的区别联系是什么。

融合:多任务学习&多目标优化

NIPS 2018 | 作为多目标优化的多任务学习:寻找帕累托最优解

多任务学习可以自然地建模为多目标优化问题:多任务学习本质上是一个多目标问题,因为不同任务之间可能产生冲突,需要对其进行取舍。本文将多任务学习视为多目标优化问题,使用多目标优化算法思想解决多任务学习问题,以寻求帕累托最优解。实验证明,本文提出的方法可以在现实假设下得到帕累托最优解。文章链接:https://arxiv.org/pdf/1810.04650v1.pdf。

--------------------------------------正文开始分界线---------------------------------------

摘要

 经典的进化算法多聚焦于一次性高效率地解决单个优化问题。尽管基于种群的搜索算法具有隐式并行性,但是目前为止还没有针对多任务的尝试(例如,使用一个单一的进化个体种群同时解决多个优化问题)。因此,本文将“进化多任务”作为一个新的范式引入优化进化计算领域。我们首先规范了进化多任务的含义,然后提出了一个解决这些问题的算法。该方法受到了多因子遗传这个生物文化模型的启发,该模型对复杂的发育特征通过遗传和文化因素的相互作用遗传给后代作出了解释。此外,我们开发了一种跨域优化平台,该平台允许同时解决多种不同问题。数值实验揭示了隐性基因转移在多任务环境中的几个潜在优势。最为显著地,我们发现改进遗传算法的创作和转移可以加速大量复杂优化函数的融合。

引言

 在未将“多任务”这一概念引入进化优化领域之前,优化问题大致可以分为两类:

  • 单目标优化SOO,搜素空间中的每个点都和一个标量目标函数相匹配;
  • 多目标优化MOO,搜索空间中的每个点都和一个目标函数值向量匹配。

 其中,该示例解决的就是SOO问题,而NSGA-Ⅱ和MOEA/D算法解决的就是MOO问题。引入多任务概念后,作者针对进化多任务待优化的问题提出了一类新的问题:multifactorial optimization (MFO)问题。为了具象地解释多任务,作者给出了如下的示例:在一个进化求解过程中同时解决两个现实生活中不同的供应链任务:1)车间作业调度问题(生产优化)和2)车辆路径规划问题(逻辑优化)。
 作者致力于通过本篇论文完成如下两个目标:1)在进化优化领域建立起区别于SOO和MOO的MFO概念;2)为MFO问题设计一个通用的进化算法,该算法能够以尽可能最有效的方式在多种优化问题上进行多任务处理。
 针对MFO问题,作者会使用一个完整的章节进行解释,所以引言中关于MFO问题的阐述在此就不再赘述。简单介绍一下算法的来源:为了设计这样一个通用的算法,作者引入了生物学领域的多因子遗传模型。该模型指出子代复杂的发育性状同时受到基因型和文化因素的双重影响。例如,个体的学习进化可能依赖于它的基因型,但是文化特质可能也会影响或修正遗传体系的选择操作。这些文化特质通常源于社会学习或者父代向子代传承的某些习惯和偏好。这与多任务进化过程中进化产生的子代受到多个任务的共同影响的思想十分相似。 因此,MFO问题设置了多个文化偏置块,每个文化偏置块均对应一个不同的优化任务。此外,多因子遗传为每个优化任务都建立了一个用于进化后代的独特环境。混合环境中已编码个体的迭代进化通过基因和文化因子的相互作用来模拟进行。基于此,作者将本文提出的算法命名为多因子进化算法multifactorial evolutionary algorithm (MFEA)。
 此外,由于多个任务可能具有相同性质也可能来自不同领域,为了解决跨域优化问题,作者提出了一种统一表示方法保证算法的通用性。该方法对每个变量进行0到1之间的随机键编码。这种编码方式下连续问题的解码是相对容易的,针对离散问题,作者也讨论了其他的技术以保证算法跨域优化的能力。
 论文大体框架如下:

  • section Ⅱ:规范了MFO的概念;
  • section Ⅲ:理论上对MFO和MOO进行区分;
  • section Ⅳ:详细描述MFEA;
  • section Ⅴ:通过数值连续优化问题展示使用任务之间潜在遗传互补性的益处,如进化多任务促成的;
  • section Ⅵ:讨论解决包含离散优化问题的扩展范式的技术;
  • section Ⅶ:展示进一步的实验结果。突出强调进化多任务用作基于云的计算智能工具的潜力,特别注意其跨域优化能力。
  • section Ⅷ:提出未来的一些重要研究方向。

MFO

 该部分规范了MFO概念并描述如何在多任务环境中评判种群中某个体的相关性能。

规范本文讨论的多任务问题

 前文中已经对多任务优化问题中任务之间的依赖关系进行了说明:多个任务之间可能是完全不相关的,也可能是存在一定的依赖关系。但是,本文讨论的多任务问题中任务之间不存在任何相互依赖关系的先验知识。换句话说,本文讨论的多任务问题中任务之间是独立不相关的。因此,多任务问题的目标就不再是寻求所有目标函数之间的最优平衡,而是基于隐含并行性充分协同优化每个任务

给出MFO基本定义

 在本文设定多任务背景下,作者将MFO问题定义为: 建立在基于种群搜索的隐含并行性下的进化多任务范式,为了求解得到{x1,x2,...,xK−1,xK}=argmin{f1(x),f2(x),...,fK−1(x),fK(x)}s.t.xj∈Xj,j=1,2,...,K\left\{x_1,x_2,...,x_{K-1},x_K\right\}=argmin\left\{f_1(x),f_2(x),...,f_{K-1}(x),f_K(x)\right\} \\ s.t. x_j\in X_j,j=1,2,...,K{x1​,x2​,...,xK−1​,xK​}=argmin{f1​(x),f2​(x),...,fK−1​(x),fK​(x)}s.t.xj​∈Xj​,j=1,2,...,K
 上式中,每一个fj(x)f_j(x)fj​(x)被看作是影响单一种群个体进化的一个因子(也即是每一个任务/优化问题,其中所有的优化问题都是最小化优化)。因此,可以称该问题为K-因子问题(K-factorial problem)。

给出多任务环境下种群个体之间如何进行性能评价及比较的几个定义

 为了设计MFO问题的进化算法,很有必要制定多任务环境下种群个体间相互比较的通用方法。基于此,我们首先对种群PPP中的每个个体pip_ipi​定义一些性质,其中i∈{1,2,..,∣P∣}i\in\left\{1,2,..,|P|\right\}i∈{1,2,..,∣P∣}。注意到所有的个体被编码到统一的搜索空间(X1,X2,...,XKX_1,X_2,...,X_KX1​,X2​,...,XK​),然后被解码为针对K个优化任务的特定解表示方式。pip_ipi​的编码方式可以写作{x1i,x2i,..,xKi}\left\{x_1^i,x_2^i,..,x_K^i\right\}{x1i​,x2i​,..,xKi​}。其中,x1i∈X1,x2i∈X2,...,xKi∈XKx_1^i\in X_1,x_2^i\in X_2,...,x_K^i\in X_Kx1i​∈X1​,x2i​∈X2​,...,xKi​∈XK​(即:P个个体中,每个个体都由分别属于K个任务环境中的K个特定解组成)。
 文章中作者给出了如下5个定义来解决在多任务环境中如何评判种群某个体相关性能的问题:

  • Factional Cost(因子代价): 对于给定的任务TjT_jTj​,个体pip_ipi​的因子代价被定义为Ψji=λ⋅δji+fji\Psi_{j}^{i}=\lambda \cdot \delta_{j}^{i}+f_{j}^{i}Ψji​=λ⋅δji​+fji​;其中,λ\lambdaλ是惩罚因子,fjif_{j}^{i}fji​和δji\delta_{j}^{i}δji​分别个体pip_ipi​在任务TjT_jTj​上的目标函数值和违反约束总数。易判断,如果pip_ipi​是任务TjT_jTj​的合理解(违反约束总数为0),那么Ψji=fji\Psi_{j}^{i}=f_{j}^{i}Ψji​=fji​。越小支配关系越高
  • Factional Rank(因子等级):个体pip_ipi​在任务TjT_jTj​中的因子等级rjir_{j}^{i}rji​被定义为按照Ψj\Psi_{j}Ψj​升序排序后pip_ipi​在种群成员列表中的索引值。出现排序相同的情况时,使用随机方法打破这种平衡。然而,相等个体在任务TjT_jTj​中的性能仍是相同的,因此作者标注他们为j-counterparts。越小支配关系越高
  • Scalar Fitness(适应度标量值):个体pip_ipi​的适应度标量值φi\varphi_iφi​可由因子等级列表{r1i,r2i,...,rKi}\left\{ r_1^i,r_2^i,...,r_K^i\right\}{r1i​,r2i​,...,rKi​}中的最优等级(即该个体在所有任务中的最优等级)表示。例如,φi=1/min⁡j∈{1,...,K}{rji}\varphi_i=1/\min_{j\in\left\{1,...,K\right\}}\left\{r_j^i\right\}φi​=1/minj∈{1,...,K}​{rji​}。基于此定义,所有个体的适应度值都被统一标量化,个体间就可以直接进行性能对比了。越大支配关系越高

基于上述三个定义即可给出如下支配(≫\gg≫)关系:ifφa>φb,thenpa≫pbif \text{ } \varphi_a>\varphi_b,then\text{ } p_a\gg p_bif φa​>φb​,then pa​≫pb​ 。

  • Skill Factor(技能因子):个体pip_ipi​的技能因子τi\tau_iτi​=该个体最擅长处理的任务的索引。例如,τi=argminj{rji},j∈{1,2,...,K}\tau_i=argmin_j\left\{r_j^i\right\},j\in\left\{1,2,...,K\right\}τi​=argminj​{rji​},j∈{1,2,...,K}。若两个个体拥有相同的技能因子(例如τa=τb=j\tau_a=\tau_b=jτa​=τb​=j),显然他们就是j-counterparts,作者也将其标注为strong-counterparts。
  • Multifactional Optimality(多因子最优):如果∃j∈{1,2,..,K}\exist j\in\left\{1,2,..,K\right\}∃j∈{1,2,..,K},对于所有的合理解xj∈Xjx_j\in X_jxj​∈Xj​都有fj∗≤fj(xj)f_j^\ast \le f_j(x_j)fj∗​≤fj​(xj​),那么个体p∗p^\astp∗(目标函数值列表为{f1∗,f2∗,...,fK∗}\left\{f_1^\ast,f_2^\ast,...,f_K^\ast\right\}{f1∗​,f2∗​,...,fK∗​})即为多因子问题的最优解。

MFO vs. MOO

 某些情况下,MOEA算法也可以用于解决MFO问题。但是两者还是存在根本上的差异的。

  • MFO旨在利用基于种群搜索优化的隐含并行性挖掘多任务之间隐含的基因互补性。
  • MOEA旨在高效地解决同一任务中竞争目标函数之间的冲突。

 因此,MOO问题中的Pareto最优解在MFO问题中被多因子最优解所取代。多因子最优解并不像Pareto最优解一样在不同的目标函数之间寻求一种好的平衡。相反,多因子最优解致力于寻找至少一个目标函数的全局最优解。
 作者以一个图例形象地说明了两者之间的区别:对MOO问题而言,得到的Pareto解集应为{p2,p3,p4,p5}\left\{p_2,p_3,p_4,p_5\right\}{p2​,p3​,p4​,p5​};而对于MFO问题(假设每个任务都是拥有确切解最小化单目标优化问题),多因子最优解就变成了{p1,p2,p5,p6}\left\{p_1,p_2,p_5,p_6\right\}{p1​,p2​,p5​,p6​}。

MFEA

 MFEA算法的提出受到生物文化模型多因子遗传的启发。由于算法是基于生物和文化构建块的传播(基因和模因)由父代生成子代的,因此MFEA算法也属于模因论计算领域。

 特别地,文化因素的影响通过多因子遗传的两个特征协同工作:1)选型交配和2)垂直文化传播。本文会对这些特征和它们的计算等价物进行详细讨论。虽然MFEA算法的基本框架和传统的带有精英策略的进化算法具有一定的相似之处,但是有了前边提到的模因论对算法的增强后,该算法就被转变成一个高效的MFO问题解决器。

种群初始化

 假设有K个待同时优化的任务,第jjj个任务的维度为DjD_jDj​。因此,我们可以定义一个多任务问题的统一搜索空间维度为Dmultitask=max⁡j{Dj}D_{multitask}=\max_j\left\{D_j\right\}Dmultitask​=maxj​{Dj​}。在种群初始化步骤中,每个个体被赋予一个DmultitaskD_{multitask}Dmultitask​维随机变量组成的向量(每个随机变量的范围固定在[0,1])。这个向量构成该个体的染色体(完整基因型)。本质上,统一搜索空间的第iii维可以用一个随机键值yiy_iyi​表示,随机变量的固定范围也代表了统一搜索空间的盒边界约束(box-constraint)。针对任务TjT_jTj​,我们仅使用染色体的首个DjD_jDj​维度的随机键值。使用此种编码方式(取代将多个优化任务的染色体简单串联成D1+D2+...+DKD_1+D_2+...+D_KD1​+D2​+...+DK​的形式)的动机在于以下两方面:

  • 从实用的观点出发,该种编码方式可以规避同时解决多维搜索空间中多个任务时带来的维数灾难相关问题。【维数灾难:当维数提高时,搜索空间的体积提高太快,因而可用数据变得很稀疏。在高维空间中,所有的数据都很稀疏,从很多角度看都不相似,因而平常使用的数据组织策略变得极其低效】
  • 从理论上来讲,该种编码方式高效地发挥了基于种群进行搜索的优势。其一是因为:和不同优化任务相关的基因块都包含在了统一的基因池中,它们使用EA算法并行进化。其二,该种编码方式能够有效地将发现的隐含有用基因型从一个任务转移到另一个任务中。此外,在这种编码方式下,种群中的单一个体可能会继承和多个优化任务相关的基因块,这也使得多因子遗传模型在MFEA算法中的类比应用更有意义。

summarysummarysummary:每个任务的维度不同,该多任务问题的维度定义为所有任务的最大维度。种群中的每个个体都被初始化为DmultitaskD_{multitask}Dmultitask​维的染色体。处理任务TjT_jTj​(该任务的维度为DjD_jDj​)时,我们截取前DjD_jDj​维的随机变量作为该任务的个体染色体(存疑?)。

遗传机制

 经典的进化算法使用交叉和变异这一对生成算子,这和它们的生物学名称相似。MFEA算法的关键特征是随机选择用于交叉产生子代的父代必须满足某些条件——非随机或者选型交配,这使得个体倾向于与具有相同文化背景的其他个体进行匹配。在MFEA算法中,技能因子τ\tauτ即为个体进化时文化偏置的计算表现形式。因此,如果两个随机选择的拥有相同的技能因子,那么他们就可以交叉产生子代。反之,如果两父代的技能因子不同,则依据规定的随机交配概率(rmprmprmp)进行交叉,或者进行变异。选型交配产生子代的算法及规则见Algorithm2Algorithm\text{ }2Algorithm 2。

 自然界中,选型交配主要在多因子遗传模型中起到解释几代人之间血统特征的作用。
对rmprmprmp取值的讨论:本文中,随机交叉概率rmprmprmp主要用于平衡搜索空间的缩小和扩展。rmp=0rmp=0rmp=0意味着只允许文化(τ\tauτ)相同的个体进行交叉进化,rmp=1rmp=1rmp=1则意味着允许完全地随机交配。在rmp=0rmp=0rmp=0时(有相同的技能因子就交叉,技能因子不同就变异),算法2有效地促进了对于搜索空间中限制区域的扫描,但是也会存在陷入局部最优的趋势。相比之下,在rmprmprmp取较大值时,就可以增强对整个搜索区域的搜索,也有助于规避局部最优。此外,仅在相同文化背景下的个体之间进行交配也可能会导致来自其他文化背景中良好和多样遗传物质的缺失。因此,rmprmprmp的取值必须同时确保对于小区域搜索空间的扫描以及整个搜索空间的探索之间的良好平衡
 最后,当选择交叉和变异算子时需谨记:即使基础优化问题是离散的,前文提到的随机键值始终被解释为连续变量。当随机键值被解释为连续变量时,鼓励使用现有的实数编码生成算子(同NSGA-Ⅱ),或者设计新的算子(有助于改善对与MFO问题相关的组合函数空间的导航/扫描力)。

择优评估

 首先回顾一下种群及个体的表示方法:
CurrentPop={p1,p2,...,p∣P∣},pi={x1i,x2i,...xji,...,xmultitaski}s.t.i∈{1,2,...,∣P∣},j∈{1,2,...,multitask}Current\text{ }Pop=\left\{p_1,p_2,...,p_{|P|}\right\} ,p_i=\left\{x_1^i,x_2^i,...x_j^i,...,x_{multitask}^i\right\}\\s.t.\text{ }i\in\left\{1,2,...,|P|\right\},j\in\left\{1,2,...,multitask\right\}Current Pop={p1​,p2​,...,p∣P∣​},pi​={x1i​,x2i​,...xji​,...,xmultitaski​}s.t. i∈{1,2,...,∣P∣},j∈{1,2,...,multitask}
 对任务TjT_jTj​中的一个个体进行评估的第一步即是完成个体的解码工作,将其随机键值解码成一个对该任务有意义的输出值(随机键值是该个体在统一搜索空间中的表现形式,从随机键值可以推导出其在特定问题中解的表达形式)。

  • 对于连续优化问题,解码的实现是十分直接的。例如:实际问题中的第iii个变量xix_ixi​的边界范围为[Li,Ui][L_i,U_i][Li​,Ui​]。如果个体相对应的随机键值为yiy_iyi​,那么他在实际问题搜索空间中即被映射为xi=Li+(Ui−Li)⋅yix_i=L_i+(U_i-L_i)\cdot y_ixi​=Li​+(Ui​−Li​)⋅yi​。
  • 对于离散问题,不同的问题通常需要采用不同解码方案。作者会在第Ⅵ章讨论一些有名的离散问题。

 不言而喻,对待解决的每个问题的每个个体都进行评估会产生巨大的计算量,因此是不可取的。为了使得MFO问题可以计算,MFEA算法必须进行高效地设计。通过减少尽可能多的函数评估次数即可实现高效计算。通过观察我们发现MFEA生成的个体不可能在所有的任务上都表现良好。因此,理想情况下个体仅针对几个表现良好的选定任务进行评估即可。为了将这个特征以一种较为简单的方式合并到MFEA算法中,我们汲取了模因论中垂直文化传播这一概念的灵感。在多因子遗传中,垂直文化传播是一种和生物学遗传共同执行的遗传模式,使后代的表型直接受到其父母表型的影响。通过使后代模仿它们任一父代的技能因子(文化特征)即可完成垂直文化传播思想在MFEA算法中的计算等价。这个特征被标记为选择性模仿(selective imitation),具体实现算法见Algorithm3Algorithm\text{ }3Algorithm 3。相反地,该算法中仅针对一个任务进行个体评估,而不是针对每一个任务进行个体评估。

 值得注意的是以上述规定的方式引入文化因素的影响显著减少了所需要评估的函数数量。事实上,对于KKK因子问题,和个体对所有的任务都进行评估相比,函数评估次数几乎减少了K的一个因子。

选择算子

 如Algotithm1Algotithm\text{ }1Algotithm 1所示,MFEA算法遵循精英策略,确保最优的个体能够在进化过程中生存下来。为了标识最优个体,作者使用第Ⅱ章中提到的技术以便在多任务处理时比较种群成员。

MFEA的突出特征—salient features

 标准的进化算法往往会生成一个包含大量候选解的种群,所有的进化算法都不太可能胜任手头的任务。相反,在多任务环境中,随机生成的个体或者转基因的个体能够胜任至少一个任务。MFEA机制通过有效地将种群分离到不同的技能组(每个技能组擅长一个不同的任务)保障每个个体至少能够胜任至少一个任务。更重要的是,在特定技能组内产生的遗传物质也可能对另一项任务有用。因此,在这种情况下,跨任务的遗传转移范围可能会导致发现其他难以找到的全局最优解。在MFEA算法中,遗传物质的转移主要是通过不同技能组之间进行受控情况下的偶发染色体交叉进行的。这是通过协同运行的算法的两个组件隐式实现的:

  1. rmprmprmp:允许用于不同技能因子的个体之间以一定的概率进行交配,因此可以为子代生成一个抚养的多文化环境;
  2. Algorithm3Algorithm\text{ }3Algorithm 3:生成的后代可以随机选择父代的技能因素来模仿。

 作者认为,虽然不同技能组之间过度的交流可能会破坏集中搜索(同一技能组之间文化特征的遗传),但禁止交流(仅在同一技能组之间遗传)也是不可取的,因为它限制了探索整个种群提供的隐式并行的力量。

参考文献及链接

[1]A. Gupta, Y. Ong and L. Feng.Multifactorial Evolution: Toward Evolutionary Multitasking.[J].IEEE Transactions on Evolutionary Computation, 2015(3):343-357;
[2]MFO问题与MFEA算法;
[3]多任务进化优化算法(一)——多因子进化算法(MFEA);
[4]NIPS 2018 | 作为多目标优化的多任务学习:寻找帕累托最优解;
[5]多目标学习与优化理论及应用;
[6]多任务学习;
[7]迁移学习和多任务学习有什么本质区别;
[8]浅谈多因子进化算法(MFEA);

进化计算(十)——MFEA算法详解Ⅰ相关推荐

  1. 十大经典排序算法详解(三)-堆排序,计数排序,桶排序,基数排序

    养成习惯,先赞后看!!! 你的点赞与关注真的对我非常有帮助.如果可以的话,动动手指,一键三连吧!!! 十大经典排序算法-堆排序,计数排序,桶排序,基数排序 前言 这是十大经典排序算法详解的最后一篇了. ...

  2. 十大经典排序算法-桶排序算法详解

    十大经典排序算法 十大经典排序算法-冒泡排序算法详解 十大经典排序算法-选择排序算法详解 十大经典排序算法-插入排序算法详解 十大经典排序算法-希尔排序算法详解 十大经典排序算法-快速排序算法详解 十 ...

  3. 十大经典排序算法-快速排序算法详解

    十大经典排序算法 十大经典排序算法-冒泡排序算法详解 十大经典排序算法-选择排序算法详解 十大经典排序算法-插入排序算法详解 十大经典排序算法-希尔排序算法详解 十大经典排序算法-快速排序算法详解 十 ...

  4. 十大经典排序算法-选择排序算法详解

    十大经典排序算法 十大经典排序算法-冒泡排序算法详解 十大经典排序算法-选择排序算法详解 十大经典排序算法-插入排序算法详解 十大经典排序算法-希尔排序算法详解 十大经典排序算法-快速排序算法详解 十 ...

  5. 十大经典排序算法详解

    本文转自 <卢明冬的博客> 文章目录 排序算法的分析和评价 2.十大排序经典算法总览 2.1 排序算法的分类 2.2 排序算法的性能 2.3 各阶复杂度性能对比 2.4 排序算法的初始状态 ...

  6. 十大经典排序算法-希尔排序算法详解

    十大经典排序算法 十大经典排序算法-冒泡排序算法详解 十大经典排序算法-选择排序算法详解 十大经典排序算法-插入排序算法详解 十大经典排序算法-希尔排序算法详解 十大经典排序算法-快速排序算法详解 十 ...

  7. 十大经典排序算法-归并排序算法详解

    十大经典排序算法 十大经典排序算法-冒泡排序算法详解 十大经典排序算法-选择排序算法详解 十大经典排序算法-插入排序算法详解 十大经典排序算法-希尔排序算法详解 十大经典排序算法-快速排序算法详解 十 ...

  8. 十大经典排序算法-冒泡排序算法详解

    十大经典排序算法 十大经典排序算法-冒泡排序算法详解 十大经典排序算法-选择排序算法详解 十大经典排序算法-插入排序算法详解 十大经典排序算法-希尔排序算法详解 十大经典排序算法-快速排序算法详解 十 ...

  9. android动态贴纸实现原理,人脸动态贴纸sdk算法详解,人脸动态贴纸功能如何实现...

    原标题:人脸动态贴纸sdk算法详解,人脸动态贴纸功能如何实现 泛娱乐行业在互联网领域中发展趋势逐渐增强,而直播.短视频.视频社交等作为头部产品受到了众多用户的关注和喜爱.为了能够更好的满足用户体验,众 ...

最新文章

  1. struts1-2,springMVC原理基本对比(单例,多例)-servlet与filter区别
  2. 【Error】InterfaceError (0, '')
  3. 阿里云域名备案时产品类型
  4. 成功解决Both binary classification-only and multiclassification-only loss function or metrics specified
  5. JavaScript内存释放
  6. JavaSE(二十四)——冒泡排序、选择排序、直接插入排序以及二分查找
  7. linux在双系统中消失了,双系统重新安装windows后,ubuntu选项消失
  8. zookeeper和etcd有状态服务部署
  9. mysql 前缀索引 语法_PHP 之Mysql优化
  10. Eclipse导入他人的Maven工程报错
  11. java毕设可以用结构化方法吗,php,java,jsp网络留言薄,怎么实现一个网络留言簿好毕设指导轻松完成...
  12. 项目变更管理:变更流程
  13. 2017 matlab 仿真,【2017年整理】Simulink仿真教程.ppt
  14. IEEE 802各个协议
  15. 15个国外最好的电子商务建站程序
  16. 计算机学院杨洋,杨洋-湖北大学计算机与信息工程学院
  17. 阻塞数据直到步骤都完成帮助文档
  18. 华为手机专家诊断APP设置自启动
  19. ART与SART代数重建算法
  20. 0. 让我尝试说服你开始尝试OCaml

热门文章

  1. CSAPP(深入理解计算机系统)
  2. Proe Creo 二次开发之模型装配--获得装配约束
  3. 学术资源链接(英文论文、书籍等)
  4. 云平台是什么,云平台的发展对现今的企业和个人带来的好处
  5. 一芯FC1178BC/FC1179主控U盘量产修复指南
  6. 蚂蚁金服 SOFAStack 团队:开源不是一锤子买卖 | 码云封面人物第 16 期
  7. Verilog实现VGA通信的驱动
  8. 【数据结构-矩阵】矩阵的相关公式推导
  9. CISCO ASA5520 与SMTP问题
  10. Hadoop 深入浅出----HDFS(2)