这是整个架构师连载系列,分为9大步骤,我们现在还在第一个步骤:程序设计和开发->数据结构与算法。

我们今天讲解重点讲解算法。

算法思想

1 贪心思想

顾名思义,贪心算法总是作出在当前看来最好的选择。也就是说贪心算法并不从整体最优考虑,它所作出的选择只是在某种意义上的局部最优选择。当然,希望贪心算法得到的最终结果也是整体最优的。虽然贪心算法不能对所有问题都得到整体最优解,但对许多问题它能产生整体最优解。如单源最短路经问题,最小生成树问题等。在一些情况下,即使贪心算法不能得到整体最优解,其最终结果却是最优解的很好近似。在面临选择时,贪心算法都作出对眼前来讲最有利的选择,不考虑对将来的不良影响,每个选择一旦做出,不可更改,不允许回溯,根据不同的贪心策略,贪心算法就不同,贪心解的质量也不同,所以贪心策略很重要。可以看出,此算法思想很简单,具有高效性,但不一定得出最优解。

2 分治法

当我们求解某些问题时,由于这些问题要处理的数据相当多,或求解过程相当复杂,使得直接求解法在时间上相当长,或者根本无法直接求出。对于这类问题,我们往往先把它分解成几个子问题,找到求出这几个子问题的解法后,再找到合适的方法,把它们组合成求整个问题的解法。如果这些子问题还较大,难以解决,可以再把它们分成几个更小的子问题,以此类推,直至可以直接求出解为止。这就是分治策略的基本思想。

3 动态规划

动态规划算法通常用于求解具有某种最优性质的问题。在这类问题中,可能会有许多可行解。每一个解都对应于一个值,我们希望找到具有最优值的解。动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。与分治法不同的是,适合于用动态规划求解的问题,经分解得到子问题往往不是互相独立的。若用分治法来解这类问题,则分解得到的子问题数目太多,有些子问题被重复计算了很多次。如果我们能够保存已解决的子问题的答案,而在需要时再找出已求得的答案,这样就可以避免大量的重复计算,节省时间。我们可以用一个表来记录所有已解的子问题的答案。不管该子问题以后是否被用到,只要它被计算过,就将其结果填入表中。这就是动态规划法的基本思路。

4 搜索法

搜索法包含穷举搜索,深度优先搜索,广度优先搜索,回溯法,分支限界法,其实这些算法的基础就是穷举搜索,只是加上一定的原则来优化过程,就形成了后面的几种算法,回溯法就是在深度优先搜索的基础上允许回溯,分支限界法是在广度优先搜索基础上允许剪枝,学习时主要学习思想,这些算法名字不要太在意。

5 新近出现的部分算法简介

① 遗传算法

从达尔文的生物进化论中得到启发,借鉴自然选择和进化的原理,模拟生物在自然界的进化过程所形成的一种优化求解方法,遗传算法从代表问题的可能潜在解集的一个种群出发,一个种群有一定数量的个体组成,每个个体实际上是染色体带有特征的实体,每一代根据个体的适应度大小挑选个体,并借助遗传算子进行交叉和变异,得到近似最优解。

② 模拟退火算法

他的出发点是物理中固体的退火过程与一般组合优化之间的相似性,固态物质退火时,通常先加温,使其中的粒子自由游动,然后逐渐降低温度,粒子也逐渐形成低能态的晶格,最终形成最低能量的基态。所以他从某一较高初温开始,伴随温度参数的不断下降重复抽样,最终得到全局最优解,他是基于概率的。

③ 蚁群算法

蚁群算法是模拟自然界蚂蚁觅食过程的一种分布式,启发式群体智能算法,用于求解复杂的组合优化问题,如TSP,JSSP,GCP等问题。

6 递归法

所谓递归,就是指如果需要求解当前状态就需要求解其依赖的迁移状态。

一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。

采用递归描述的算法通常有这样的特征:

1)为求解规模为N的问题,设法将它分解成规模较小的问题;

2)然后从这些小问题的解方便地构造出大问题的解,并且这些规模较小的问题也能采用同样的分解和综合方法,分解成规模更小的问题,并从这些更小问题的解构造出规模较大问题的解。

3)这样的分解方法具有收敛性。即存在一个递归返回状态。

7 迭代法

也称辗转法,是一种不断用变量的旧值递推新值的过程。

最常见的迭代法是牛顿法。其他还包括最速下降法、共轭迭代法、变尺度迭代法、最小二乘法、线性规划、非线性规划、单纯型法、惩罚函数法、斜率投影法、遗传算法、模拟退火等等。

利用迭代算法解决问题,需要做好以下三个方面的工作:

1)迭代变量:在可以用迭代算法解决的问题中,至少存在一个直接或间接地不断由旧值递推出新值的变量,这个变量就是迭代变量。

2)迭代关系:指如何从变量的前一个值推出其下一个值的公式(或关系)。迭代关系式的建立是解决迭代问题的关键,通常可以使用递推或倒推的方法来完成。

3)迭代过程:迭代过程的控制通常可分为两种情况:一种是所需的迭代次数是个确定的值,可以计算出来;另一种是所需的迭代次数无法确定。对于前一种情况,可以构建一个固定次数的循环来实现对迭代过程的控制;对于后一种情况,需要进一步分析出用来结束迭代过程的条件。

迭代法都可以转为递归法。迭代法可以理解为具有递归性质的非递归解法。当然,非递归解法还可利用栈的思想。

经典算法

排序算法

排序大的分类可以分为两种:内排序和外排序。在排序过程中,全部记录存放在内存,则称为内排序,如果排序过程中需要使用外存,则称为外排序。下面讲的排序都是属于内排序。

内排序有可以分为以下几类:

(1)、插入排序:直接插入排序、二分法插入排序、希尔排序。

(2)、选择排序:简单选择排序、堆排序。

(3)、交换排序:冒泡排序、快速排序。

(4)、归并排序

(5)、基数排序

查找算法

1. 顺序查找

2. 二分查找

3. 插值查找

4. 斐波那契查找

5. 树表查找

6. 分块查找

7. 哈希查找

查找是在大量的信息中寻找一个特定的信息元素,在计算机应用中,查找是常用的基本运算,例如编译程序中符号表的查找。以上是常见的七种查找算法,说是七种,其实二分查找、插值查找以及斐波那契查找都可以归为一类——插值查找。插值查找和斐波那契查找是在二分查找的基础上的优化查找算法。

后续再详细介绍具体的数据结构。

你可能也喜欢:

  1. java架构师进阶之独孤九剑:数据结构以及书籍推荐
  2. java架构师进阶独孤九剑系列(一):数据结构与算法

java架构师进阶之独孤九剑(一)-算法思想与经典算法相关推荐

  1. java架构师进阶之独孤九剑:数据结构以及书籍推荐

    这是整个java架构师连载系列,分为9大步骤,我们现在还在第一个步骤:程序设计和开发->数据结构与算法. " 如果说 Java 是自动档轿车,C 就是手动档吉普.数据结构呢?是变速箱的 ...

  2. java架构师进阶独孤九剑系列(一):数据结构与算法

    " 架构师进阶系列之独孤九剑,这套秘籍如果你能完整学会,年薪至少60万起,今天是架构师进阶连载开启篇. Java程序员成长为架构师进阶步骤 未来我会用1-2个月在实战为大家讲解架构师的九大必 ...

  3. 架构师进阶之独孤九剑:设计模式详解

    我们继续架构师进阶之独孤九剑进阶,目前我们仍然在第一阶段:程序设计和开发环节. " 设计模式不仅仅只是一种规范,更多的是一种设计思路和经验总结,目的只有一个:提高你高质量编码的能力.以下主要 ...

  4. java crm视频,Java架构师进阶篇CRM项目视频教程

    ├源代码.rar ├<01_CRM项目> │  ├<0908> │  │  ├ │  │  │  ├01-crm介绍.avi │  │  │  ├02-crm框架.avi │ ...

  5. 史上最强Java架构师的13大技术能力讲解! | 附架构师能力图谱

    从程序员进阶成为架构师,并非一蹴而就,需要系统化.阶段性地学习,在实战项目中融会贯通,这如同打怪通关,我们得一关一关突破,每攻破一个关口,就能得到更精良的装备,技能值也随之不断增长,直至大获全胜. 凡 ...

  6. 一个十年Java架构师的成长之路分享

    前言 我搞JAVA也有些日子了, 因为我比较贪玩,上进心不那么强, 总是逼不得已为了高薪跳槽才去学习, 所以也没混成什么大牛, 但好在现在也已经成家立业, 小日子过的还算滋润, 起码顶得住一月近万元的 ...

  7. java 优秀源码_想要快速进阶Java架构师?这份超强(长)学习计划单 请签收!...

    优秀工程师的成长之路就是一条不断打怪升级之路的"修仙之路"! 而Java程序员一向比别人更难,如果说大家都在修仙的话,java程序员简直神似"剑修",入行枯燥精 ...

  8. 进阶Java架构师必看书:大型架构+框架+性能优化+中间件+分布式

    进阶Java架构师必看书:大型架构+框架+性能优化+中间件+分布式 优知学院 2018-09-05 07:21:00 1.大型网站技术架构:核心原理与案例分析 本书通过梳理大型网站技术发展历程,剖析大 ...

  9. 月薪25K-35K|格灵研究院招聘算法工程师、Java架构师

    3D视觉工坊致力于推荐最棒的工作机会,精准地为其找到最佳求职者,做连接优质企业和优质人才的桥梁.如果你需要我们帮助你发布实习或全职岗位,请添加微信号「CV_LAB」. 公司介绍 深圳市格灵人工智能与机 ...

最新文章

  1. python包引用问题
  2. light oj 1011Marriage Ceremonies
  3. Hive中文注释乱码解决方案
  4. C语言序列是否有序、序列中删除指定数字、序列中整数去重、有序序列合并问题
  5. oracle 图像包,完美简单详细,图形安装Oracle11g(Oracle Linux系统)
  6. Linux(二):VMware虚拟机中Ubuntu安装详细过程
  7. CORS 跨域 实现思路及相关解决方案
  8. 报表软件FineReport如何连接SAP HANA
  9. 专用于个人简历的latex模板
  10. php 如何添加备案号,wordpress如何添加备案信息
  11. 干支纪年法简便算法_我国为何放弃黄帝纪年和孔子纪年,转而选择了耶稣诞辰纪年法?...
  12. 图片切割 - 九宫格
  13. 梅科尔工作室-杨灿-鸿蒙笔记2
  14. 浪涌-雷击浪涌的防护
  15. (五)arm裸机开发---主频和时钟配置
  16. 搜索官方的一篇相关性文章分享
  17. 最令我。。。。的一首诗
  18. html设定按钮位置示例
  19. ydisk安卓版本_DiskInfo下载-DiskInfo(手机磁盘使用情况)下载v4.9.9 (build 10) 安卓版-西西软件下载...
  20. 2021中青杯数学建模A题思路详细分析 代码?

热门文章

  1. 在2008 server安装vm server时发生的错误error1718、error1335……
  2. c study_13
  3. *如何循序渐进向DotNet架构师发展(转)
  4. 软件项目管理的质量保证
  5. MySQL一张innodb表列个数的限制和engine的选择
  6. 【漫画】25岁程序员 VS 35岁程序员,塑造自己的不可替代性,才能让自己更有价值 ​...
  7. nyoj 586 疯牛(二分+贪心)
  8. 海量url mysql_海量数据mysql优化步骤
  9. 可怕的乖孩子_当今的中国,有句很可怕的话:所有的乖孩子注定不幸福!
  10. uni-ui介绍uni-api