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

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

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

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

算法思想

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

1 贪心思想

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

2 分治法

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

3 动态规划

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

4 搜索法

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

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

① 遗传算法

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

② 模拟退火算法

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

③ 蚁群算法

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

6 递归法

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

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

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

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

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

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

7 迭代法

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

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

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

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

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

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

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

经典算法

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

排序算法

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

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

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

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

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

(4)、归并排序

(5)、基数排序

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

查找算法

1. 顺序查找

2. 二分查找

3. 插值查找

4. 斐波那契查找

5. 树表查找

6. 分块查找

7. 哈希查找

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

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


money.jpg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/480491.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构--链表--单链表中环的检测,环的入口,环的长度的计算

就如数字6一样的单链表结构,如何检测是否有6下部的○呢,并且求交叉点位置 思路 使用快慢指针(一个一次走2步,一个走1步),若快慢指针第一次相遇,则有环 慢指针路程 sabs absab 快指针路程 2sa…

ACL 2010-2020研究趋势总结

一只小狐狸带你解锁 炼丹术&NLP 秘籍作者:哈工大SCIR 车万翔教授导读2020年5月23日,有幸受邀在中国中文信息学会青年工作委员会主办的AIS(ACL-IJCAI-SIGIR)2020顶会论文预讲会上介绍了ACL会议近年来的研究趋势,特整…

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

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

知识表示发展史:从一阶谓词逻辑到知识图谱再到事理图谱

研究证实,人类从一出生即开始累积庞大且复杂的数据库,包括各种文字、数字、符码、味道、食物、线条、颜色、公式、声音等,大脑惊人的储存能力使我们累积了海量的资料,这些资料构成了人类的认知知识基础。实验表明,将数…

领域应用 | 基于知识图谱的警用安保机器人大数据分析技术研究

本文转载自公众号:警察技术杂志。 郝久月 樊志英 汪宁 王欣 摘 要:构建大数据支撑下的智能应用是公安信息化发展的趋势,警用安保机器人大数据分析平台的核心功能包括机器人智能人机交互和前…

数据挖掘学习指南!!

入门数据挖掘,必须理论结合实践。本文梳理了数据挖掘知识体系,帮助大家了解和提升在实际场景中的数据分析、特征工程、建模调参和模型融合等技能。完整项目实践(共100多页)后台回复 数据挖掘电子版 获取数据分析探索性数据分析&am…

数据结构--栈--顺序栈/链式栈(附: 字符括号合法配对检测)

栈结构:先进后出,后进先出,像叠盘子一样,先叠的后用。 代码github地址 https://github.com/hitskyer/course/tree/master/dataAlgorithm/chenmingming/stack 1.顺序栈(数组存储,需给定数组大小&#xff0c…

银行计考试-计算机考点2-计算机系统组成与基本工作原理

版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。 https://blog.csdn.net/sinat_33363493/article/details/53647129 </div><link rel"stylesheet" href"https://csdnimg.cn/release/pho…

我们的实践: 400万全行业动态事理图谱Demo

历史经验知识在未来预测的应用 华尔街的独角兽Kensho&#xff0c;是智能金融Fintech的一个不得不提的成功案例&#xff0c;这个由高盛领投的6280万美元投资&#xff0c;总融资高达7280万美元的公司自推出后便名声大噪。Warren是kensho是一个代表产品&#xff0c;用户能够以通俗…

蚂蚁花呗团队面试题:LinkedHashMap+SpringCloud+线程锁+分布式

一面 自我介绍 map怎么实现hashcode和equals,为什么重写equals必须重写hashcode 使用过concurrent包下的哪些类&#xff0c;使用场景等等。 concurrentHashMap怎么实现&#xff1f;concurrenthashmap在1.8和1.7里面有什么区别 CountDownLatch、LinkedHashMap、AQS实现原理 …

肖仰华 | SIGIR 2018、WWW2018 知识图谱研究综述

本文转载自公众号&#xff1a;知识工场。全国知识图谱与语义计算大会&#xff08;CCKS: China Conference on Knowledge Graph and Semantic Computing&#xff09;由中国中文信息学会语言与知识计算专委会定期举办的全国年度学术会议。CCKS源于国内两个主要的相关会议&#xf…

数据结构--栈--共享顺序栈

共享顺序栈&#xff1a;内部也是一个数组 将两个栈放在数组的两端&#xff0c;一个从数组首端开始压栈&#xff0c;一个从数组尾部开始压栈&#xff0c;等到两边栈顶在中间相遇时&#xff0c;栈满。 共享顺序栈在某些情况下可以节省空间。 头文件 sharingStack.h //共享顺序…

一个励志PM小哥哥的Java转型之路

先给大家看张我朋友圈截图&#xff1a; 这哥们本科学英语的&#xff0c;毕业后做了产品经理&#xff0c;去年 9 月份开始学 Java&#xff0c;6 个月的时间&#xff0c;拿到了快手的 Offer。如果你对 Java 也有兴趣&#xff0c;不妨听完这个故事。你是不是也和他当时的处境…

最全蚂蚁金服高级Java面试题目(3面)

一面&#xff1a; JVM数据存储模型&#xff0c;新生代、年老代的构造&#xff1f; java GC算法&#xff0c;什么时候会触发minor gc&#xff0c;什么时候会触发full gc&#xff1f; GC 可达性分析中哪些算是GC ROOT&#xff1f; 你熟悉的JVM调优参数&#xff0c;使用过哪些调…

运用事理图谱搞事情:新闻预警、事件监测、文本可视化、出行规划与历时事件流生成

目前&#xff0c;事理图谱在描述领域事件时空信息上具有独特性&#xff0c;这种逻辑图结构能够以一种直观的方式向我们展现出一个领域知识的链路信息。从学术的角度上来说&#xff0c;事理图谱与事件抽取、事件关系抽取、脚本学习、事件链生成、篇章句间关系识别、图谱图结构运…

CCKS 2018 | 最佳论文:南京大学提出 DSKG,将多层 RNN 用于知识图谱补全

本文转载自公众号&#xff1a;机器之心。 选自CCKS 2018作者&#xff1a;Lingbing Guo、Qingheng Zhang、Weiyi Ge、Wei Hu、Yuzhong Qu机器之心编译参与&#xff1a;Panda、刘晓坤2018 年 8 月 14-17 日&#xff0c;主题为「知识计算与语言理解」的 2018 全国知识图谱…

计算机软件系统

计算机软件系统按其功能可分为系统软件和应用软件两大类。1、系统软件系统软件是指管理、控制、和维护计算机及其外部设备&#xff0c;提供用户与计算机之间操作界面等方面的软件&#xff0c;它并不专门针对具体的应用问题。代表性的系统软件有&#xff1a;操作系统、数据库管理…

数据结构--栈--浏览器前进后退应用

浏览器前进后退&#xff1a; 当你依次浏览a&#xff0c;b&#xff0c;c,然后回到b&#xff0c;再浏览d&#xff0c;就只能查看a&#xff0c;b&#xff0c;d&#xff0c;了。 原理&#xff1a; 利用两个栈A,B 浏览新网页的时候&#xff0c;压入栈A&#xff0c;清空栈B前进&…

关于BERT,面试官们都怎么问

1.BERT 的基本原理是什么&#xff1f;BERT 来自 Google 的论文Pre-training of Deep Bidirectional Transformers for Language Understanding&#xff0c;BERT 是“Bidirectional Encoder Representations from Transformers”的首字母缩写&#xff0c;整体是一个自编码语言模…

牛逼!支付宝高级Java三面题目:线程锁+事务+雪崩+Docker等

支付宝高级Java一面 JVM中的老年代在什么情况下会触发GC&#xff1f; CMS的垃圾回收步骤&#xff0c;G1和CMS的区别&#xff1f; CMS哪个阶段是并发的&#xff0c;哪个阶段是串行的&#xff1f; 谈谈Java线程池&#xff0c;线程池中几个参数含义 谈谈你了解的J.U.C包的JDK源…