컴퓨터, 소프트웨어
RPN : 알고리즘, 방법 및 실시 예
RPN 한 번 세계에서 컴퓨터 프로그래머의 기초를 형성했다. 오늘날 그것은 잘 알려져 있지 않다. 따라서, 만화 그림은, 외부의 "반전"폴란드어 소시지 롤을 묘사, 여전히 몇 가지 지식 프로그래머가 오해 할 수있다. 아니 아주 잘 농담을 설명하지만,이 경우에는 완전히 정당화 될 것입니다.
삽입 사
모든 프로그래머, 대부분의 학생들은 사업자의 사용을 잘 알고 있습니다. 예를 들어, 변수 X와 Y 중고 더하기위한 식 X + 합산 값. 덜이 사실, 기계에 대한 큰 문제가, 중위 표기라는 수학 표기법에서 차용한다는 사실이 알려져. 두 개의 입력 값은 좌측 및 우측 상에 기록 될 때이 연산자 받는다. 프로그래밍에 표기 표지판 운영과 선택적으로 사용된다. 예를 들어, X + Y는 결국 컴파일러 및 중위 표기법으로 변환하는 배 (x, y)의 함수로서 기록 될 수있다. 그러나 모든 사람이 수학은 거의 모든 프로그래밍 언어로 내부 미니 언어의 종류를 형성 산술 표현식을 사용하는 것이 너무 좋다 알고있다.
공식 번역기
첫번째 정말 성공적인 포트란 프로그래밍 언어가되었다 너무 크게 때문에 코드에서 (방송) 변환 연산 식 (즉, 식 ..), 그것의 - 따라서 이름 수식 평행 이동입니다. 그 이전에, 그들은, 예를 들어, 쓰기 기능의 형태로 접혀했다 ((번성 B, C)). 프로그래머는 C.에 의해 B Mutliply에 추가 등을 작성했기 때문에 자동 변환 공식을 구현하는 COBOL 문제에서 매우 어려운 것으로 간주되었다
중위 어떤 문제가 있습니까?
문제는 연산자 우선 순위와 같은 특성을 가지고있다. 이 때문에, 중위 함수의 정의가 아닌 사소한 작업이된다. 예를 들어, 승산은 왼쪽에서 오른쪽으로 운영자의 발휘되는 바와 같이 식 2 + 3 * 4, 4를 곱한 값 (2, 3)의 총합과 같지 않은 것을 의미 더하기 또는 빼기보다 높은 우선 순위를 갖는다. 실제로, 4 곱하기 3이 예는 중위 식의 계산은 종종 연산자 및 피연산자의 순서의 변경을 요구하는 도면 2를 추가한다. 또한, 더 명확 표기법을 찾기 위해 괄호를 사용하는 것이 필요하다. 2 + 3 * 4 + 5는 4 3을 곱 2와 5를 추가해야한다는 것을 의미하기 때문에 예를 들어, (2 + 3) * (+ 5 4), 괄호없이 쓸 수 없습니다.
당신이 연산자를 계산하려는 순서는 오래 기억해야합니다. 이 때문에, 자주, 연산을 배우고 시작하는 학생들은 실제 작업을 올바르게 수행하더라도, 잘못된 결과를 얻을 수 있습니다. 마음으로 액션 문장의 순서를 가르 칠 필요가있다. 먼저, 동작은 괄호, 다음 곱셈과 나눗셈, 마지막 덧셈과 뺄셈으로 수행되어야한다. 그러나 중위 표기 만 더 추가 할 수있는 가능한 "작은 언어"의 하나로서 수학 표현식을 작성하는 또 다른 방법이있다.
접두사와 접미사 표기법
가장 잘 알려진 대안의 두 전이나 피연산자 후 운영자를 기록하는 것입니다. 그들은 접두사와 접미사 표기법으로 알려져있다. 논리 학자 얀 루카세비치 1920 년 첫 번째를 발명했습니다. 그는 폴란드에 살고, 그래서 기록은 폴란드어라고합니다. 후위 버전은 각각 역 폴란드 표기법 (ARF)라고합니다. 그것을 구체적으로 그 중 하나만을 고려하면 충분하므로이 두 방법 간의 유일한 차이점은, (오른쪽 또는 오른쪽에서 왼쪽으로, 왼쪽에서) 기록을 판독 할 수있는 방향이다. OPN 연산자 피연산자 후에 기록된다. 따라서, 식 AB +는 A + B의 예를 나타내는 RPN
피연산자의 수에 제한이 없음
표기법의 즉각적인 장점은 상기 n ADIC 연산자를 요약 한 것입니다 및 중위 표기법은 두 개의 피연산자와 함께 작동 만 정말, t. E.는 이진 작업에 본질적으로 적합합니다. 예를 들어, ABC @ 운영자가 세 피연산자 자체의 좌측에 작용이 경우 A, B 및 C의 최대 값이고, 함수 호출 @에 대응 triadic 마크를 사용하여 상기 역방향 폴란드어 표현 (A, B, C). 당신은 그 같은 @의 BC 또는 무언가로 중위, 같은 @ 기호를 작성하려고하면, 그것은 단순히 작동하지 않는다는 것을 분명해진다.
순서에 의해 주어진 우선 순위
RPN은 연산자의 우선 순위는 외모의 순서에 의해 표현 될 수 있다는 또 다른 장점에있다. 문자 작업이 중위 표기의 전환을 촉진하기 위해 그들이 포함 할 수 있지만 동시에, 중괄호 필요가 없습니다. 예를 들어, AB + C * - 명백한 등가 (A + B) * C, 승산은 승산하는 제 피연산자를 제공 수행 첨가까지 계산 될 수 있도록. > (AB +) * C - -> (A + B) * C. 계산 AB + C *는 한 번에 하나의 운영자에 의해, 우리는 AB + C *를 얻는 경우 즉,
계산 알고리즘
OPN 연산자의 인수 두 값이 좌안 작성로서 취하는 함수와 같은 보인다. 그 계산 방법은 스택 동작에 대응하고, 해석에 대한 필요성이 제거 될 때 또한, 프로그래밍 언어에서 사용되는 천연 표기법이다. 예를 들면, 식 5 + 6 * 7 피뢰기는 5, 6, 7 * +로 표시되며, 왼쪽에서 오른쪽으로 그것을 검사하여 간단히 계산 될 수 있고 스택의 값 물품. 컴퓨터 메모리 소자의 상부 (2)에 의해 선택된 동작의 공통 부호는, 조작자가 사용될 때마다, 그 결과는 메모리에 돌려 보냈다. 경우 계산식의 최종 결과는 스택의 최상위에있을 것이다.
예를 들면 :
- S = () 5, 6, 스택 상에 배치 7 * 5 +.
- 스택 상에 배치 = S (5) (6), (7) * 6 +.
- 이 S = (5, 6), 7 *는, 7 + 스택을 놓는다.
- S = (5, 6, 7) * 2 + 스택, 사용 *의 값을 선택하고 스택의 결과를 놓는다.
- S = (5, 6 * 7) = (5, 42)의 + +을 적용한 스택의 결과를 넣어 스택으로부터 선택된 2 개 값.
- S = (42 + 5) = (47)의 계산이 완료되며, 그 결과는 스택의 상단에 저장된다.
이 알고리즘은 반복적으로 RPN을 확인할 수 있지만, 각 시간은 아무리 복잡한 산술 식, 작동하지 않습니다.
OPN 및 스택 밀접하게 연결되어 있습니다. 이 예는 역 폴란드 표기법의 값을 계산하기 위해 메모리를 사용하는 방법을 보여줍니다. 덜 명백한은 급성 신부전 표준 중위 식을 변환, 스택을 사용할 수 있다는 것입니다.
프로그래밍 언어의 예
이 (프로그램의 일부를 보여줍니다)처럼 파스칼 RPN은 깨달았다.
토큰 번호 또는 기호 작동 여부를 결정 절차라는 사이클에 숫자와 연산자를 읽을 수 있습니다. 첫 번째 경우는 스택에 저장되어있는 값 및 두 개의 상위 스택 번호 대응 조치 제 수행되고 그 결과가 저장된다.
toktype : NUM =;
발 판독;
중 c [ '+', '-', '*', '/']이라면 시작
다음 eoln 경우 CN = ''다른 읽기 (CN);
경우 CN = ''다음
(A)의 경우
'+': Toktype = 추가; '-'toktype = 부;
'*'Toktype = MUL; '/': Toktype = DIV
끝
다른 시작
다른 에러 = -1 : = C를 <> '+'- '다음 SGN A = 만약
로 : CN =
끝
끝;
(에러없는) 및 (toktype = NUM) 다음 getnumber 경우;
toktype <> 납입 후 시작하면
Y = 팝업; X : = 팝업;
하지 않으면 것은 다음 오류
의 경우 toktype
추가 Z = X + Y; 이하, Z =의 X-Y; MUL : Z = X * Y; DIV : Z = X / Y
끝
푸시 (z);
C-구현 RPN (프로그램의 일부 도시) :
{(; (S) S = strtok를 w (0) = S strtok를 (S), w)에 대한
A =는 strtod (S, E);
경우 (예> S) 푸쉬 (a);
#DEFINE rpnop (X)의 printf ( "%의 C"* S), B = 팝 (), 팝 A = (), 푸쉬 (X)
다른 경우 (S == * '+') rpnop (a + b);
다른 경우 (S == * '-') rpnop (a - b);
다른 (S == * '*') rpnop (a *의 b)의 경우;
다른 경우 (S == * '/') rpnop (a / b);
#undef를 rpnop
}
하드웨어 구현
그 당시에는, 컴퓨터 기술이 매우 비싼 경우는 서지 방지기를 사용하는 사람들을 강제로 좋은 아이디어를 생각했다. 1960 - 이거에. 지금, 역 폴란드 표기법에서 일하는 계산기를 구입하는 것이 가능했다. 2를 추가하려면 그 중 3 2 다음 3을 입력해야하며, "플러스"버튼을 누릅니다. 언뜻 보면, 작업자에 대한 입력 피연산자 기억하기 복잡하고 어려운 듯하지만 잠시 후 어떤 생각이 방법에 중독이며, 다른 사람들이 너무 복잡하고 너무 제한되어 바보 중위, 주장하는 이유를 이해할 수 없었다.
버로우즈 회사는 심지어 스택을 제외하고, 다른 메모리 없었다 메인 프레임을 내장. 기계를 만드는 유일한 방법은 - 중앙 스택 알고리즘 및 방법 RPN을 적용했다. 모든 조작은 상부 N 값에 적용 피뢰기 연산자로 간주 하였다. 예를 들어, 일반적인 구조와 경쟁하지 충분히 빨리 팀은 스택의 상단에서 반송 주소를했다, 등등. D. 이러한 기계의 구조는 간단하지만. 많은,하지만 여전히 모든 프로그램은 OPN의 표현이었다 컴퓨팅과 같은 간단하고 우아한 방법은, 그것의 계속을 발견 사실을 후회.
RPN 함께 한 시간 계산기는 인기가 있었고, 어떤 사람들은 여전히 그들에게 특혜를 제공합니다. 또한, 그들은 같은 포스로 스택 지향 언어를 개발했다. 오늘은 조금 사용하지만, 그의 이전 사용자로부터 여전히 향수입니다.
그래서 역 폴란드어 소시지에 대한 의미 농담 무엇인가?
우리는 소시지의 운영자가, 중위 표기법, 그것은 기존의 핫도그와 같이 롤 내에 있어야한다고 가정합니다. RPN은 두 부분이 계산 한 후 준비 사이를 얻을 우측에 위치해 있습니다. 이제 어려운 부분은 온다 - 겨자. 그녀는 t, 소시지에 이미. E. 이미 단항 연산자로 계산. 그것은 겨자도 계산되지 않은로 표시해야하므로 소시지의 오른쪽으로 이동해야한다고 생각 ...하지만이 가능하며, 이것은 너무 큰 스택을 필요로 ...
Similar articles
Trending Now