算法和数据结构简介

算法和数据结构
小灰和大黄

在大四临近毕业时,计算机专业的同学大都收到了满意的 offer,可是小灰却还在着急上火。虽然他这几天面试了很多家 IT 公司,可每次都被面试官「虐」得很惨很惨。

image.png

就在心灰意冷之际,小灰忽然想到,他们系里有一位学霸名叫大黄,大黄不但技术 很强,而且很乐意帮助同学。于是,小灰赶紧去找大黄,希望能够得到一些指点。

什么是算法

算法,对应的英文单词是 algorithm,这是一个很古老的概念,最早来自数学领域。有一个关于算法的小故事,估计大家都有耳闻。在很久很久以前,曾经有一个顽皮又聪明的「熊孩子」,天天在课堂上调皮捣蛋。 终于有一天,老师忍无可忍,对「熊孩子」说:

image.png

老师以为,「熊孩子」会按部就班地一步一步计算,就像下面这样。

1+2=31 + 2 = 3 1+2=3

3+3=63 + 3 = 6 3+3=6

6+4=106 + 4 = 10 6+4=10

10+5=1510 + 5 = 15 10+5=15

……\dots\dots ……

这还不得算到明天天亮?够这小子受的!老师心里幸灾乐祸地想着。 谁知仅仅几分钟后......

image.png

看着老师惊讶的表情,「熊孩子」微微一笑,讲出了他的计算方法。 首先把从 1 到 10000 这 10000 个数字两两分组相加,如下。

1+10000=100011 + 10000 = 10001 1+10000=10001

2+9999=100012 + 9999 = 10001 2+9999=10001

3+9998=100013 + 9998 = 10001 3+9998=10001

4+9997=100014 + 9997 = 10001 4+9997=10001

……\dots\dots ……

一共有多少组这样结果相同的和呢?有 10000 ÷ 2 即 5000 组。 所以 1 到 10000 相加的总和可以这样来计算:

(1+10000)×10000÷2=50005000(1+10000)×10000 ÷ 2 = 50005000 (1+10000)×10000÷2=50005000

这个「熊孩子」就是后来著名的犹太数学家 约翰·卡尔·弗里德里希·高斯,而他所采用的这种等差数列求和的方法,被称为 高斯算法。(上文的故事情节与史实略有出入。)

image.png

这是数学领域中算法的一个简单示例。在数学领域里,算法是用于解决某一类问题的公式和思想。

而本书所涉及的算法,是计算机科学领域的算法,它的本质是一系列程序指令,用于解决特定的运算和逻辑问题。

从宏观上来看,数学领域的算法和计算机领域的算法有很多相通之处。

算法有简单的,也有复杂的。

简单的算法,诸如给出一组整数,找出其中最大的数。

image.png

复杂的算法,诸如在多种物品里选择装入背包的物品,使背包里的物品总价值最大,或找出从一个城市到另一个城市的最短路线。

image.png

算法有高效的,也有拙劣的。

刚才所讲的从 1 加到 10000 的故事中,高斯所用的算法显然是更加高效的算法,它利用等差数列的规律,四两拨千斤,省时省力地求出了最终结果。

而老师心中所想的算法,按部就班地一个数一个数进行累加,则是一种低效、笨拙的算法。虽然这种算法也能得到最终结果,但是其计算过程要低效得多。

在计算机领域,我们同样会遇到各种高效和拙劣的算法。衡量算法好坏的重要标准有两个。

    时间复杂度
    空间复杂度

具体的概念会在本章进行详细讲解。

算法的应用领域多种多样。算法可以应用在很多不同的领域中,其应用场景更是多种多样,例如下面这些。
1. 运算

有人或许会觉得,不就是数学运算吗?这还不简单?

其实还真不简单。例如求出两个数的最大公约数,要做到效率的极致,的确需要动一番脑筋。再如计算两个超大整数的和,按照正常方式来计算肯定会导致变量溢出。这又该如何求解呢?

image.png
2. 查找

当你使用谷歌、百度搜索某一个关键词,或在数据库中执行某一条 SQL 语句时,你有没有思考过数据和信息是如何被查出来的呢?

image.png
3. 排序

排序算法是实现诸多复杂程序的基石。例如,当浏览电商网站时,我们期望商品可以按价格从低到高进行排序;当浏览学生管理网站时,我们期望学生的资料可以按照学号的大小进行排序。

排序算法有很多种,它们的性能和优缺点各不相同,这里面的学问可大着呢。

image.png
4. 最优决策

有些算法可以帮助我们找到最优的决策。

例如在游戏中,可以让 AI 角色找到迷宫的最佳路线,这涉及 A 星寻路算法。

image.png

再如对于一个容量有限的背包来说,如何决策才可以使放入的物品总价值最高,这涉及动态规划算法。
5. 面试(如果这条也算的话)

凡是已走上工作岗位的程序员,在面试过程中多多少少都经历过算法问题的考查。

为什么面试官那么喜欢考查算法呢?

考查算法问题,一方面可以检验程序员对计算机底层知识的了解,另一方面也可以衡量一下程序员的逻辑思维能力。
什么是数据结构

image.png

数据结构,对应的英文单词是 data structure,是数据的组织、管理和存储格式,其使用目的是为了高效地访问和修改数据。

数据结构都有哪些组成方式呢?
1. 线性结构

线性结构是最简单的数据结构,包括数组、链表,以及由它们衍生出来的栈、队列、哈希表。

image.png
2. 树

树是相对复杂的数据结构,其中比较有代表性的是二叉树,由它又衍生出了二叉堆之类的数据结构。

image.png
3. 图

图是更为复杂的数据结构,因为在图中会呈现出多对多的关联关系。

image.png
4. 其他数据结构

除上述所列的几种基本数据结构以外,还有一些其他的千奇百怪的数据结构。它们由基本数据结构变形而来,用于解决某些特定问题,如跳表、哈希链表、位图等。

有了数据结构这个舞台,算法才可以尽情舞蹈。在解决问题时,不同的算法会选用不同的数据结构。例如排序算法中的堆排序,利用的就是二叉堆这样一种数据结构;再如缓存淘汰算法 LRU(Least Recently Used,最近最少使用),利用的就是特殊数据结构哈希链表。

关于算法在不同数据结构上的操作过程,在后续的章节中我们会一一进行学习。

image.png

作者:小灰
链接:https://leetcode-cn.com/leetbook/read/journey-of-algorithm/5elrf3/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java算法数据结构指的是在使用Java编程语言时,用于解决问题和组织数据的方法和技术。 数据结构是计算机存储和组织数据的方式,它由相互之间存在特定关系的数据元素的集合组成。精心选择的数据结构可以提高程序的运行效率和存储效率。常用的数据结构包括数组、链表、栈、队列、树和图等。Java提供了一些内置的数据结构类和接口,例如ArrayList、LinkedList和HashMap等,可以方便地应用于各种问题的解决。 算法则是为了更有效地处理数据,提高数据运算效率而研究的方法和技术。算法是在数据的逻辑结构上定义的操作序列,用于解决特定的问题。在Java中,可以使用各种算法来实现排序、搜索、图算法等。Java提供了一些内置的算法类和接口,例如Collections类中的sort方法可以用于对集合进行排序,以及java.util包中的各种排序和搜索算法。 因此,Java算法数据结构是指在使用Java编程语言时,利用适当的数据结构以及选择和实现高效的算法来解决问题和处理数据的方法和技术。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Java 数据结构与算法](https://blog.csdn.net/yuan_dai_ma/article/details/113996341)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值