当前位置: 主页 > JAVA语言

java递归算法实验报告-全排列算法 递归

发布时间:2023-05-23 16:16   浏览次数:次   作者:佚名

本文已收录至启舰的电子书《逆天改命—程序员的成神之路》,github地址: 欢迎star。点击【阅读原文】也可直达。

新一年的秋招,又到了备战的时候了。

有同学问我,LeetCode两千多道题要怎么刷?

我大学时候也很傻,为了校招,看了不下于五本算法书,加上LeetCode,刷了大半年。

总共一两千道题啊……不刷怕考到……忘了刷,刷了忘……毛都快掉没了……

现在工作近十年,辗转几个大厂,由当年的应试者变成了出题人,才知道,完全不必这么辛苦。

任何事情都遵循28原则,我们只要把握住那20%,就能拿到80分!

凡事都讲究性价比!

省下来的时间,谈个女朋友,它不香么???!!!

这里把我这些年的出题经验告诉大家,希望大家知道哪些是重点,应该怎么学数据结构和算法。

直接上干货,我花了两天的时间做了一张图,涵盖数据结构和算法书籍中都会讲到的知识点。并给出了常用算法的平均时间复杂度,对于必须要学的内容前面加了星标

非递归全排列算法_java递归算法实验报告_全排列算法 递归

这里面涉及到了近二十种数据结构:数组、链表、栈、队列、散列表、二叉树、堆、跳表、图、Trie 树;超四十种常见算法思想:递归、排序、二分查找、搜索、哈希算法、贪心算法、分治算法、回溯算法、动态规划、字符串匹配算法。

掌握了这些基础的数据结构和算法,再学更加复杂的数据结构和算法,就会非常容易、非常快。

稍后会附上下载地址。

长文预警,以下内容涵盖了十几年来学习算法的心得,总结出来供大家参考。

目录:

数据结构与算法的区别

数据结构怎么学

怎么学习算法

算法太难懂?那是你不知道这些模拟网站

一、数据结构与算法的区别

很多同学搞不明白,数据结构与算法有什么区别,甚至有些同学以为数据结构中就包含了算法。

其实,是字面意思就能知道个大概,数据结构主要讲解数据的组织形式,换句话说,我就是我们要怎样把这些数据存储起来,所以有列表、堆、栈、树、图,这是数据结构的重点。

而算法,则注重的是思想,比如列表里的元素怎么排序、怎么在当前的存储结构中找到最大的数和最小的数?等等,说白了就是解决现实中问题的思想。所以才会有分治思想、贪心思想、动态规划这些经典算法。

二、数据结构怎么学

关于数据结构,我想说的是,它是这四大件中最简单、最基础的一个。离开了数据结构,几乎任何的程序都会失效,所以在讨论数据结构的时候,常常要把算法也连带着说一说。

要单纯地掌握常见的数据结构,就如同拆解一个个精妙的仪器件一样有趣和简单。正因为数据结构这个东西在程序中的作用,和仪器部件特别相像,不同的数据结构有着不同的特性,因此要想学好数据结构,图解是必备武器!

这里强推中国大学上,浙江大学的开设的《数据结构》课程,涵盖了常用的数据结构和算法。

java递归算法实验报告_非递归全排列算法_全排列算法 递归

辅以教材参考书,强推《大话数据结构》,光看封面你就知道这本书的风格了

没错,这就是大名鼎鼎的《大话设计模式》的作者出的,绝对顶。

非递归全排列算法_java递归算法实验报告_全排列算法 递归

三、怎么学习算法

算法课常常和数据结构课放在一起,在有些高校中,会存在“数据结构与算法”和“算法设计与分析”这样的两门课。

学习算法的套路很简单,多看、多写、多上机,既然是思想的集合,看得多了,自然无师自通。

至于刷题,很多同学都知道要刷LeetCode。

LeetCode题库:(2123题)

总共两千多道题,而且有些题,非常难,就算每天10题,也至少刷半年。这显然不适合绝大部分同学。

所以,我们要找到最核心、最重要的题集,即可

比如,如果时间紧张,可以先刷《程序员面试宝典》里的题目,总共109题。

刷完以后,有时候,可以再刷《剑指offer》的题目,共75题。

因为这两本书,都是面向面试的高频题汇总,自然有很多题目是重合的。这也正能说明这两本书的重要性。

如果专攻面试的话,还有两本不错的书推荐:

全排列算法 递归_java递归算法实验报告_非递归全排列算法

《编程珠玑》这本书的豆瓣评分非常高,有 9 分。

这本书最大的特色就是讲了很多针对海量数据的处理技巧。这个可能是其他算法书籍很少涉及的。面试的时候,海量数据处理的问题也是经常会问的,特别是校招面试。不管是开拓眼界,还是应付面试,这本书都很值得一看。

全排列算法 递归_java递归算法实验报告_非递归全排列算法

《编程之美》这本书有多位作者,其中绝大部分是微软的工程师,所以书的质量很有保证。不过java递归算法实验报告,这里面的算法题目稍微有点难,也不是很系统,这也是我把它归到面试这一部分的原因。如果你有一定基础,也喜欢钻研些算法问题,或者要面试 Google、Facebook 这样的公司,可以拿这本书里的题,先来自测一下。

当然,我也有一本谷歌师兄总结的高频面试算法习题集,包含了常见的数据结构和算法汇总,无论是排版还是内容,都是非常棒。

非递归全排列算法_全排列算法 递归_java递归算法实验报告

java递归算法实验报告_全排列算法 递归_非递归全排列算法

所有这些书和开篇的思维导图,我都为大家准备好了,需要的小伙伴可以到备用号上直接领取。

大家可以点击下面卡片,回复后台回复「130」获取

四、算法太难懂?那是你不知道有这些模拟网站

算法的难点在于,根本没办法在脑子里抽象出它的步骤啊

对于做个几何题都费劲的男孩子来说,那更是要了他的亲命了。

今天,我就给大家推荐几个算法可视化的网站。

没错,就是写了代码以后,可以看见他们是怎么一步步求出结果的。

1、

目前网站支持中文,印尼文,日文等多语言版本。

最关键的是,它几乎包含了所有算法!!!!

非递归全排列算法_全排列算法 递归_java递归算法实验报告

在搜索选项中你可以根据关键词查找到你想要的算法。

点进去一个具体的算法之后,会有两种方式的可视化呈现方式,一种是电子讲座模式java递归算法实验报告,一种是示例模式。其中示例模式是以动画方式呈现,你可以控制动画的快进与倒退,电子讲座模式是以知识点讲解模式呈现,你可以手动控制页面的进度。两种方式都可以帮助你演示每个步骤的过程代码。

接下来我们演示一下冒泡排序的执行过程,如下图所示:

非递归全排列算法_java递归算法实验报告_全排列算法 递归

另外,你还可以创建一组自定义的数,然后让动画显示“你的算法”。

全排列算法 递归_非递归全排列算法_java递归算法实验报告

除此之外,还支持在线测试哟~

非递归全排列算法_全排列算法 递归_java递归算法实验报告

2、

在Algorithm Visualizer,大家可以很清楚的看到算法运行的整个过程,很直观,便于大家学习。

全排列算法 递归_非递归全排列算法_java递归算法实验报告

大家可以很清楚的看到,网站分为三部分,最左边是算法目录,大家可以选择自己感兴趣的算法,目前已经包括了很多算法了,比如二叉树、图、排序算法、动态规划等等经典算法 。中间区域主要是算法演示以及运行log。右侧是代码以及算法运行按钮。

我们用它来演示一下冒泡排序的执行过程,如下图所示:

java递归算法实验报告_非递归全排列算法_全排列算法 递归

同时它是开源的,目前有35K个star,足以可见该项目的欢迎程度,这里推荐给要学习算法的各位。

java递归算法实验报告_非递归全排列算法_全排列算法 递归

3、

~galles/visualization/Algorithms.html

目前已经有很多常用的数据结构与算法的可视化,如:常见的数组、链表、队列、二叉搜索树、红黑树、各种排序等,如下图所示:

全排列算法 递归_非递归全排列算法_java递归算法实验报告

比如,我们用它来模拟一个二叉搜索树,如下图所示:

java递归算法实验报告_全排列算法 递归_非递归全排列算法

我们再用它来演示一下快速排序算法,如下图所示:

java递归算法实验报告_全排列算法 递归_非递归全排列算法

五、提升上机能力,还得靠Online Judge系统

现在校招都是在线考试,都会要求直接写可运行的代码。

有些同学正是没有上机经验,连怎么提交都不懂。更别说如何使自己设计的程序符合各种预先设定好的测试用例了。而能通过多久测试用例,却是能得多少分的关键。

所以,提前能先用考试用的上机系统演练下,找下感觉是非常有必要的。

现在已经有很多开放的判题系统了,这里为大家收集了几十不同类型的OJ网址,大家有机会的话,可以看看。

1、本人强推的几个

北京大学POJ poj.org/

中国最受欢迎OJ之一,各式各样各种难度的题目都有。

非递归全排列算法_全排列算法 递归_java递归算法实验报告

java递归算法实验报告_全排列算法 递归_非递归全排列算法

杭州电子科技大学HDUOJ

中国最受欢迎OJ之一,题目数量多,来源广。

全排列算法 递归_java递归算法实验报告_非递归全排列算法

非递归全排列算法_java递归算法实验报告_全排列算法 递归

UVA

全球最大最老牌的OJ之一,题目数量堪称之最。浏览需要FQ。

java递归算法实验报告_非递归全排列算法_全排列算法 递归

codeVs

当今最大中文OJ之一,它的天梯功能可以让选手按照难易程度练习各种算法。codevs也是我最早接触到的OJ,题库丰富,难度适中,可以无条件 查看当前出错点的答案。据悉网站管理员WPH95以后想把CODEVS向AI等方面扩宽发展。具体怎样不得而知,不过它作为OJ的强大行还是毋庸置疑的。

非递归全排列算法_全排列算法 递归_java递归算法实验报告

洛谷

OJ上的后起新秀,迅速占有了很大的OJ评测份额,它的试炼场功能和CODEVS的天梯功能相同,可以让选手按阶段做题提高。个人认为题目难度分类 有些不太恰当,为何同是“普及+提高-”的题目难度差异那么大呢?支持在线IDE编程。

其代码公开计划可以让提交此题并达到60分且同加入代码公开计划的 人查看他人的代码。

非递归全排列算法_全排列算法 递归_java递归算法实验报告

大视野在线评测BZOJ

题目难度多为省选级及以上,但有一部分题目需要购买权限才能访问。

全排列算法 递归_java递归算法实验报告_非递归全排列算法

UOJ

举办NOIP难度的UER和省选难度的UR。赛题质量极高,命题人大多为现役集训队选手。

非递归全排列算法_全排列算法 递归_java递归算法实验报告

清橙评测tsinsen

集训队作业网站。近几年的内容还没有公开。

非递归全排列算法_全排列算法 递归_java递归算法实验报告

ACdream

java递归算法实验报告_全排列算法 递归_非递归全排列算法

2、学院型OJ

湖南师大附中 vijos

学军中学OJ :83/

河南实验中学OJ

南阳理工学院OJ

北大在线评测

好像是许多大学创办比赛提交作业的场所。随着2015年NOI网站公布了NOIP考试将从本网站的NOI题库小组抽取题目后,详细这个网站会迎来很多OIERS的访问。

八一中学码酷 浙江大学ZOJ

西南科技大学SWUST OJ

(只供校内学生注册)

建兰中学OJ

天津大学OJ

TIMUS OJ

南开大学OJ

华中科技大学OJ

齐齐哈尔大学OJ

浙江工业大学OJ

萨拉托夫州立大学OJ

福州大学

电子科技大学#/

上海交大OJ

中科大OJ

宁波工程学院

北京师范大学

3、自由型OJ

九度OJ

RQNOJ

RQNOJ,是国内OJ(信息学在线测评)开放平台开发和运行的先导

tyvj

主要面向信息学竞赛,09年成立,现在好像在清北学堂的手中。(话说那大犇出没神马的我们去北京清北的时候挂上去的,现在居然还没撤下来)

4、比赛类OJ/社区型OJ/其他的国外OJ

cf

Codeforces是一家为计算机编程爱好者提供在线评测系统的俄罗斯网站。该网站由萨拉托夫国立大学的一个团体创立并负责运营。

tc

topcoder社区得到了数百万编码者的支持,因此你可以了解到很多挑战性的项目,基于此你还可以为自己赚去额外的报酬。你可以每天或每周参与编码挑战,该社区提供的项目极具有挑战性,对于初学者而言有一定的难度,但却值得一试。

cc

CodeChef由Directi创建的一个开发者社区,为开发者提供实践、竞赛和进步的平台。该社区拥有大量的编码竞赛问题,允许访问此前别人解答编码挑战赛的源码。该社区也设置了难易度,你可以根据自身条件选择挑战。

Bestcoder

克罗地亚coci

波兰MAIN

波兰SPOJ

日本JOI

LIGHTOJ

AOJ

5、挑战型OJ

欧拉计划PE

Project Euler可能是全球最流行的编程挑战网站,项目推出初期就拥有几十万的用户,足以表明其影响力有多大。Project Euler致力于鼓励、挑战并且发展解题技巧,并为那些对迷人的数学世界有兴趣的人提供乐趣。

leetcode 是一个美国的在线编程网站,上面主要收集了各大IT公司的笔试面试题,对于应届毕业生找工作是一个不可多得的好帮手。

这个网站的的好处在于它会告诉你测试数据以及你的输出和正确的输出是什么,方便大家调试学习。目前,只支持C++和Java两种语言。

HackerRank网站是为编码程序员们提供一个以编码谜题和现实生活中遇到的编码难题为基础的新兴的社交平台。HackerRank公司得到了风险投资公司Y Combinator 的资金支持。

在这个社区中,他们提供了各种编码谜题、游戏病毒和现实中的编码难题及挑战,让黑客们在该社区中进行交流讨论,接受挑战。HackerRank就如这个名字所暗示的一样,它同时还提供了在线排行榜和其他的竞争元素。

6、学习型OJ

萌码

计蒜客

内容看起来很多,其实也只是推荐了几本书和一套视频罢了,所列出的这些网站,都只是辅助学习用的。

把这些内容学会,算法应该说是非常牢固了,无论是校招还是工作,都已经非常够用了。

好了,这篇文章就到这了,希望大家都能如愿学会算法。

我是启舰,不要让未来的你,讨厌现在的自己,一起加油。

星球会员体验群

我建了个星球,愿景是帮一小部分人在技术提升、副业挣钱方面快速地实现人生超越!围绕着这个愿望我们开展了定期专家分享、副业剖析、技术训练营、每日文章推荐等固定主题。

很多小伙伴说对我们的编程日记知识星球不了解,无法完整了解具体内容,特意为大家开启了编程日记星球免费体验群,进群即可体验2天我的星球分享内容;带你完整了解我们都在编程日记里学到了什么。

java递归算法实验报告_全排列算法 递归_非递归全排列算法

往期推荐

粉丝亲历:花两万多去培训大半年,上班不到一星期,转行了!

启舰的第一篇技术文来了,百度也能拿来做实验?

粉丝面试字节70W专家岗,快哭了~

··································

你好,我是启舰,出过书,创过业、CSDN博客专家、电子工业出版社优秀作家、大厂技术主管、前阿里人。

曾几何时,我也是2500一个月都找不到工作的青涩少年,也是帮别人发传单、做门童,满地找兼职的学生仔。

也曾经处在比大家更差的阶段,只是靠坚持和毅力,把一手烂牌打得看似精彩,相信我,你会更棒。