首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >为什么后缀(rpn)符号比前缀更常用?

为什么后缀(rpn)符号比前缀更常用?
EN

Stack Overflow用户
提问于 2015-06-22 00:08:58
回答 5查看 3.6K关注 0票数 10

我指的是它在许多计算器中的使用,比如in 35-

我的猜测(和困惑)是-

  1. 后缀实际上是更有效的内存-(所以post注释here )。(混淆--两者的评估算法类似于堆栈)
  2. 那时,计算器中的键盘输入类型(混乱-这不重要,因为它只取决于给出的操作符的先后顺序)。

另一种可以问这个问题的方法是,后缀符号比前缀有什么优势?

有人能指点我吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2015-06-22 00:12:41

首先,更容易实现评估。

使用前缀时,如果您推送一个运算符,那么它的操作数,则您需要对运算符何时拥有其所有操作数具有前向知识。基本上,您需要跟踪您所推送的操作符何时有它们的所有操作数,以便您可以展开堆栈并进行计算。

由于一个复杂的表达式可能会在堆栈上有许多操作符,所以您需要有一个能够处理这个问题的数据结构。

例如,这个表达式:- + 10 20 + 30 40将在堆栈上同时拥有一个-和一个+,对于每个+,您需要知道是否有可用的操作数。

使用后缀时,当您推送运算符时,操作数(应该)已经在堆栈上了,只需弹出操作数并进行计算。您只需要一个可以处理操作数的堆栈,而不需要其他数据结构。

票数 7
EN

Stack Overflow用户

发布于 2015-06-22 00:56:13

基本上,因为如果您在后缀中编写表达式,则可以只使用堆栈计算该表达式。

  1. 读取表达式的下一个元素,
  2. 如果是操作数,按Stack,
  3. 否则,从操作所需的堆栈操作数中读取,并将结果推入堆栈。
  4. 如果不是表达式的末尾,则转到1。

示例

代码语言:javascript
运行
AI代码解释
复制
expression = 1 2 + 3 4 + *
stack = [  ]

Read 1, 1 is Operand, Push 1
[ 1 ]

Read 2, 2 is Operand, Push 2
[ 1 2 ]

Read +, + is Operation, Pop two Operands 1 2
Evaluate 1 + 2 = 3, Push 3
[ 3 ]

Read 3, 3 is Operand, Push 3
[ 3 3 ]

Read 4, 4 is Operand, Push 4
[ 3 3 4 ]

Read +, + is Operation, Pop two Operands 3 4
Evaluate 3 + 4 = 7, Push 7
[ 3 7 ]

Read *, * is Operation, Pop two Operands 3 7
Evaluate 3 * 7 = 21, Push 21
[ 21 ]
票数 3
EN

Stack Overflow用户

发布于 2015-06-23 08:40:04

前缀符号可能更常用..。在数学中,用像F(x,y)这样的表达式。这是一个非常古老的惯例,但就像许多旧的系统(英尺和英寸,信纸)相比,它有缺点,我们可以做什么,如果我们使用一个更深思熟虑的设计系统。

几乎每一年,大学数学教科书都要浪费一页,至少要解释一下,f(g(x))意味着我们首先应用g,然后是f。按照阅读顺序这样做更有意义:x.f.g意味着我们首先应用f。如果我们想在“h”之后应用x.f.g.h,我们只需要说“x.f.g.h”。

举个例子,考虑我最近不得不处理的3d旋转中的一个问题。我们希望按照XYZ惯例旋转一个向量。在后缀中,操作是vec.rotx(phi).roty(theta).rotz(psi)。使用前缀,我们必须重载*(),然后反转操作的顺序,例如rotz*roty*rotx*vec。当你想要思考更大的问题时,必须一直考虑这个问题,这是很容易出错的,而且令人恼火。

例如,我在其他人的代码中看到了类似rotx*roty*rotz*vec的东西,我不知道这是错误还是不寻常的ZYX旋转约定。我还是不知道。程序工作正常,因此它在内部是一致的,但在这种情况下,前缀表示法很难维护。

前缀表示法的另一个问题是,当我们(或一台计算机)解析表达式f(g(h(x)))时,我们必须将f保存在内存中(或堆栈上),然后是g,然后是h,然后ok,我们可以将h应用于x,然后将g应用于结果,然后将f应用于结果。与x.f.g.h相比,内存中的内容太多了。在某一时刻(对人类来说,比计算机快得多),我们将耗尽记忆。以这种方式失败并不常见,但是为什么在x.f.g.h不需要短期内存的情况下甚至打开了这扇门。这就像递归和循环的区别。

还有一件事:f(g(h(x)))有太多的括号,开始看起来像Lisp。当涉及运算符优先级时,后缀表示法是明确的。

一些数学家(尤其是内森·雅各布森)试图改变惯例,因为在非交换代数中,如果顺序很重要,后缀就容易得多,但没有什么用处。但既然我们有机会做更多的事情,更好的,在计算,我们应该抓住这个机会。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30974889

复制
相关文章
为什么HTTPS比HTTP更安全?
近几年,互联网发生着翻天覆地的变化,尤其是我们一直习以为常的HTTP协议,在逐渐的被HTTPS协议所取代,在浏览器、搜索引擎、CA机构、大型互联网企业的共同促进下,互联网迎来了“HTTPS加密时代”,HTTPS将在未来的几年内全面取代HTTP成为传输协议的主流。
coder_koala
2019/07/30
4290
为什么HTTPS比HTTP更安全?
为什么 classmethod 比 staticmethod 更受宠?
我们知道,classmethod 和 staticmethod 都可以作为函数的装饰器,都可用于不涉及类的成员变量的方法,但是你查一下 Python 标准库就会知道 classmethod 使用的次数(1052)要远远多于 staticmethod(539),这是为什么呢?
somenzz
2021/12/27
5910
为什么 classmethod 比 staticmethod 更受宠?
为什么 https 比 http 更安全?
在HTTPS出现之前,所有请求都是以明文方式送出的,那么如果有人在传输途中偷听或者抓包的话,你的所有通信内容都会泄漏。比较安全的方法是将通信内容加密在发送给对方。加密方法有两种,对称加密和非对称加密。
杰哥的IT之旅
2020/06/18
6350
为什么 https 比 http 更安全?
为什么HTTPS比HTTP更安全?
近几年,互联网发生着翻天覆地的变化,尤其是我们一直习以为常的HTTP协议,在逐渐的被HTTPS协议所取代,在浏览器、搜索引擎、CA机构、大型互联网企业的共同促进下,互联网迎来了“HTTPS加密时代”,HTTPS将在未来的几年内全面取代HTTP成为传输协议的主流。
前端迷
2019/08/31
4680
为什么HTTPS比HTTP更安全?
近几年,互联网发生着翻天覆地的变化,尤其是我们一直习以为常的HTTP协议,在逐渐的被HTTPS协议所取代,在浏览器、搜索引擎、CA机构、大型互联网企业的共同促进下,互联网迎来了“HTTPS加密时代”,HTTPS将在未来的几年内全面取代HTTP成为传输协议的主流。
Nealyang
2019/09/29
7840
为什么HTTPS比HTTP更安全?
为什么HTTPS比HTTP更安全?
近几年,互联网发生着翻天覆地的变化,尤其是我们一直习以为常的HTTP协议,在逐渐的被HTTPS协议所取代,在浏览器、搜索引擎、CA机构、大型互联网企业的共同促进下,互联网迎来了“HTTPS加密时代”,HTTPS将在未来的几年内全面取代HTTP成为传输协议的主流。
心莱科技雪雁
2019/06/05
4480
为什么HTTPS比HTTP更安全?
前缀、中缀、后缀表达式
转至: 前缀、中缀、后缀表达式 它们都是对表达式的记法,因此也被称为前缀记法、中缀记法和后缀记法。它们之间的区别在于运算符相对与操作数的位置不同:前缀表达式的运算符位于与其相关的操作数之前;中缀和后缀
Christal_R
2017/12/25
1.1K0
前缀、中缀、后缀表达式
在函数式编程语言中,为了表示方便,出现了一些新的语法格式。所谓前缀、中缀、后缀表达式,它们之间的区别在于运算符相对与操作数的位置不同,为了说明它们的概念,首先来看一下中缀表达式。 所谓中缀表达式,就是将函数名放到两个操作数中间的表达式,其中,左侧的操作数代表函数对象或值,右侧的操作数代表函数的参数值。例如: (3 + 4) × 5 - 6 就是中缀表达式 - × + 3 4 5 6 前缀表达式 3 4 + 5 × 6 - 后缀表达式 前缀表达式 前缀表达式又称为前缀记法、波兰式,主要用于表示运算符位于操作数
xiangzhihong
2018/02/08
1.1K0
前缀、中缀、后缀表达式
前缀、中缀、后缀表达式,它们之间的区别在于运算符相对与操作数的位置不同:前缀表达式的运算符位于与其相关的操作数之前;中缀和后缀同理。对计算机来说中缀表达式是很复杂的,因此计算表达式的值时,通常需要先将中缀表达式转换为前缀或后缀表达式,然后再进行求值。对计算机来说,计算前缀或后缀表达式的值非常简单。 举例: (3 + 4) × 5 - 6  中缀表达式 - × + 3 4 5 6  前缀表达式 3 4 + 5 × 6 -  后缀表达式 前缀表达式的求值: 从右至左扫描表达式,遇到数字时,将数字压入堆栈,
yawn
2018/03/14
8560
为什么 Nginx 比 Apache 更牛叉?
Nginx才短短几年,就拿下了Web服务器大壁江山,众所周知,Nginx在处理大并发静态请求方面,效率明显高于Httpd,甚至能轻松解决C10K问题。
Java技术栈
2023/02/27
4670
为什么 Nginx 比 Apache 更牛叉?
前缀、中缀、后缀表达式
它们都是对表达式的记法,因此也被称为前缀记法、中缀记法和后缀记法。它们之间的区别在于运算符相对与操作数的位置不同:前缀表达式的运算符位于与其相关的操作数之前;中缀和后缀同理。 举例: (3 + 4) × 5 - 6 就是中缀表达式 - × + 3 4 5 6 前缀表达式 3 4 + 5 × 6 - 后缀表达式 中缀表达式(中缀记法) 中缀表达式是一种通用的算术或逻辑公式表示方法,操作符以中缀形式处于操作数的中间。中缀表达式是人们常用的算术表示方法。 虽然人的大脑很容易理解与分析中缀表达式,但对计算
_gongluck
2018/03/08
1.3K0
如何添加前缀和后缀?
例如:如果是数字100,我们需要变成为"自定义100自定义",那我们需要怎么样处理呢?
逍遥之
2020/03/23
1.8K0
字典树和前缀树_前缀树和后缀树
常关注本blog的读者朋友想必看过此篇文章:从B树、B+树、B*树谈到R 树,这次,咱们来讲另外两种树:Tire树与后缀树。不过,在此之前,先来看两个问题。 第一个问题: 一个文本文件,大约有一万行,每行一个词,要求统计出其中最频繁出现的前10个词,请给出思想,给出时间复杂度分析。
全栈程序员站长
2022/10/04
1.4K0
字典树和前缀树_前缀树和后缀树
前缀中缀后缀表达式
<操作数><操作符><操作数> 就像我们平时用到的大部分计算表达式都是中缀 比如 1+1 3*2 等等 中缀表达式虽然很方便人使用,但是对机器却不太友好 比如我要计算(1+1)*3+2 机器将怎样区分操作符的优先级,机器不是人,机器是很傻的,所以我们要提供一种新的算法,让机器无脑就可以算。 这时候就要引出 后缀表达式
用户7272142
2023/10/11
2200
【答疑解惑】++前缀和后缀的区别
我的解答: 这个知识点在C、C++和Java中都是一样的,++前缀就进行自增然后再用自增后的值,++后缀则是先用这个值,然后再进行自增。 上面的题目是一个很好的面试题,网友们还是好好看一下,如果是让输
程序员互动联盟
2018/03/14
8280
【答疑解惑】++前缀和后缀的区别
前缀、中缀、后缀表达式「建议收藏」
关键字:概念, 前缀表达式, 前缀记法, 中缀表达式, 中缀记法, 波兰式, 后缀表达式, 后缀记法, 逆波兰式
全栈程序员站长
2022/07/05
2K0
mybatis中去除多余的前缀或者后缀
转载自 https://blog.csdn.net/qq_33315102/article/details/80253023
allsmallpig
2021/02/25
9270
为什么插入排序比冒泡排序更受欢迎?
插入排序和冒泡排序的时间复杂度相同,都是 O(n2),在实际的软件开发里,为什么我们更倾向于使用插入排序算法而不是冒泡排序算法呢?
大猫的Java笔记
2020/09/30
8820
为什么前后端分离了,你比从前更痛苦?
前后端分离早已经不是新闻,当真正分离之后确遇到了更多问题。要想解决现在的痛,就要知道痛的原因:
Jean
2018/10/18
6050
为什么前后端分离了,你比从前更痛苦?
HTML常用符号
大家好,又见面了,我是全栈君 HTML转义符号 HTML常用符号: 显示一个空格 &nbsp; &#160; < 小于 &lt; &#60; > 大于 &gt; &#62; & &符号
全栈程序员站长
2022/07/15
3.2K0

相似问题

为什么后缀比Sendmail更安全?

12

为什么PF_RING比DPDK更常用?

146

Java RPN (反向波兰符号)注入到后缀

20

重构反向波兰符号(RPN)或后缀符号的反馈

20

后缀符号计算器(RPN)问题C++

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文