#算法的乐趣

算法笔记_017:递归执行顺序的探讨(Java)

/目录1问题描述2解决方案2.1问题化简2.2定位输出测试2.3回顾总结  最近两天在思考如何使用蛮力法解决旅行商问题(此问题,说白了就是如何求解n个不同字母的所有不同排序的序列问题,即共有n!次不同排序)。为此,我认真看了一篇出自CSDN上的博客文章,其中有一段核心代码就是在for循环里面添加一句...

算法笔记_018:旅行商问题(Java)

/目录1问题描述2解决方案2.1蛮力法2.2减治法2.2.1Johson-Trotter算法2.2.2基于字典序的算法 何为旅行商问题?按照非专业的说法,这个问题要求找出一条n个给定的城市间的最短路径,使我们在回到触发的城市之前,对每个城市都只访问一次。这样该问题就可以表述为求一个图的最短哈密顿回路的问题。(...

算法笔记_019:背包问题(Java)

/目录1问题描述2解决方案2.1蛮力法2.2减治法2.2.1递归求解2.2.2非递归求解(运用异或运算)2.3动态规划法给定n个重量为w1,w2,w3,...,wn,价值为v1,v2,...,vn的物品和一个承重为W的背包,求这些物品中最有价值的子集(PS:每一个物品要么选一次,要么不选),并且要能够装到背包。附形象描...

算法笔记_020:深度优先查找(Java)

/目录1问题描述2解决方案2.1蛮力法深度优先查找(depth-firstsearch,DFS)可以从任意顶点开始访问图的顶点,然后把该顶点标记为已访问。在每次迭代的时候,该算法紧接着处理与当前顶点邻接的未访问顶点。这个过程一直持续,直到遇到一个终点——该顶点的所有邻接顶点都已被访问过。在该终点...

算法笔记_021:广度优先查找(Java)

/目录1问题描述2解决方案2.1蛮力法广度优先查找(Breadth-firstSearch,BFS)按照一种同心圆的方式,首先访问所有和初始顶点邻接的顶点,然后是离它两条边的所有未访问顶点,以此类推,直到所有与初始顶点同在一个连通分量中的顶点都被访问过了为止。如果仍然存在未被访问的顶点,该算法必须从图的其他连接分量中的...

算法笔记_022:字符串的旋转(Java)

/目录1问题描述2解决方案2.1蛮力移位2.2三步反转给定一个字符串,要求将字符串前面的若干个字符移到字符串的尾部。例如,将字符串“abcdef”的前3个字符‘a’、‘b’和‘c’移到字符串的尾部,那么原字符串将变成&ldq...

算法笔记_023:拓扑排序(Java)

/目录1问题描述2解决方案2.1基于减治法实现2.2基于深度优先查找实现给定一个有向图,求取此图的拓扑排序序列。那么,何为拓扑排序?定义:将有向图中的顶点以线性方式进行排序。即对于任何连接自顶点u到顶点v的有向边uv,在最后的排序结果中,顶点u总是在顶点v的前面。  实现原理:不断地做这样一件事,在...

算法笔记_024:字符串的包含(Java)

/目录1问题描述2解决方案2.1蛮力轮询法2.2素数相乘法2.3位运算法给定一长字符串A和一短字符串B。请问,如何最快地判断出短字符串B中的所有字符是否都在长字符串A中?请编写一个判断函数实现此功能。为简单起见,假设输入的字符串只包含小写英文字母。下面举几个例子。(1)如果字符串A是”abcd”...

算法笔记_025:字符串的全排列(Java)

/目录1问题描述2解决方案2.1递归实现2.2字典序排列实现输入一个字符串,打印出该字符串的所有排列。例如,输入字符串”abc”,则输出有字符’a’,’b’,’c’所能排列出来的所有字符串”abc”,...

算法笔记_026:折半查找(Java)

/目录1问题描述2解决方案2.1递归法2.2迭代法  首先,了解一下何为折半查找?此处,借用《算法设计与分析基础》第三版上一段文字介绍:     具体代码如下:packagecom.liuzhen.chapter4;publicclassBinary...

算法笔记_027:俄式乘法(Java)

首先,了解一下何为俄式乘法?此处,借用《算法设计与分析基础》第三版上一段文字介绍:   具体编码如下:packagecom.liuzhen.chapter4;publicclassRussianPeasant{//方法1:递归求解publicvoidrecursionRussian(int...

算法笔记_028:字符串转换成整数(Java)

输入一个由数字组成的字符串,请把它转换成整数并输出。例如,输入字符串“123”,输出整数123。请写出一个函数实现该功能,不能使用库函数。  解答本问题的基本思路:从左至右扫描字符串中的每个字符,把之前扫描得到的数字乘以10,再加上当前字符表示的数字。但是,基本思路是这样,还...

算法笔记_029:约瑟夫斯问题(Java)

/目录1问题描述2解决方案引用自《算法设计与分析基础》第三版:约瑟夫斯问题,是以弗拉瓦斯。约瑟夫斯(FlaviusJosephus)的名字命名的。约瑟夫斯是一个著名的犹太历史学家,参加并记录了公元66—70年犹太人反抗罗马的起义。约瑟夫斯作为一个将军,设法守住了裘达伯特的堡垒达47天之久,但在城市陷落了以后...

算法笔记_030:回文判断(Java)

/目录1问题描述2解决方案给定一个字符串,如何判断这个字符串是否是回文串?所谓回文串,是指正读和反读都一样的字符串,如madam、我爱我等。  解决上述问题,有两种方法可供参考:(1)从字符串两头往中间扫;(2)从字符串中间往两头扫。具体代码如下:packagecom.liuzhen.string_...

算法笔记_031:计算中值和选择问题(Java)

/目录1问题描述 2解决方案2.1计算中值问题2.2选择问题中值问题是求一个n个数列表中某一数组下标k,它要求该下标元素比列表中的一半元素大,又比另一半元素小,这个中间的值被称为中值。 选择问题是求一个n个数列表的第k个最小元素的问题。  本文使用Lomuto划分算法思想,此处引...
首页上一页...1011121314...下一页尾页