Upload
harry-cong-dat
View
226
Download
0
Embed Size (px)
Citation preview
7/27/2019 Ngn xp v biu thc trung t
1/25
Ngn xp v biu thc trung t, hu t, tin t
byhosytanon 13/5/2013, 15:11
1. Khi nim
Mt php ton hai ngi trn tp hp X l mt nh x f: XX X cho (a,b) f(a,b)
thuc A. nh x f khi thng c k hiu bi *, c gi l ton t, cc phn t
a, b c gi l cc hng t (cn gi l ton hng).
Khi vit biu thc biu din php ton ta c th t k hiu ton t trc (k
php tin t), sau (k php hu t) hoc gia (k php trung t) cc ton hng.
Thng thng trong cc biu thc i s v s hc, ta vit k hiu php ton gia
hai hng t, l k php trung t. V d: a + b, a * b,... Khi mt biu thc c nhiu
php ton, ta dng cc cp du ngoc "(", ")" v th t u tin cc php ton ch
r th t thc hin cc php ton. (Cc php ton u quy v php ton 2 ngi.)
Ta cng c th vit hai hng t trc v k hiu ton t sau. Chng hn:
a + b vit l a b +, a * b vit l a b *
Cng c th vit ton t trc, hai ton hng sau. Chng hn:
a + b vit l + a b, a * b vit l * a b
V l thuyt, k php tin t v k php hu t cn c th c m rng cho cc
php ton ba ngi hoc nhiu hn m vn khng phi dng ti du ngoc th
hin u tin cc php ton, tng t vi hm s a bin, cn k php trung t th
khng th. Tuy nhin, trong thc t khng c nhiu php ton a ngi v k php
trung t vn c dng rng ri v thi quen. V d: + a b c c th c hiu l tng
ca 3 s a, b v c trong k php tin t. Tng t, f a b c c th c hiu l hm fca 3 bin a, b v c trong k php tin t.
Tm li:
- Tin t: Vit ton t trc ton hng
- Hu t: Vit ton t sau ton hng
- Trung t: Vit ton t gia hai ton hng.
Ch : Vi cch biu din dng trung t, ta c cc trng hp sau:
- Trung t y du ngoc: Tt c ton t v ton hng u dng 2 ngi v t
trong mt cp du ngoc.
- Trung t khng y du ngoc: Ch c mt s cp ton hng v ton t l cdu ngoc.
- Trung t khng c du ngoc: Biu thc khng cha bt k du ngoc no.
tnh biu thc ca hai dng trung t sau ta cn xt n tnh u tin ca ton t.
Nguyn tc u tin l *, /, % u tin hn + v -.Chuyn i biu thc Trung t y du ngoc sang Hu t
http://cnttk25.forumvi.com/t12-topic#15http://cnttk25.forumvi.com/u2http://cnttk25.forumvi.com/u2http://cnttk25.forumvi.com/u2http://cnttk25.forumvi.com/t12-topic#16http://cnttk25.forumvi.com/t12-topic#15http://cnttk25.forumvi.com/u2http://cnttk25.forumvi.com/t12-topic#167/27/2019 Ngn xp v biu thc trung t
2/25
a. Bi ton
Chuyn biu thc M = M1M2M3...Mn t dng trung t y du ngoc sang hu t
(N).
b. Nhn xt- V M dng trung t y du ngoc nn chc chn mi ton t hai ngi u
nm trong mt cp du ngoc.
- Ta s phi thc hin php ton khi gp du ngoc ng u tin.
c. tng
Duyt t M t tri qua phi:
- Nu gp ton hng th a ton hng vo biu thc ch N.
- Nu gp ton t th a vo mt ngn xp (stack) S no khi to t trc.
- Gp du ngoc m ("(") th b qua, gp du ngoc ng (")") th ly ton t tnh ca S a vo biu thc ch N.
d. Gii thut
CODE:
Input: M: Bi u th c trung t y d u ngo c.
1. Khi to stack S = {}; // Stack S rng.
2. Khi to biu thc ch N = ""; // N cha c phn t no.
3. for i:=1 to |M| do
a. if (Mi l Ton hng) then N:=N+Mi; // a Mi vo N
b. if (Mi l Ton t) then PUSH(Mi,S); // a Mi vo ngn xp S
c. if (Mi l ")" ) then
POP(S,a); // Ly gi tr trn nh ca S a vo a
N:=N+a; // Thm a vo N
Output: N: Biu thc hu t.
e. V d
CODE:
Input: M = (10-(3*((14-2)/(2+4)))) sang hu t ( y M c s
phn t l n=21)
- Khi to: S={}; N="";
- M1 = "(", b qua
7/27/2019 Ngn xp v biu thc trung t
3/25
- M2 = "10", S={}; N="10";
- M3 = "-", S={-}; N="10";
- M4 = "(", S={-}; N="10";
- M5 = "3", S={-}; N="10, 3";
- M6 = "*", S={-, *}; N="10, 3";- M7 = "(", S={-, *}; N="10, 3";
- M8 = "(", S={-, *}; N="10, 3";
- M9 = "14", S={-, *}; N="10, 3, 14";
- M10 = "-", S={-, *, -}; N="10, 3, 14";
- M11 = "2", S={-, *, -}; N="10, 3, 14, 2";
- M12 = ")", S={-, *}; N="10, 3, 14, 2, -";
- M13 = "/", S={-, *, /}; N="10, 3, 14, 2, -";
- M14 = "(", S={-, *, /}; N="10, 3, 14, 2, -";
- M15 = "2", S={-, *, /}; N="10, 3, 14, 2, -, 2";- M16 = "+", S={-, *, /, +}; N="10, 3, 14, 2, -, 2";
- M17 = "4", S={-, *, /, +}; N="10, 3, 14, 2, -, 2, 4";
- M18 = ")", S={-, *, /}; N="10, 3, 14, 2, -, 2, 4, +";
- M19 = ")", S={-, *}; N="10, 3, 14, 2, -, 2, 4,
+, /";
- M20 = ")", S={-}; N="10, 3, 14, 2, -, 2, 4,
+, /, *";
- M21 = ")", S={}; N="10, 3, 14, 2, -, 2, 4, +, /,
*, -";Output: N = 10 3 14 2 - 2 4 + / * -
Chuyn i biu thc Trung t khng y du ngoc sang Hut
a. Bi ton
Chuyn biu thc M = M1M2M3...Mn t dng trung t khng y du ngoc sang
hu t (N).
b. Nhn xt
- V M dng trung t khng y du ngoc nn khi gp ton t ta cn xt n
http://cnttk25.forumvi.com/t12-topic#17http://cnttk25.forumvi.com/t12-topic#17http://cnttk25.forumvi.com/t12-topic#17http://cnttk25.forumvi.com/t12-topic#177/27/2019 Ngn xp v biu thc trung t
4/25
u tin ca ton t.
c. tng
Duyt t M t tri qua phi:
- Nu gp ton hng th a ton hng vo biu thc ch N.- Nu gp du ngoc m ("(") th a vo mt ngn xp (stack) S no khi to
t trc.
- Nu gp du ngoc ng (")") th ln lt ly cc ton t t nh ca S a vo
biu thc ch N cho n khi gp du ngoc ng (")") u tin, loi b lun du
ngoc ng ra khi stack.
- Nu gp ton t c u tin cao hn ton t hin c trn nh stack th a n
vo stack.
- Nu gp ton t c u tin thp hn hoc bng ton t hin ti trn inh stack
th ly ton t trn nh stack ra a vo biu thc ch N, ng thi a ton t vo nh stack.
- Khi xt ht cc phn t ca biu thc M, ln lt ly cc ton t c trong stack ra
biu thc ch N.
d. Gii thut
CODE:
Input: M: Biu thc trung t khng y du ngoc.
int UT(x){ // x l mt phn t ca M
if ((x="*") OR (x="/") OR (x="%")) ruturn 2;
if ((x="+") OR (x="-")) ruturn 1;
}
1. Khi to stack S = {}; // Stack S rng.
2. Khi to biu thc ch N = ""; // N cha c phn t no.
3. for i:=1 to |M| do
a. if (Mi l Ton hng) N:=N+Mi; // a Mi vo N
b. if (Mi l Ton t)
if UT(Top(S)>=UT(Mi){
Pop(S,x);
N:=N+x;
Push(Mi,S);
7/27/2019 Ngn xp v biu thc trung t
5/25
}
c. if (Mi l ")" ){
x="";
while(x"("){
N:=N+x; // Thm x vo NPOP(S,x); // Ly gi tr trn nh ca S a vo x
}
}
4. while !IsEmpty(S){
Pop(S,x);
if x"(" N:=N+x;
}
Output: N: Biu thc hu t.
e. V d
CODE:
Input: M = 10-3*(14-2)/(2+4) sang hu t ( y M c s phn t
l n=15)
- Khi to: S={}; N="";
- M1 = "10", S={}; N="10";
- M2 = "-", S={-}; N="10";
- M3 = "3", S={-}; N="10, 3";
- M4 = "*", S={-, *}; N="10, 3";
- M5 = "(", S={-, *, (}; N="10, 3";
- M6 = "14", S={-, *, (}; N="10, 3, 14";
- M7 = "-", S={-, *, (, -}; N="10, 3, 14";
- M8 = "2", S={-, *, (, -}; N="10, 3, 14, 2";
- M9 = ")", S={-, *}; N="10, 3, 14, 2, -";
- M10 = "/", S={-, /}; N="10, 3, 14, 2, -, *";
- M11 = "(", S={-, /, (}; N="10, 3, 14, 2, -, *";
- M12 = "2", S={-, /, (}; N="10, 3, 14, 2, -, *, 2";
- M13 = "+", S={-, /, (, +}; N="10, 3, 14, 2, -, *, 2";
- M14 = "4", S={-, /, (, +}; N="10, 3, 14, 2, -, *, 2,
4";
- M15 = ")", S={-, /}; N="10, 3, 14, 2, -, *, 2,
7/27/2019 Ngn xp v biu thc trung t
6/25
4, +";
- M16 = "", S={}; N="10, 3, 14, 2, -, *, 2, 4,
+, /, -";
Output: N = 10 3 14 2 - * 2 4 + / -
Chuyn i biu thc Trung t khng c du ngoc sang Hu t
a. Bi ton
Chuyn biu thc M = M1M2M3...Mn t dng trung t khng c du ngoc sang hut (N).
b. Nhn xt
- y l trng hp ring ca trng hp M khng y du ngoc (trong qu trnh
xt khng gp du ngoc no), ta vn cn xt n u tin ca ton t.
c. tng
Duyt t M t tri qua phi:
- Nu gp ton hng th a ton hng vo biu thc ch N.- Nu gp ton t c u tin cao hn ton t hin c trn nh stack th a n
vo stack.
- Nu gp ton t c u tin thp hn hoc bng ton t hin ti trn inh stack
th ly ton t trn nh stack ra a vo biu thc ch N, ng thi a ton t
vo nh stack.
- Khi xt ht cc phn t ca biu thc M, ln lt ly cc ton t c trong stack ra
biu thc ch N.
d. Gii thut
CODE:
Input: M: Biu thc trung t c du ngoc.
int UT(x){ // x l mt phn t ca M
if ((x="*") OR (x="/") OR (x="%")) ruturn 2;
http://cnttk25.forumvi.com/t12-topic#18http://cnttk25.forumvi.com/t12-topic#187/27/2019 Ngn xp v biu thc trung t
7/25
if ((x="+") OR (x="-")) ruturn 1;
}
1. Khi to stack S = {}; // Stack S rng.
2. Khi to biu thc ch N = ""; // N cha c phn t no.3. for i:=1 to |M| do
a. if (Mi l Ton hng) N:=N+Mi; // a Mi vo N
b. if (Mi l Ton t)
if UT(Top(S)>=UT(Mi){
Pop(S,x);
N:=N+x;
Push(Mi,S);
}
4. while !IsEmpty(S){Pop(S,x);
N:=N+x;
}
Output: N: Biu thc hu t.
e. V d
CODE:
Input: M = 10-3*14-2/2+4 sang hu t ( y M c s phn t l
n=11)
- Khi to: S={}; N="";
- M1 = "10", S={}; N="10";
- M2 = "-", S={-}; N="10";
- M3 = "3", S={-}; N="10, 3";
- M4 = "*", S={-, *}; N="10, 3";
- M5 = "14", S={-, *}; N="10, 3, 14";
- M6 = "-", S={-, -}; N="10, 3, 14, *";
- M7 = "2", S={-, -}; N="10, 3, 14, *, 2";
- M8 = "/", S={-, -, /}; N="10, 3, 14, *, 2";
- M9 = "2", S={-, -, /}; N="10, 3, 14, *, 2, 2";
- M10 = "+", S={-, -, +}; N="10, 3, 14, *, 2, 2, /";
- M11 = "4", S={-, -, +}; N="10, 3, 14, *, 2, 2, /,
7/27/2019 Ngn xp v biu thc trung t
8/25
4";
- M12 = "", S={}; N="10, 3, 14, *, 2, 2, /, 4,
+, -, -";
Output: N = 10 3 14 * 2 2 / 4 + - -
Tnh gi tr biu thc dng Trung t y du ngoc
a. Bi ton
Tnh gi tr biu thc M = M1M2M3...Mn dng trung t y du ngoc.
b. Nhn xt
- Ta nn s dng mt stack lu tr cc kt qu tnh ton trung gian.
c. tng
Duyt t M t tri qua phi:- Nu gp du ngoc m ("(") th b qua.
- Nu gp ton hng hoc ton t th a chng vo stack.
- Nu gp du ngoc ng (")") th ly 3 phn t trn nh stack (gm 2 ton hng
v mt ton t) ri thc hin php ton, kt qu li ct vo nh stack.
- Khi xt ht M, gi tr cui cng trn nh stack chnh l kt qu tnh ton biu thc
M.
d. Gii thut
CODE:
Input: M: Biu thc trung t y du ngoc.
1. Khi to stack S = {}; // Stack S rng.
2. for (i=1;i
7/27/2019 Ngn xp v biu thc trung t
9/25
Push((bxa),S); // Tnh gi tr bxa, kt qu li a vo S.
}
}
3. Pop(S,Result);
Output: Result.
e. V d
CODE:
Cu I, thi tuyn sinh cao hc nm 2013
Input: M = (10-(3*((14-2)/(2+4))))
- Khi to: S={};
- M1="(" B qua S={}
- M2="10" a 10 vo S S={10}
- M3="-" a - vo S S={10, -}
- M4="(" B qua S={10, -}
- M5="3" a 3 vo S S={10, -, 3}
- M6="*" a * vo S S={10, -, 3, *}
- M6="(" B qua S={10, -, 3, *}
- M7="(" B qua S={10, -, 3, *}
- M8="14" a 14 vo S S={10, -, 3, *, 14}
- M9="-" a - vo S S={10, -, 3, *, 14,
-}
- M10="2" a 2 vo S S={10, -, 3, *,
14, -, 2}
- M11=")" Tnh 14-2=12 ri vo S S={10, -, 3, *,
12}
- M12="/" a / vo S S={10, -, 3, *,
12, /}
- M13="(" B qua S={10, -, 3, *,
12, /}
- M14="2" a 2 vo S S={10, -, 3, *,
12, /, 2}
- M15="+" a + vo S S={10, -, 3, *,
12, /, 2, +}
- M16="4" a 4 vo S S={10, -, 3, *,
7/27/2019 Ngn xp v biu thc trung t
10/25
12, /, 2, +, 4}
- M17=")" Tnh 2+4=6 ri vo S S={10, -, 3, *,
12, /, 6}
- M18=")" Tnh 12/6=2 ri vo S S={10, -, 3, *, 2}
- M19=")" Tnh 3*2=6 ri vo S S={10, -, 6}- M20=")" Tnh 10-6=4 ri vo S S={4}
- M21="" Kt thc vic tnh ton S={4}
Output: Result=4
Tnh gi tr biu thc dng Trung t khng y du ngoc
a. Bi ton
Tnh gi tr biu thc M = M1M2M3...Mn dng trung t khng y du ngoc.
b. Nhn xt- Ta nn s dng hai stack lu tr cc kt qu tnh ton trung gian. Stack Sh lu
tr cc ton hng, stack St lu tr cc ton t v du ngoc m.
- V biu thc M dng Trung t khng y du ngoc nn ta cn xt n u
tin ca cc ton t.
c. tng
Gi s M c cho dng ng (ngha l du ngoc phi i vi nhau tng i mt,
cc phn t ch gm ton t, ton hng hoc du ngoc).
Khi to 2 stack: Sh v St.Duyt t M t tri qua phi:
- Nu gp du ngoc m ("(") th a vo St.
- Nu gp ton hng th a vo Sh.
- Nu gp ton t c u tin cao hn ton t hin c trn nh St th a n vo
St.
- Nu gp ton t c u tin thp hn hoc bng ton t hin c trn nh St th
ly ton t trn nh St cng hai ton hng trn nh Sh, thc hin php ton ri ct
kt qu vo Sh.
- Nu gp du ngoc ng (")") th ly ton t trn nh St cng 2 ton hng trnnh Sh, thc hin php ton, kt qu ct vo Sh. C thc hin nh vy cho n khi
gp du ngoc m u tin trn St, loi b lun du ngoc m ny ra khi St.
- Khi xt ht M, ln lt ly mt ton t trn St v 2 ton hng trn Sh, thc hin
php ton, kt qu ct vo Sh cho n khi Sh ch cn mt phn t (hay n khi St
rng).
http://cnttk25.forumvi.com/t12-topic#20http://cnttk25.forumvi.com/t12-topic#207/27/2019 Ngn xp v biu thc trung t
11/25
d. Gii thut
CODE:
Input: M: Biu thc trung t khng y du ngoc.
int UT(x){ // x l mt phn t ca M
if x thuc {*, /, %} return 2;
if x thuc {+, -} return 1;
if x = "(" return 0
}
1. Khi to stack Sh = St = {}; // Stack Sh, St rng.
2. for (i=1;i
7/27/2019 Ngn xp v biu thc trung t
12/25
Pop(Sh,a); // a l mt ton hng ly t Sh.
Pop(St,x); // x l mt ton t ly t St.
Pop(Sh,b); // b l mt ton hng ly t Sh.
Push((bxa),Sh); // Tnh gi tr bxa, kt qu li a vo Sh.
}4. Pop(Sh,Result); // Ly phn t cui cng ca Sh ra kt qu.
Output: Result.
e. V d
CODE:
Input: M = 10-3*(14-2)/(2+4)
- Khi to: Sh={};St={};
- M1="10" a 10 vo Sh Sh={10}
St={}
- M2="-" a - vo St Sh={10}
St={-}
- M3="3" a 3 vo Sh Sh={10, 3}
St={-}
- M4="*" a * vo St Sh={10, 3}
St={-, *}
- M5="(" a ( vo St Sh={10, 3}
St={-, *, (}
- M6="14" a 14 vo Sh Sh={10, 3,
14} St={-, *, (}
- M7="-" a - vo St Sh={10, 3,
14} St={-, *, (, -}
- M8="2" a 2 vo Sh Sh={10, 3,
14, 2} St={-, *, (, -}
- M9=")" Tnh 14-2=12 ri vo Sh, loi b lun ( St
Sh={10, 3, 12} St={-, *}
- M10="/" Tnh 3*12=36 ri a vo Sh, a / vo St
Sh={10, 36} St={-, /}
- M11="(" a ( vo St Sh={10, 36}
St={-, /, (}
- M12="2" a 2 vo Sh Sh={10, 36,
7/27/2019 Ngn xp v biu thc trung t
13/25
2} St={-, /, (}
- M13="+" a + vo St Sh={10, 36,
2} St={-, /, (, +}
- M14="4" a 4 vo Sh Sh={10, 36,
2, 4} St={-, /, (, +}- M15=")" Tnh 2+4=6 ri vo Sh, loi b lun ( St
Sh={10, 36, 6} St={-, /}
- Top(St)="/" Tnh 36/6=6 ri a vo Sh
Sh={10, 6} St={-}
- Top(St)="-" Tnh 10-6=4 ri a vo Sh
Sh={4} St={}
- Top(St)="" Dng
Output: Result=Top(Sh) = 4
Tnh gi tr biu thc dng Trung t khng c du ngocbyhosytanon 14/5/2013, 11:13
a. Bi ton
Tnh gi tr biu thc M = M1M2M3...Mn dng trung t khng c du ngoc.
b. Nhn xt
- C th s dng lun th tc tnh ton biu thc dng Trung t khng y du
ngoc thc hin v y ch l trng hp c bit ca trng hp khng y du ngoc.
- Ta vn nn s dng hai stack lu tr cc kt qu tnh ton trung gian. Stack Sh
lu tr cc ton hng, stack St lu tr cc ton t.
- V biu thc M dng Trung t c khng du ngoc nn ta cn xt n u tin
ca cc ton t.
c. tng
Gi s M c cho dng ng (ngha l cc phn t ch gm ton t v ton
hng ).Khi to 2 stack: Sh v St.
Duyt t M t tri qua phi:
- Nu gp ton hng th a vo Sh.
- Nu gp ton t c u tin cao hn ton t hin c trn nh St th a n vo
St.
- Nu gp ton t c u tin thp hn hoc bng ton t hin c trn nh St th
http://cnttk25.forumvi.com/t12-topic#21http://cnttk25.forumvi.com/u2http://cnttk25.forumvi.com/u2http://cnttk25.forumvi.com/u2http://cnttk25.forumvi.com/t12-topic#21http://cnttk25.forumvi.com/u27/27/2019 Ngn xp v biu thc trung t
14/25
ly ton t trn nh St cng hai ton hng trn nh Sh, thc hin php ton ri ct
kt qu vo Sh. a ton t ang xt vo St.
- Khi xt ht M, ln lt ly mt ton t trn St v 2 ton hng trn Sh, thc hin
php ton, kt qu ct vo Sh cho n khi Sh ch cn mt phn t (hay n khi St
rng).
d. Gii thut
CODE:
Input: M: Biu thc trung t khng c du ngoc.
int UT(x){ // x l mt phn t ca M
if x thuc {*, /, %} return 2;
if x thuc {+, -} return 1;
}
1. Khi to stack Sh = St = {}; // Stack Sh, St rng.
2. for (i=1;i
7/27/2019 Ngn xp v biu thc trung t
15/25
e. V d
CODE:
Input: M = 10-3*14-2/2+4
- Khi to: Sh={};St={};
- M1="10" a 10 vo Sh Sh={10}
St={}
- M2="-" a - vo St Sh={10}
St={-}
- M3="3" a 3 vo Sh Sh={10, 3}
St={-}
- M4="*" a * vo St Sh={10, 3}
St={-, *}
- M6="14" a 14 vo Sh Sh={10, 3,
14} St={-, *}
- M7="-" Ly 14*3=42 a vo Sh, a - vo St
Sh={10, 42} St={-, -}
- M8="2" a 2 vo Sh Sh={10, 42,
2} St={-, -}
- M10="/" Da / vo St Sh={10, 42,
2} St={-, -, /}
- M12="2" a 2 vo Sh Sh={10, 42,
2, 2} St={-, -, /}
- M13="+" Ly 2/2=1 a vo Sh, a + vo St
Sh={10, 42, 4} St={-, -, +}
- M14="4" a 4 vo Sh Sh={10, 42,
4, 4} St={-, -, +}
- Top(St)="+" Tnh 4+4=8 ri a vo Sh
Sh={10, 42, 8} St={-, -}
- Top(St)="-" Tnh 42-8=34 ri a vo Sh
Sh={10, 34} St={-}
- Top(St)="-" Tnh 10-34=-24 ri a vo Sh Sh={-
24} St={}
- Top(St)="" Dng
7/27/2019 Ngn xp v biu thc trung t
16/25
Output: Result=Top(Sh) = -24
Tnh gi tr biu thc dng Hu tbyhosytanon 14/5/2013, 13:26
a. Bi tonTnh gi tr biu thc M = M1M2M3...Mn dng hu t.
b. Nhn xt
- Do M dng hu t nn ta khng cn quan tm n u tin ca cc ton t.
- Ta vn dng 1 ngn xp lu kt qu trnh ton trung gian.
c. tng
Gi s M c cho dng ng (ngha l cc phn t ch gm ton t v ton hng).
Khi to stack: S.Duyt t M t tri qua phi:
- Nu gp ton hng th a vo ngn xp S.
- Nu gp ton t th ly hai phn t trn nh ngn xp, thc hin php ton ri a
kt qu tr li ngn xp.
- Thc hin cho n khi vt cn ht tt c phn t ca M.
d. Gii thut
CODE:
Input: M: Biu thc hu t.
1. Khi to stack S={}; // Stack S rng.
2. for (i=1;i
7/27/2019 Ngn xp v biu thc trung t
17/25
e. V d
CODE:
Cu I, 2, thi tuyn sinh nm 2011.Input: M = 6 1 - 7 1 - * 11 1 + 3 / 2 + /Khi to S={};- M= 6, S={6};- M= 1, S={1};- M= -, S={5};- M= 7, S={5,7};- M= 1, S={5,7,1};- M= -, S={5,6};- M= *, S={30};- M= 11, S={30,11};- M= 1, S={30,11,1};- M= +, S={30,12};
- M= 3, S={30,12,3};- M= /, S={30,4};- M= 2, S={30,4,2};- M= +, S={30,6};- M= /, S={5};- M= , Dng, S={5};Output: Result=Top(S) = 5
[THUT TON - JAVA] CHUYN BIU THC TRUNG TSANG HU T JAVA CONVERTS INFIXTO POSTFIX
Cc biu thc i s c s dng hng ngy u c biu din di dng trung
t (infix). Cch biu din ny rt d hiu vi con ngi v hu ht cc ton t (+,
-, *, /) u l ton t hai ngi v chng phn cch gia hai ton hng vi nhau.
Tuy nhin i vi my tnh, tnh c gi tr ca mt biu thc i s theo
dng ny khng n gin nh ta vn lm. khc phc iu , my tnh cn
chuyn cch biu din cc biu thc i s t trung t sang mt dng khc l
tin t hoc hu t.
Th no l biu thc tin t, trung t v hu t
Trong on gii thiu trn c l bn cng hnh dung c th no l biu thc
trung t, hiu n gin tc l ton t s c t gia hai ton hng, d nhin
7/27/2019 Ngn xp v biu thc trung t
18/25
y phi l ton t hai ngi. Vy da vo v tr ca ca ton t, liu ta c th biu
din biu thc i s di dng khc? Cu tr li l c, v nh ni, ta c ba
cch l biu thc tin t (prefix), trung t (infix) v hu t (postfix). Hy xem mt
cht gii thiu v cch biu din biu thc tin t v hu t hiu r hn v
chng.
- Prefix: Biu thc tin t c biu din bng cch t ton t ln trc cc ton
hng. Cch biu din ny cn c bit n vi tn gi k php Ba Lan do nh
ton hc Ba Lan Jan ukasiewicz pht minh nm 1920. Vi cch biu din ny,
thay v vit x+y nh dng trung t, ta s vit +xy. Ty theo u tin ca ton
t m chng s c sp xp khc nhau, bn c th xem mt s v d pha sau
phn gii thiu ny.
- Postfix: Ngc li vi cch Prefix, tc l cc ton t s c t sau cc ton
hng. Cch biu din ny c gi l k php nghch o Ba Lan hoc c
vit tt l RPN (Reverse Polish notation), c pht minh vo khong gia thp
k 1950 bi mt trit hc gia v nh khoa hc my tnh Charles Hamblin ngi
c.
Mt s v d:
7/27/2019 Ngn xp v biu thc trung t
19/25
Phng php chuyn t biu thc trung t sang hu t
u tin ca cc ton t
Mt trong nhng iu quan trng trc khi bt u l phi tnh ton c u
tin ca cc ton t trong biu thc nhp vo. n gin ta ch xt cc ton t
hai ngi v thng dng bao gm: multiply (+),subtract (-), multiply (*), divide
(/). Theo cc ton t *, / c cng u tin v cao hn hai ton t +, -.
Nh vy ta c phng thc ly u tin ton t nh sau:
1
2
3
4
5
publicintpriority(charc){ // thiet lap thu tu uu tienif(c == '+'|| c == '-') return1;elseif(c == '*'|| c == '/') return2;
elsereturn0;}
Kim tra ton t v ton hng
Trong thut ton chuyn i ny ta cn c cc phng thc kim tra xem mt
thnh phn ca chui c phi l ton t hoc ton hng khng. Thay v s dng
cc cu trc if hoc switch di dng v bt tin khi pht trin, ta s dng Regex
kim tra.
Ngoi ra v chui nhp vo l mt biu thc i s, nn cc ton hng ta s xt
khng ch l cc ch s m cn c ch ci t a-z v A-Z.
C mt quy tc na l khi dng ch ci th ch cho php duy nht mt ch ci i
din cho mt ton hng, cn khi dng ch s th c th nhiu ch s ghp thnh
mt ton hng.
1
2
3
4
5
6
7
publicboolean
isOperator(char
c){ // kiem tra xem co phai toan tucharoperator[] = { '+', '-', '*', '/', ')', '('};
Arrays.sort(operator);if(Arrays.binarySearch(operator, c) > -1)
returntrue;elsereturnfalse;
}
Chun ha biu thc Infix trc khi chuyn i
7/27/2019 Ngn xp v biu thc trung t
20/25
Cc biu thc Infix khi nhp vo c th d tha cc khong trng, cc k t khng
ph hp hoc vit sai c php.
Phn ny cc bn xem bi chun ha xu trong Java
Ngoi ra cc bn cn phi ghp cc ch s lin nhau thnh s (ton hng), tch
cc ton t, phn cch vi nhau bng mt khong trng. Cc phn t ny ti s
gi l mt token.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
publicString[] processString(String sMath){ // xu ly bieu thuc nhap vao thaString s1 = "", elementMath[] = null;InfixToPostfix IFP = newInfixToPostfix();sMath = sMath.trim();
sMath = sMath.replaceAll("\\s+"," "); // chuan hoa sMathfor(inti=0; i
7/27/2019 Ngn xp v biu thc trung t
21/25
hoc bng ton t hin ti th ly ton t ra khi stack v cho ra
output.
+/a ton t hin ti vo stack
Sau khi duyt ht biu thc infix, nu trong stack cn phn t th ly
cc token trong ra v cho ln lt vo output.
7/27/2019 Ngn xp v biu thc trung t
22/25
VD: Chng ta s chuyn biu thc A*B+C*((D-E)+F)/G t dng Infix sang dng
Postfix:
7/27/2019 Ngn xp v biu thc trung t
23/25
Ci t trn Java
1
2
3
4
publicString[] postfix(String[] elementMath){InfixToPostfix IFP = newInfixToPostfix();String s1 = "", E[];Stack S = newStack ();for(inti=0; i
7/27/2019 Ngn xp v biu thc trung t
24/25
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
charc = elementMath[i].charAt(0); // c la ky tu dau tien cua m
if(!IFP.isOperator(c)) // neu c khong la toan tus1 = s1 + " "+ elementMath[i]; // xuat elem vao s1
else{ // c la toan tuif(c == '(') S.push(elementMath[i]); // c la "(" -> day pelse{
if(c == ')'){ // c la ")"charc1; //duyet lai cac phan tu trong Stackdo{
c1 = S.peek().charAt(0); // c1 la ky tu dau tif(c1 != '(') s1 = s1 + " "+ S.peek(); // trS.pop();
}while(c1 != '(');}else{
while(!S.isEmpty() && IFP.priority(S.peek().charAt(// Stack khong rong va trong khi phan tu trong Stack
s1 = s1 + " "+ S.peek(); // xuat phan tu tronS.pop();
}S.push(elementMath[i]); // dua phan tu hien tai vao
}}
}}while(!S.isEmpty()){ // Neu Stack con phan tu thi day het vao s1
s1 = s1 + " "+ S.peek();S.pop();
}E = s1.split(" "); // tach s1 thanh cac phan tureturnE;
}
V cui cng l chy chung trnh chnh:
1
2
3
4
5
6
7
8
9
publicstaticvoidmain(String[] agrs){String sMath, elementMath[] = null;
InfixToPostfix IFP = newInfixToPostfix();Scanner input = newScanner(System.in);sMath = input.nextLine(); // nhap bieu thucelementMath = IFP.processString(sMath); // tach bieu thuc thanhelementMath = IFP.postfix(elementMath); // dua cac phan tu ve dfor(inti=0; i
7/27/2019 Ngn xp v biu thc trung t
25/25
10
11