天鹅座货运飞船已经和国际空间站成功对接

天鹅座货运飞船与国际空间站成功对接
Image From: https://www.nasa.gov/image-feature/the-cygnus-space-freighter-is-attached-to-the-unity-module

点击这里可以查看大图。

如图所示,2019 年 11 月 04 日,来自诺斯罗普·格鲁曼公司的天鹅座货运飞船已经在“加拿大2号”机械臂的帮助下被成功安装到国际空间站的联合模块,接下来将开始为期 70 天的货物转运工作。

References:

[1]. The Cygnus space freighter is attached to the Unity module

https://www.nasa.gov/image-feature/the-cygnus-space-freighter-is-attached-to-the-unity-module

EOF

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

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

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

  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

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

性质

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

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

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

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

AB 互斥(或互逆)且均为非零概率事件,则 AB 不相互独立。

AB 相互独立且均为非零概率事件,则 AB 不互斥。

图解

AB 互斥(互不相容)关系如图 1 所示:

图 1

AB 对立(互逆)关系如图 2 所示:

图 2

AB 相互独立关系如图 3 所示:

图 3

AB 互逆,互斥与独立之间的推导关系如图 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/