数据结构:中缀、后缀、前缀表达式的相互转换与计算

中缀表达式转换成后缀表达式

从左到右遍历中缀表达式并按照如下规则生成后缀表达式:

  1. 若遇到操作数(数字)则直接输出,即数字不进栈;
  2. 若第一次遇到操作符(”+”, “-“, “*”, “/”)则直接将其进栈,遇到左括号 “(” 也将其进栈;
  3. 之后再遇到(第 2 次及第 2 次之后遇到)操作符,则先和栈顶的操作符比较优先级。如果目前遇到的操作符(该操作符还没有进栈)的优先级不高于栈顶的操作符的优先级, 则栈内操作符依次出栈并输出直到遇到优先级低于当前遇到的操作符的操作符,或者栈为空,才可以将当前遇到的操作符进栈(从在栈中的位置来看就是低优先级的操作符不能在高优先级的操作符的上面)。
    “不高于”就是小于或等于,相同的操作符优先级相等,”*” 与 “/” 的优先级比 “+” 与 “-” 的优先级高。
  4. 如果遇到右括号 “)” 则栈内元素依次出栈并输出直到遇到左括号 “(“, 但左括号只出栈而不输出,同时,右括号并不进栈。需要注意的是,只有在遇到右括号 “)” 时才把左括号 “(” 出栈,遇到其他操作符时,左括号 “(” 并不出栈;
  5. 如果读到了中缀表达式末尾,则将栈内的所有元素依次出栈并输出。

示例

将中缀表达式

a+b*c+(d*e+f)*g

转换成后缀表达式。

过程如下(从左向右依次遍历并读取中缀表达式中的每个字符):

输出结果:[NULL]
栈内情况:
栈顶
[NULL]
栈底

输出结果:a
栈内情况:
栈顶
+
栈底

输出结果:ab
栈内情况:
栈顶
+
栈底

输出结果:ab
栈内情况:
栈顶
*
+
栈底

输出结果:abc
栈内情况:
栈顶
*
+
栈底

输出结果:abc*+
栈内情况:
栈顶
[NULL]
栈底

输出结果:abc*+
栈内情况:
栈顶
+
栈底

输出结果:abc*+
栈内情况:
栈顶
(
+
栈底

输出结果:abc*+d
栈内情况:
栈顶
(
+
栈底

输出结果:abc*+d
栈内情况:
栈顶
*
(
+
栈底

输出结果:abc*+de
栈内情况:
栈顶
*
(
+
栈底

输出结果:abc+de
栈内情况:
栈顶
+
(
+
栈底

输出结果:abc+def
栈内情况:
栈顶
+
(
+
栈底

输出结果:abc+def+
栈内情况:
栈顶
+
栈底

输出结果:abc+def+
栈内情况:
栈顶
*
+
栈底

输出结果:abc+def+g
栈内情况:
栈顶
*
+
栈底

输出结果:abc+def+g*+
栈内情况:
栈顶
[NULL]
栈底

至此,我们就得到了原来中缀表达式的后缀表达式:

abc*+de*f+g*+

后缀表达式的计算

在已知后缀表达式的情况下,从左向右依次扫描该后缀表达式,遇到操作数就进栈,遇到操作符就把靠近栈顶的两个操作数出栈并进行该操作符代表的运算,计算得到的数字进栈。重复上述过程,直到后缀表达式被遍历完毕。

例如,已知 a = 6, b = 4, c = 2, d = 3, e = 2, 后缀表达式为:

abc-/de*+

则计算过程如下:

4 – 2 = 2;
6 / 2 = 3;
3 * 2 = 6;
3 + 6 = 9.

正确答案:9

前缀表达式的计算

前缀表达式的计算和后缀表达式的计算类似,只不过在计算时,若使用的是前缀表达式,则需要从右向左扫描整个式子,遇到操作数就进栈,遇到操作符就把靠近栈顶的两个操作数出栈并进行该操作符代表的运算,计算得到的数字进栈。重复上述过程,直到前缀表达式被遍历完毕。

中缀表达式转换成前缀或后缀表达式的手工计算方法

前面介绍的中缀表达式转后缀表达式的方法是适合于计算机执行的,其实,在中缀表达式不是太复杂的情况下,我们也可以使用如下方法手工得到中缀表达式的后缀表达式或前缀表达式。

例如,已知中缀表达式为:

a+b*c+(d*e+f)*g

首先,按照“先加减后乘除,从左向右依次计算”的运算优先级给原式加上括号:

((a+(b*c))+(((d*e)+f)*g))

之后,将运算符移动到它们各自括号的后面:

((a(bc)*)+(((de)*f)+g)*)+

再之后,删除所有括号即得到了后缀表达式:

abc*+de*f+g*+

若把操作符移动到它们各自括号的前面:

+(+(a*(bc))+(*(*(de)f)g))

再之后,删除所有括号即得到了前缀表达式:

++a*bc*+*defg

小贴士 1:
手工计算时,为了防止加完括号之后括号太多导致操作符移动出错,可以加一层括号就移动一个操作符到该括号的后面(或前面);

小贴士 2:
将操作符移动括号外面时只能刚好出本层括号,而不能进入其它括号,否则,若去掉括号后有多个操作符刚好紧邻就会导致这些操作符之间的顺序发生错误从而导致后缀或前缀表达式的生成出错。

EOF

诺斯罗普·格鲁曼公司的火箭搭载天鹅座货运飞船将补给发往国际空间站

诺斯罗普·格鲁曼公司的安塔瑞斯火箭起飞瞬间
Image Credit: NASA/Bill Ingalls
Image From: https://www.nasa.gov/image-feature/northrop-grumman-resupply-mission-bringing-science-cargo-to-station

2019 年 11 月 02 日,美国弗吉尼亚州,诺斯罗普·格鲁曼公司的安塔瑞斯火箭搭载着天鹅座货运飞船从 NASA 的 Wallops 发射基地的 Pad-0A 发射台发射升空。这是诺斯罗普·格鲁曼公司与 NASA 合作的第 12 次飞行任务,本次飞行任务会将重达 8,200 磅(约合 3.7 吨)的科研设备和人员物资补给送往国际空间站。

References:
[1]. Northrop Grumman Resupply Mission Bringing Science, Cargo to Station
https://www.nasa.gov/image-feature/northrop-grumman-resupply-mission-bringing-science-cargo-to-station

概率论:理解事件的互斥,对立与独立

一、性质

$A$ 与 $B$ 为互斥(互不相容)事件 $\Leftrightarrow$ $A$ $\cap$ $B$ $=$ $\varnothing$ $\Leftrightarrow$ $A$ 与 $B$ 不能同时发生。

$A$ 与 $B$ 为对立(互逆)事件 $\Leftrightarrow$ $A$ $\cap$ $B$ $=$ $\varnothing$ 且 $A$ $\cup$ $B$ $=$ $\Omega$ $\Leftrightarrow$ $A$ 与 $B$ 在一次试验中必然发生且只能发生一个。

若 $P(A)$ $=$ $0$ 或 $P(A)$ $=$1$, 则 $A$ 与任何事件都相互独立。

若 $A$ 与 $B$ 相互独立,则 $P(AB)$ $=$ $P(A)P(B)$.

若 $A$ 与 $B$ 互斥(或互逆)且均为非零概率事件,则 $A$ 与 $B$ 不相互独立。

若 $A$ 与 $B$ 相互独立且均为非零概率事件,则 $A$ 与 $B$ 不互斥。

二、图解

$A$ 与 $B$ 互斥(互不相容)关系如图 1 所示:

图 1

$A$ 与 $B$ 对立(互逆)关系如图 2 所示:

图 2

$A$ 与 $B$ 相互独立关系如图 3 所示:

图 3

$A$ 与 $B$ 互逆,互斥与独立之间的推导关系如图 4 所示:

图 4

EOF

NASA 的 X-59 QueSST 飞机在洛克希德马丁臭鼬工厂初步成型

图 1. NASA’s X-59 QueSST Airplane
Image Credit: Lockheed Martin
From: https://www.nasa.gov/image-feature/nasa-s-x-59-quesst-airplane-takes-shape-at-lockheed-martin-skunk-works

点击这里可以查看大图。

在加利福尼亚州的辽阔沙漠中诞生了航空史上一些十分重要的飞机。NASA 的 X-59 QueSST 就是这样一个实验性的飞行器,目的是为了既能超音速飞行又不会因为音爆而产生恼人的噪音。它使用了臭鼬工厂的最新技术。臭鼬工厂是洛克希德马丁公司的一个著名的部门,在过去的 76 年里,臭鼬工厂使用独一无二的方法设计和制造了美国历史上许多最先进的飞行器。

EOF

Linus Torvalds: “我不再是一名程序员了”

在最近于法国里昂举办的 Open Source Summit Europe 讨论会上,Linux 创始人 Linus Torvalds 讲述了他目前的工作以及他对于自己工作的看法。

Linus Torvalds 说:

“I don’t know coding at all anymore. Most of the code I write is in my e-mails. So somebody sends me a patch … I [reply with] pseudo code. I’m so used to editing patches now I sometimes edit patches and send out the patch without having ever tested it. I literally wrote it in the mail and say, ‘I think this is how it should be done,’ but this is what I do, I am not a programmer. “

(参考译文):

“我已经完全不知道怎么写代码了,我现在大都是在电子邮件里写代码。当有人发给我一个补丁的时候,我会用伪代码回复他,我通常是编辑并且回复一个补丁而不去测试它。我在邮件里写的都是文字表述,我会这么说:“我认为应该这么做。”这就是我所做的工作,我已经不是一名程序员了。”

References:

[1]. Linus Torvalds: ‘I’m not a programmer anymore’

https://www.zdnet.com/article/linus-torvalds-im-not-a-programmer-anymore/

RIPE NCC 的 IPv4 地址储备即将于 2019 年底前耗尽

RIPE NCC 全称为 RIPE Network Coordination Centre, 该组织管理着英国、欧洲、中东和部分中亚地区的网络地址分配。最近,该组织确认,其所储备的最后的 IPv4 地址即将于 2019 年底前耗尽。

其实,区域互联网注册中心(RIR)早在 2012 年的时候就已经开始耗尽其 IPv4 地址储备了。2019 年 10 月,RIR 确认其所拥有的约 40 亿个 IPv4 地址现在只剩约 100 万个了。不过,公众大可不必过度担心,因为全球各地的 ISP 都在推进 IPv6 的部署,此外,通过网络地址转换(NAT)等技术,也可以减缓 IPv4 地址的消耗速度。

参考链接:
[1]. This Time, There Really Are NO IPv4 Internet Addresses Left
https://www.ispreview.co.uk/index.php/2019/10/this-time-there-really-are-no-ipv4-internet-addresses-left.html
[2]. Getting Ready for IPv4 Run-out
https://www.ripe.net/publications/news/about-ripe-ncc-and-ripe/getting-ready-for-ipv4-run-out

好奇号火星漫游车的最新全景自拍

好奇号火星车在其任务的第 2553 个火星日拍摄了这张自拍(图 1),当时的地球时间是 2019 年 10 月 11 日。

图 1. 好奇号火星车的最新自拍
Credits: NASA/JPL-Caltech/MSSS
图片来自:https://www.nasa.gov/feature/jpl/new-selfie-shows-curiosity-the-mars-chemist

带有注释的同张自拍(图 2):

图 2. 好奇号火星车的最新自拍
Credits: NASA/JPL-Caltech/MSSS
图片来自:https://www.nasa.gov/feature/jpl/new-selfie-shows-curiosity-the-mars-chemist

这张自拍是由位于好奇号机械臂末端的一台相机拍摄的 57 张独立的照片拼接而成的。拍摄这张图片是为了纪念好奇号完成的一次化学实验。自拍中的好奇号位于 Glen Etive 区域,从 图 2 我们可以看到,好奇号旁边的火星地面上有名为 “Glen Etive 1” 和 “Glen Etive 2” 的两个洞,这两个洞是好奇号钻探的。好奇号可以从这两个洞中提取岩石粉末样本并在位于好奇号机身内部的名为 “Sample Analysis at Mars” 的移动实验室中分析这些岩石样本的化学成分。

在好奇号身后约 984 英尺(300 米)的地方,是 Vera Rubin Ridge, 好奇号在大约一年前离开了那里。在 Vera Rubin Ridge 之外,我们还可以在图中看到 Gale Crater 平地和火山口的北部轮廓。此时的好奇号已经来到了夏普山 (Mount Sharp), 一座位于火山口内部的约 5000 米高的山峰。

参考文章:

[1]. New Selfie Shows Curiosity, the Mars Chemist

https://www.nasa.gov/feature/jpl/new-selfie-shows-curiosity-the-mars-chemist

Google 或已实现量子霸权

Google CEO Sundar Pichai 于当地时间 2019 年 10 月 23 日发表了一篇名为 “What our quantum computing milestone means”(《我们量子计算的里程碑意味着什么》)的博文,在该博文中,Pichai 说 Google 在量子计算领域已经取得了“巨大突破”,即通常所说的“量子霸权 (Quantum Supremacy)”.

Pichai 说:”We can think about today’s news in the context of building the first rocket that successfully left Earth’s gravity to touch the edge of space. At the time, some asked: Why go into space without getting anywhere useful? But it was a big first for science because it allowed humans to envision a totally different realm of travel … to the moon, to Mars, to galaxies beyond our own. It showed us what was possible and nudged the seemingly impossible into frame.”

(参考翻译:我们可以把今天的新闻和人类建造的第一艘火箭成功克服地球引力触摸到太空的边缘联系起来。在那时,有人会问:进入太空有什么用吗?但这对于科学而言是一个伟大的尝试,因为这使得人类可以预见今天已经变为现实的太空航行,去月球,去火星,去另外一个星系。它向我们展示了什么是可能的并将那些看似不可能的事物推向了可能。)

Pichai 认为,量子计算之于世界的意义就是让我们看到了 “a moment of possibility”, 并且量子计算将使我们能用另一种语言描述和理解宇宙,量子计算使人类不再受限于 1 和 0 这两种状态,我们将拥有所有的状态,美丽的,复杂的以及拥有无限可能的状态。

Google 量子计算机使用的梧桐芯片 (Sycamore chip):

Figure 1. 截图来自:https://www.nature.com/articles/s41586-019-1666-5

《自然》杂志已经发表了一篇关于 Google 实现量子霸权的论文,在线阅读地址:

https://www.nature.com/articles/s41586-019-1666-5

本站提供了该论文的 PDF 版,下载链接:

https://documents.zhaokaifeng.com/uploads/2019/10/24/a/quantum-supremacy-using-a-programmable-superconducting-processor.pdf

参考链接:

[1]. https://www.blog.google/perspectives/sundar-pichai/what-our-quantum-computing-milestone-means/

Ubuntu 19.10 正式发布

当地时间 2019 年 10 月 17 日,代号为 “Eoan Ermine” 的 Ubuntu 19.10 正式发布。Ubuntu 19.10 专注于提升开发者在 AI/ML 方面的生产力和针对 MicroK8s 的新的边缘计算能力以及更快的 GNOME (GNOME 3.34) 桌面交付性能。

Canonical CEO Mark Shuttleworth 说:“自从第一个版本的 Ubuntu 发布以来的 15 年里,我们共同见证了 Ubuntu 从作为桌面设备的操作系统到成为公有云、物联网和人工智能等平台上的一个可被选择的操作系统所经历的一系列革命。伴随着 Ubuntu 19.10 的发布,Ubuntu 将继续向企业,开发者和整个社区提供强大的支持,安全和优越的经济性交付能力。”

图 1. Ubuntu 19.10, 图片来自 ubuntu.com

Ubuntu 19.10 使用了 Linux 5.3 内核,兼容第三代 Ryzen CPU 以及 AMD 的 7nm 工艺 Navi GPU 并且可以运行在 Raspberry Pi 4 平台上。

回顾 Ubuntu 的历史,2004 年 Ubuntu 第一个发行版 Ubuntu 4.10 (Warty Warthog) 的正式发布,开启了 “Ubuntu” 的大幕。

图 2. Ubuntu 4.10 (Warty Warthog), By The original uploader was Altonbr at English Wikipedia. – Transferred from en.wikipedia to Commons by Shizhao using CommonsHelper., GPL, https://commons.wikimedia.org/w/index.php?curid=7589578

回想起我的 Linux 学习和使用经历,我最初接触到的 Ubuntu 版本是 “Ubuntu 16.04”, 可以说这个版本的 Ubuntu 打开了我新世界的大门。我在虚拟机和物理机中均使用过 Ubuntu 16.04.

图 3. Ubuntu 16.04 LTS (Xenial Xerus), By Kesäperuna – Own work, GPL, https://commons.wikimedia.org/w/index.php?curid=48297185

EOF

TeamViewer 近期被黑传闻官方回应:仍可安全使用

TeamViewer 官方人员于 2019 年 10 月 13 日在 TeamViewer 论坛中发帖回应了 TeamViewer 近期被黑的传闻,帖文中表示,TeamViewer 仍然是安全的,并且近期没有发生重大安全事件。

贴文原文地址:

https://community.teamviewer.com/t5/Announcements/FireEye-clarification-regarding-misleading-Social-Media-post/m-p/73804

贴文原文及参考中文译文如下(荒原之梦翻译):

FireEye clarification regarding misleading Social Media post

Dear all,

At a recent conference of cyber security vendor FireEye, a presentation referenced historic security events related to TeamViewer. This has been picked up on Social Media in a misleading way including non-factual conclusions.

最近,在网络安全供应商 FireEye 的一个会议上,一个报告中提到了历史上和 TeamViewer 有关的一次安全事件,这在社交媒体上产生了误导,使人们得出了一些错误的结论。

TeamViewer is safe to use. In a statement, FireEye has made clear that they are not implying a compromise of TeamViewer or a previously undisclosed incident. This clarification corresponds to the assessment of leading external security experts.

使用 TeamViewer 仍然是安全的。在一份声明中,FireEye 已经澄清,他们不是在暗示 TeamViewer 的妥协或者此前未披露的事件。这份澄清回应了外部安全专家对本次事件的评定。

TeamViewer is committed to the highest standards of cyber security, data integrity, and customer privacy. We invest heavily to ensure the best possible security for the connectivity solutions our users trust in.

TeamViewer 一向承诺保证高标准的网络安全,数据完整和客户隐私。我们不遗余力地投入来确保我们提供的网络连接解决方案具有尽可能高的安全性,这是用户对我们的信任。

Best,

Esther

Chrome 即将于 2020 年底终止对 Flash 的支持

Google Keyword (谷歌官方博客,主要发布谷歌最新的产品,技术和文化方面的文章。)于 2017 年 07 月 25 日发布了一篇博文:Saying goodbye to Flash in Chrome, 在这篇博文里,Google 方面表示计划于 2020 年取消 Chrome 浏览器对 Flash 的支持。

以下是英文原文及中文参考译文(由荒原之梦翻译):

Today, Adobe announced its plans to stop supporting Flash at the end of 2020.

今天,Adobe 宣布,他们计划在2020年停止对 Flash 的支持。

For 20 years, Flash has helped shape the way that you play games, watch videos and run applications on the web. But over the last few years, Flash has become less common. Three years ago, 80 percent of desktop Chrome users visited a site with Flash each day. Today usage is only 17 percent and continues to decline.

在过去的 20 年里,Flash 帮助塑造了我们在网络上玩游戏,看视频和运行应用程序的方式。但是,在最近的几年里,Flash 开始变得不那么普及了。三年前(指的是 2014 年,荒原之梦注。),80% 的 Chrome 桌面浏览器用户每天都使用 Flash 浏览网站。但是今天(指的是 2017 年,荒原之梦注。)这个使用率只剩下 17%, 并且还在持续下降。

This trend reveals that sites are migrating to open web technologies, which are faster and more power-efficient than Flash. They’re also more secure, so you can be safer while shopping, banking, or reading sensitive documents. They also work on both mobile and desktop, so you can visit your favorite site anywhere.

这个趋势说明许多网站正在迁移到开放的 Web 技术上,这些技术比 Flash 更加快、节能并且更加安全,所以你在网上购物,访问网上银行或者阅读敏感文档时会更加安全。这些采取了开放 Web 技术的网站也可以同时工作在移动端和桌面端,因此,你可以在任何地方访问你喜爱的网站。

These open web technologies became the default experience for Chrome late last year when sites started needing to ask your permission to run Flash. Chrome will continue phasing out Flash over the next few years, first by asking for your permission to run Flash in more situations, and eventually disabling it by default. We will remove Flash completely from Chrome toward the end of 2020.

在刚刚过去的这一年中,一些开放的 Web 技术已经成为 Chrome 的默认配置,所以在访问一些网站时,Chrome 会开始需要询问你是否授权运行 Flash. 在未来的几年里,Chrome 将继续分阶段取消对 Flash 的支持,第一个阶段是在更多的情况下继续询问你是否授权运行 Flash, 之后,Chrome 将默认关闭 Flash. 最终,在 2020 年底,我们将把 Flash 从 Chrome 中彻底移除。

If you regularly visit a site that uses Flash today, you may be wondering how this affects you. If the site migrates to open web standards, you shouldn’t notice much difference except that you’ll no longer see prompts to run Flash on that site. If the site continues to use Flash, and you give the site permission to run Flash, it will work through the end of 2020.

如果你目前经常使用 Flash 访问网站,你可能会担心这会对你产生怎样的影响。如果这个网站已经切换到开放的 Web 标准,那么你不需要关心有多少不同,只是你不会在那些站点上看到要运行 Flash 的提示了。如果有网站仍然在使用 Flash, 那么你可以允许这个站点使用 Flash, 直到 2020 年底。

It’s taken a lot of close work with Adobe, other browsers, and major publishers to make sure the web is ready to be Flash-free. We’re supportive of Adobe’s announcement today, and we look forward to working with everyone to make the web even better.

这需要与 Adobe, 其他的浏览器和主要的发布者展开密切的合作来确保互联网已经准备好在没有 Flash 的情况下运行。我们支持 Adobe 今天宣布的决定,我们期待和所有人一起展开合作,确保互联网变得更好。

乔布斯逝世八周年,库克发推文怀念

2019 年 10 月 25 日是苹果公司联合创始人之一 Steven Paul Jobs 逝世八周年纪念日。这一天,Apple 现任 CEO Tim Cook 发了一条推文:“我们所拥有的最珍贵的资源是时间,乔布斯,我们永远怀念你。”

Figure 1. 来自 Twitter 账号 @tim_cook 的截图

Steve Jobs at the 2010 Worldwide Developers Conference:

Figure 2. 由MetalGearLiquid, based on File:Steve_Jobs_Headshot_2010-CROP.jpg made by Matt Yohe – 自己的作品, based on File:Steve_Jobs_Headshot_2010-CROP.jpg made by Matt Yohe,CC BY-SA 3.0,https://commons.wikimedia.org/w/index.php?curid=16232621

EOF

七十年后,国富兵强,山河无恙

今天是祖国的生日,一个普天同庆的日子,一个属于所有中华儿女的日子。

近代历史上,中华民族被压迫被凌辱得太久了,以至于每当遇到这样的时刻,总会让人热泪盈眶,激动不已。今天的中华大地上处处洋溢着欢乐,这是一种略带悲情的欢乐——多少人的牺牲与付出才有了我们今天的一切,为了今天,我们民族经历了太多的苦难。

如今的中国,有现代化的军队,有日新月异的科技,有饱含斗志的人民,这是实现中国梦最好的时候,也是我们离中华复兴最近的时候。

一位位先烈为了民族独立,为了国家富强,前赴后继,舍生忘死。今天的我们更应该努力奋进,以一往无前的干劲儿托举出共和国更加美好的明天。

加油吧,一万年太久,只争朝夕!

官方消息:CentOS 8 计划于 09 月 24 日发布

2019 年 09 月 17 日,CentOS 官方在 Twitter 上发布消息称,下一个版本的 CentOS 将于 09 月 24 日在所有例行平台发布,如图 1:

图 1. 截图来自 Twitter @CentOSProject

此外,CentOS 8 的当前进度时间表也更新了,最新的信息显示,CentOS 8 将于 2019 年 09 月 24 日发行:

图 2. 截图来自:https://wiki.centos.org/About/Building_8

EOF


荒原之梦网全部内容均为原创,提供了涵盖考研数学基础知识、考研数学真题、考研数学练习题和计算机科学等方面,大量精心研发的学习资源。

豫 ICP 备 17023611 号-1 | 公网安备 - 荒原之梦 豫公网安备 41142502000132 号 | SiteMap
Copyright © 2017-2024 ZhaoKaifeng.com 版权所有 All Rights Reserved.

Copyright © 2024   zhaokaifeng.com   All Rights Reserved.
豫ICP备17023611号-1
 豫公网安备41142502000132号

荒原之梦 自豪地采用WordPress