0

0

Java经典算法入门解析

聖光之護

聖光之護

发布时间:2026-01-24 08:11:30

|

217人浏览过

|

来源于php中文网

原创

以下是五种经典算法的简明经验(伪原创版,保持原意与图片位置不变):

1、 汉诺塔谜题

2、 汉诺塔问题由法国数学家爱德华·卢卡斯于1883年首次提出,其灵感据说源自东南亚地区流传的一则古老寓言。尽管名称中带有“河内”,实则指代越南北部的历史名城——即今之河内市(注:非胡志明市,原文此处有误,已按史实校正)。传说在世界初开之时,印度圣城贝拿勒斯的神庙中竖立着三根金刚石柱,柱上套有64片黄金圆盘,按尺寸由小到大自上而下叠放于第一根柱上。神谕规定:僧侣须将全部金盘从起始柱移至目标柱,过程中必须严守规则——任一时刻,大盘不可压于小盘之上。每日仅允许移动一个圆盘。据传,当最后一片金盘落定于第三根柱时,天地将归于寂灭。该问题不仅承载着哲学意味,更因其天然契合递归逻辑,成为计算机科学中讲解分治策略与递归实现的经典范例。

3、 实现思路如下:

4、 设三根柱子分别命名为A(源柱)、B(辅助柱)、C(目标柱),任务是将n个盘子由A完整迁移至C。当n=1时,直接执行A→C;当n=2时,需借助B完成三步:A→B、A→C、B→C。对于n≥3的情形,可将顶部n−1个盘子整体视作子问题,先将其由A经C暂存至B,再将最大盘移至C,最后将B上的n−1个盘子经A移至C。整个过程通过递归不断拆解为更小规模的相同问题。移动n个盘所需的最少步数为2ⁿ−1。以64为例,总步数达2⁶⁴−1 ≈ 1.84×10¹⁹次。若每秒完成一次无间断操作,所需时间约为5845亿年,远超当前宇宙年龄。

立即学习Java免费学习笔记(深入)”;

5、 下方为Java语言实现汉诺塔求解的典型代码结构。

6、 }

7、 将编号为1的圆盘从起始柱移至目标柱,并打印该操作步骤。

8、 输出格式提示:“将第 topN 号盘子从 [from] 移动到 [to]”,并实时显示每一步路径。

9、 }

10、 }

11、 }

12、 运行效果所示

Java经典算法入门解析

13、 斐波那契数列

14、 斐波那契数列是一组以0和1为初始项、后续每一项均为前两项之和所构成的整数序列。其展开形式为:0、1、1、2、3、5、8、13、21、34、55、89、144、233、377、610、987、1597、2584、4181、6765、10946、17711、28657、46368……该数列频繁出现在植物叶序、蜂巢结构、螺旋星系等自然现象中,亦广泛应用于金融建模、图像压缩及算法分析等领域,展现出惊人的普适性与数学美感。

15、 注意:标准定义中,第0项为0,第1项为1。

16、 自第2项起(即索引为2的位置),每一项均等于其前两项数值之和。

17、 下方示例展示了使用Java语言生成指定项斐波那契数的常见编程方式。

18、 }

19、 控制台输出:“第 counter 项斐波那契数为:fibonacci(counter)”。

20、 }

21、 }

22、 }

23、 运行效果所示

Java经典算法入门解析

24、 帕斯卡三角形

25、 帕斯卡三角形中的每个元素对应组合数C(n, r),其中n表示行号(从0开始计),r表示列号(同样从0起算)。因此,该三角形本质上是对二项式系数分布的可视化呈现,深刻反映了排列组合的基本规律与对称特性。

26、 下方为Java语言构建帕斯卡三角形的标准实现方式。

27、 请用户输入希望生成的三角形行数:

28、 }

29、 }

30、 }

31、 }

32、 }

33、 }

34、 }

35、 }

36、 }

37、 运行效果所示

Java经典算法入门解析

38、 三色旗问题

听脑AI
听脑AI

听脑AI语音,一款专注于音视频内容的工作学习助手,为用户提供便捷的音视频内容记录、整理与分析功能。

下载

39、 问题背景:

40、 此问题最早由荷兰著名计算机科学家艾兹赫尔·戴克斯特拉(Edsger W. Dijkstra)提出,原称“荷兰国旗问题”(Dutch National Flag Problem),因他本人国籍而得名;后因颜色组合直观易记,中文语境中多称“三色旗问题”。设想一根绳子上随机悬挂红(R)、白(W)、蓝(B)三种颜色的小旗,要求仅通过有限次两两交换操作,将其重排为“蓝—白—红”的严格顺序。整个过程不允许引入额外存储空间(如新数组),所有调整必须在原序列上就地完成。该问题不仅是排序思想的精炼体现,更是理解分区(partitioning)技术与双指针技巧的重要入口。

41、 解决策略

42、 类比于物理绳子上的移动,程序中即表现为单数组内的原地重排。核心在于设立三个指针:low(指向蓝色区域右边界)、mid(当前扫描位置)、high(红色区域左边界)。遍历过程中依据当前元素颜色决定不同动作:遇蓝色则与low处交换并推进low与mid;遇白色则仅推进mid;遇红色则与high交换并收缩high。此方法确保仅需一次遍历、最多n次交换即可完成整理,时间复杂度O(n),空间复杂度O(1),极具教学与工程价值。

43、 下方为Java语言实现三色旗重排的经典编码示例。

44、 }

45、 }

46、 }

47、 }

48、 请输入初始旗帜排列字符串(例如:RWBBWRWR):

49、 输出重排后的最终序列:flags。

50、 }

51、 }

52、 运行效果所示

Java经典算法入门解析

53、 埃拉托斯特尼筛法(质数筛选算法)

54、 算法说明:

55、 质数是指大于1且除了1和自身外不能被其他正整数整除的自然数。尽管判断单个数字是否为质数较为简单,但在大规模范围内高效识别全部质数却极具挑战。埃拉托斯特尼筛法作为一种历史悠久、原理清晰且效率优异的经典算法,通过“标记合数、保留质数”的机制,在O(N log log N)时间内快速筛出1至N区间内所有质数,至今仍被广泛应用于密码学、数论研究及各类编程实践之中。

56、 核心思想:

57、 直接试除法虽可行,但效率低下;优化方向之一是减少冗余检测。埃拉托斯特尼筛法摒弃逐个验证,转而采用“批量剔除”策略:先假定2~N全为质数,然后从最小质数2开始,将其所有倍数(4, 6, 8…)标记为合数;接着取下一个未被标记的数(即3),再筛去其倍数(9, 15, 21…);依此类推,直到处理完所有不超过√N的数为止。剩余未被标记者即为所求质数集合。

58、 关键优化点在于:验证某数N是否为质数时,只需测试2至⌊√N⌋之间的整数能否整除它。这是因为若N存在大于√N的因子p,则必存在对应因子q=N/p < √N,已在前期检测中覆盖。为规避浮点运算误差,常用i*i ≤ N作为循环终止条件,兼顾精度与性能。

59、 假设我们有一个包含1到N所有整数的列表,初始状态如下:

60、 首轮以2为基底,从4起每隔2个位置标记一次,清除所有偶数(除2本身);

61、 第二轮以3为基底,从9起每隔3个位置标记,剔除剩余的3的倍数(如9、15、21…);

62、 接着用5、7、11等依次进行类似操作,直至基底超过√N为止。最终未被标记的数字即为质数。这一系统化筛选流程,正是埃拉托斯特尼筛法的精髓所在。

63、 对应Java代码实现如下:

64、 初始化布尔数组,标识各数是否为质数(默认true)

65、 }

66、 外层循环上限设为√N,即 i * i <= N

67、 }

68、 内层循环从i²开始,以i为步长,将所有i的倍数设为false

69、 }

70、 }

71、 统计并输出实际执行的筛选次数(含count变量累计值)

72、 }

73、 }

74、 }

75、 }

76、 }

Java经典算法入门解析

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
counta和count的区别
counta和count的区别

Count函数用于计算指定范围内数字的个数,而CountA函数用于计算指定范围内非空单元格的个数。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

203

2023.11.20

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

761

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

221

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1570

2023.10.24

字符串介绍
字符串介绍

字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

651

2023.11.24

java读取文件转成字符串的方法
java读取文件转成字符串的方法

Java8引入了新的文件I/O API,使用java.nio.file.Files类读取文件内容更加方便。对于较旧版本的Java,可以使用java.io.FileReader和java.io.BufferedReader来读取文件。在这些方法中,你需要将文件路径替换为你的实际文件路径,并且可能需要处理可能的IOException异常。想了解更多java的相关内容,可以阅读本专题下面的文章。

1228

2024.03.22

php中定义字符串的方式
php中定义字符串的方式

php中定义字符串的方式:单引号;双引号;heredoc语法等等。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

1205

2024.04.29

go语言字符串相关教程
go语言字符串相关教程

本专题整合了go语言字符串相关教程,阅读专题下面的文章了解更多详细内容。

193

2025.07.29

TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

49

2026.03.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 4.4万人学习

C# 教程
C# 教程

共94课时 | 11.3万人学习

Java 教程
Java 教程

共578课时 | 82.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号