Title: THAI SCRABBLE
1Thai Scrabble
??? ????????? ???????? ???? 44032443
??????????????????? ????????????????
30/03/05 ???????????????????
???????????????? 1
2????????????
- ?????????????????
- ??????????????????????
- ????????????????
- ????????????
- ??????????????
- ??????????????????
30/03/05 ???????????????????
???????????????? 2
3?????????????????
Scrabble ???? ???????????????????????????????????
???????????????????????????????????????
????????????????????? ????????????????????????????
2-4 ?? ????????? Thai Scrabble ???
??????????????????????????????????????????????????
?? 2 ???? ??? ????????????????????
????????????????????????????
??????????????????????????????????????????????????
?????????? ???????????????????????????????????????
?? ???????????????? ?????????????????? ???????
Monte Carlo, Minimax Searching, Heuristic
30/03/05 ???????????????????
???????????????? 3
4??????????????????????
1. ??????????????????????????????????????????????
???? 2. ????????????????????????????? Heuristic
??? Minimax Searching ??????????????????????
??????????? 3. ??????????????????????????????????
???????????????? ???????? 4.
??????????????????????????????????????????????????
??????????? 5. ??????????????????????????????????
???????????????? 6. ?????????????????????????????
?????
30/03/05 ???????????????????
???????????????? 4
5????????????????
1. ??????????????????????????????????????????????
????? ???????? 2. ?????????????????????????
????????????? Lexitron ????????
????????????????? ???-?????? ??? ??????-???
????????? ????????????????????????????????
??????????? ????????? ????????????????????
???????????? ????????????? 3. ???????????????? 2
???? 4. ?????????????????????????????????????????
????????????? ???????? ???????????????????
???????????????????????????????
30/03/05 ???????????????????
???????????????? 5
6????????????
???????????????????? 2 ???? ???
1. ????????? 2. ???????? ??????????
??????????????????????????????????? ????
??????????????????????????????????
??????????????????????????????????????????????????
? ??????????????????????????????????? Ternary
Search Trees ??????????? ?????????????????????????
????????????????????????? ????????????????????????
??????????????????????? ??????????????????????????
??????????????????????? Lexitron
??????????????????????????????????????????????????
?????? ???? ?????? ??????????
30/03/05 ???????????????????
???????????????? 6
7???????????? (???)
Ternary Search Trees
????????????????????? binary search trees ???
digital search tries ?????????????????????????????
????? ????????????????? tries ????????????????????
???????????????????? binary search tree
?????????????????????????? 3 ??? ????????????
binary search tree ???????? 2 ??? - lokid
????????????????????? - eqkid
????????????????????? - hikid
???????????????????? ?????????????????????????????
??????????????????????????????????????????????????
??????????? (lokid) ??????????????????????????????
???????????? (hiked) ?????????????????????????????
?????????? (eqkid) ???????????????????????????????
???? ???????????????????????????????? Binary
Search Tree
30/03/05 ???????????????????
???????????????? 7
8???????????? (???)
Data Structure
typedef struct tnode Tptr typedef struct
tnode char splitchar Tptr lokid,
eqkid, hikid Tnode
30/03/05 ???????????????????
???????????????? 8
9???????????? (???)
????????????????????????????????????????
?????????????? string ????????????????????????????
????? ????????????????????????????????????????????
??????????????????? ??????????????????????????????
???????????????????????????????
??????????????????????????????????????????????????
????????????????????????????????????
30/03/05 ???????????????????
???????????????? 9
10???????????? (???)
????????????????????????? by
????????????? root ?????????? i
??????????????????????????????????????????????????
?????? ???????? b ???????????????? i
i
o
b
s
h
a
e
n
t
t
n
e
y
s
f
r
o
t
30/03/05 ???????????????????
???????????????? 10
11???????????? (???)
????????????????????????????????????????
???????????????? ?????????????????????????????????
???????????????????????????? ?????????????????????
?????? ?????? y
i
o
b
s
h
a
e
n
t
t
n
e
y
s
f
r
o
t
30/03/05 ???????????????????
???????????????? 11
12???????????? (???)
?????????????????????????????????? y
?????????????????????? ???????????????????????????
?????????????????????????????????
i
o
b
s
h
a
e
n
t
t
n
e
y
s
f
r
o
t
30/03/05 ???????????????????
???????????????? 12
13???????????? (???)
???????????????????????????? ?? Tree
?????????? by ????????
i
o
b
s
h
a
e
n
t
t
n
e
y
s
f
r
o
t
30/03/05 ???????????????????
???????????????? 13
14???????????? (???)
Membership Searching
String b y
s
int rsearch(Tptr p, char s) if(!p)
return 0 if(s lt p-gtsplitchar)
return rsearch(p-gtlokid, s) else if (s gt
p-gtsplitchar) return rsearch(p-gthikid,
s) else if (s 0) return 1
return rsearch(p-gteqkid, s)
30/03/05 ???????????????????
???????????????? 14
15???????????? (???)
Membership Searching
String b y
s
int rsearch(Tptr p, char s) if(!p)
return 0 if(s lt p-gtsplitchar)
return rsearch(p-gtlokid, s) else if (s gt
p-gtsplitchar) return rsearch(p-gthikid,
s) else if (s 0) return 1
return rsearch(p-gteqkid, s)
30/03/05 ???????????????????
???????????????? 15
16???????????? (???)
Membership Searching
String b y
s
int rsearch(Tptr p, char s) if(!p)
return 0 if(s lt p-gtsplitchar)
return rsearch(p-gtlokid, s) else if (s gt
p-gtsplitchar) return rsearch(p-gthikid,
s) else if (s 0) return 1
return rsearch(p-gteqkid, s)
30/03/05 ???????????????????
???????????????? 16
17???????????? (???)
Membership Searching
String b y
s
int rsearch(Tptr p, char s) if(!p)
return 0 if(s lt p-gtsplitchar)
return rsearch(p-gtlokid, s) else if (s gt
p-gtsplitchar) return rsearch(p-gthikid,
s) else if (s 0) return 1
return rsearch(p-gteqkid, s)
30/03/05 ???????????????????
???????????????? 17
18???????????? (???)
Membership Searching
i
String b y
o
b
s
h
a
e
n
t
s
t
n
e
y
s
f
r
o
t
int rsearch(Tptr p, char s) if(!p)
return 0 if(s lt p-gtsplitchar)
return rsearch(p-gtlokid, s) else if (s gt
p-gtsplitchar) return rsearch(p-gthikid,
s) else if (s 0) return 1
return rsearch(p-gteqkid, s)
int rsearch(Tptr p, char s) if(!p)
return 0 if(s lt p-gtsplitchar)
return rsearch(p-gtlokid, s) else if (s gt
p-gtsplitchar) return rsearch(p-gthikid,
s) else if (s 0) return 1
return rsearch(p-gteqkid, s)
30/03/05 ???????????????????
???????????????? 18
19???????????? (???)
Membership Searching
i
String b y
o
b
s
h
a
e
n
t
s
t
n
e
y
s
f
r
o
t
int rsearch(Tptr p, char s) if(!p)
return 0 if(s lt p-gtsplitchar)
return rsearch(p-gtlokid, s) else if (s gt
p-gtsplitchar) return rsearch(p-gthikid,
s) else if (s 0) return 1
return rsearch(p-gteqkid, s)
int rsearch(Tptr p, char s) if(!p)
return 0 if(s lt p-gtsplitchar)
return rsearch(p-gtlokid, s) else if (s gt
p-gtsplitchar) return rsearch(p-gthikid,
s) else if (s 0) return 1
return rsearch(p-gteqkid, s)
if(!p) return 0
30/03/05 ???????????????????
???????????????? 19
20???????????? (???)
Membership Searching
i
String b y
o
b
s
h
a
e
n
t
s
t
n
e
y
s
f
r
o
t
int rsearch(Tptr p, char s) if(!p)
return 0 if(s lt p-gtsplitchar)
return rsearch(p-gtlokid, s) else if (s gt
p-gtsplitchar) return rsearch(p-gthikid,
s) else if (s 0) return 1
return rsearch(p-gteqkid, s)
int rsearch(Tptr p, char s) if(!p)
return 0 if(s lt p-gtsplitchar)
return rsearch(p-gtlokid, s) else if (s gt
p-gtsplitchar) return rsearch(p-gthikid,
s) else if (s 0) return 1
return rsearch(p-gteqkid, s)
30/03/05 ???????????????????
???????????????? 20
21???????????? (???)
Membership Searching
i
String b y
o
b
s
h
a
e
n
t
s
t
n
e
y
s
f
r
o
t
int rsearch(Tptr p, char s) if(!p)
return 0 if(s lt p-gtsplitchar)
return rsearch(p-gtlokid, s) else if (s gt
p-gtsplitchar) return rsearch(p-gthikid,
s) else if (s 0) return 1
return rsearch(p-gteqkid, s)
int rsearch(Tptr p, char s) if(!p)
return 0 if(s lt p-gtsplitchar)
return rsearch(p-gtlokid, s) else if (s gt
p-gtsplitchar) return rsearch(p-gthikid,
s) else if (s 0) return 1
return rsearch(p-gteqkid, s)
30/03/05 ???????????????????
???????????????? 21
22???????????? (???)
Membership Searching
i
String b y
o
b
s
h
a
e
n
t
s
t
n
e
y
s
f
r
o
t
int rsearch(Tptr p, char s) if(!p)
return 0 if(s lt p-gtsplitchar)
return rsearch(p-gtlokid, s) else if (s gt
p-gtsplitchar) return rsearch(p-gthikid,
s) else if (s 0) return 1
return rsearch(p-gteqkid, s)
int rsearch(Tptr p, char s) if(!p)
return 0 if(s lt p-gtsplitchar)
return rsearch(p-gtlokid, s) else if (s gt
p-gtsplitchar) return rsearch(p-gthikid,
s) else if (s 0) return 1
return rsearch(p-gteqkid, s)
30/03/05 ???????????????????
???????????????? 22
23???????????? (???)
Membership Searching
i
String b y
o
b
s
h
a
e
n
t
s
t
n
e
y
s
f
r
o
t
int rsearch(Tptr p, char s) if(!p)
return 0 if(s lt p-gtsplitchar)
return rsearch(p-gtlokid, s) else if (s gt
p-gtsplitchar) return rsearch(p-gthikid,
s) else if (s 0) return 1
return rsearch(p-gteqkid, s)
int rsearch(Tptr p, char s) if(!p)
return 0 if(s lt p-gtsplitchar)
return rsearch(p-gtlokid, s) else if (s gt
p-gtsplitchar) return rsearch(p-gthikid,
s) else if (s 0) return 1
return rsearch(p-gteqkid, s)
30/03/05 ???????????????????
???????????????? 23
24???????????? (???)
Membership Searching
i
String b y
o
b
s
h
a
e
n
t
s
t
n
e
y
s
f
r
o
t
int rsearch(Tptr p, char s) if(!p)
return 0 if(s lt p-gtsplitchar)
return rsearch(p-gtlokid, s) else if (s gt
p-gtsplitchar) return rsearch(p-gthikid,
s) else if (s 0) return 1
return rsearch(p-gteqkid, s)
int rsearch(Tptr p, char s) if(!p)
return 0 if(s lt p-gtsplitchar)
return rsearch(p-gtlokid, s) else if (s gt
p-gtsplitchar) return rsearch(p-gthikid,
s) else if (s 0) return 1
return rsearch(p-gteqkid, s)
30/03/05 ???????????????????
???????????????? 24
25???????????? (???)
Membership Searching
i
String b y
o
b
s
h
a
e
n
t
s
t
n
e
y
s
f
r
o
t
int rsearch(Tptr p, char s) if(!p)
return 0 if(s lt p-gtsplitchar)
return rsearch(p-gtlokid, s) else if (s gt
p-gtsplitchar) return rsearch(p-gthikid,
s) else if (s 0) return 1
return rsearch(p-gteqkid, s)
int rsearch(Tptr p, char s) if(!p)
return 0 if(s lt p-gtsplitchar)
return rsearch(p-gtlokid, s) else if (s gt
p-gtsplitchar) return rsearch(p-gthikid,
s) else if (s 0) return 1
return rsearch(p-gteqkid, s)
30/03/05 ???????????????????
???????????????? 25
26???????????? (???)
Membership Searching
i
String b y
o
b
s
h
a
e
n
t
s
t
n
e
y
s
f
r
o
t
int rsearch(Tptr p, char s) if(!p)
return 0 if(s lt p-gtsplitchar)
return rsearch(p-gtlokid, s) else if (s gt
p-gtsplitchar) return rsearch(p-gthikid,
s) else if (s 0) return 1
return rsearch(p-gteqkid, s)
int rsearch(Tptr p, char s) if(!p)
return 0 if(s lt p-gtsplitchar)
return rsearch(p-gtlokid, s) else if (s gt
p-gtsplitchar) return rsearch(p-gthikid,
s) else if (s 0) return 1
return rsearch(p-gteqkid, s)
int rsearch(Tptr p, char s) if(!p)
return 0 if(s lt p-gtsplitchar)
return rsearch(p-gtlokid, s) else if (s gt
p-gtsplitchar) return rsearch(p-gthikid,
s) else if (s 0) return 1
return rsearch(p-gteqkid, s)
int rsearch(Tptr p, char s) if(!p)
return 0 if(s lt p-gtsplitchar)
return rsearch(p-gtlokid, s) else if (s gt
p-gtsplitchar) return rsearch(p-gthikid,
s) else if (s 0) return 1
return rsearch(p-gteqkid, s)
if(!p) return 0
30/03/05 ???????????????????
???????????????? 26
27???????????? (???)
Membership Searching
i
String b y
o
b
s
h
a
e
n
t
s
t
n
e
y
s
f
r
o
t
int rsearch(Tptr p, char s) if(!p)
return 0 if(s lt p-gtsplitchar)
return rsearch(p-gtlokid, s) else if (s gt
p-gtsplitchar) return rsearch(p-gthikid,
s) else if (s 0) return 1
return rsearch(p-gteqkid, s)
int rsearch(Tptr p, char s) if(!p)
return 0 if(s lt p-gtsplitchar)
return rsearch(p-gtlokid, s) else if (s gt
p-gtsplitchar) return rsearch(p-gthikid,
s) else if (s 0) return 1
return rsearch(p-gteqkid, s)
int rsearch(Tptr p, char s) if(!p)
return 0 if(s lt p-gtsplitchar)
return rsearch(p-gtlokid, s) else if (s gt
p-gtsplitchar) return rsearch(p-gthikid,
s) else if (s 0) return 1
return rsearch(p-gteqkid, s)
int rsearch(Tptr p, char s) if(!p)
return 0 if(s lt p-gtsplitchar)
return rsearch(p-gtlokid, s) else if (s gt
p-gtsplitchar) return rsearch(p-gthikid,
s) else if (s 0) return 1
return rsearch(p-gteqkid, s)
30/03/05 ???????????????????
???????????????? 27
28???????????? (???)
Membership Searching
i
String b y
o
b
s
h
a
e
n
t
s
t
n
e
y
s
f
r
o
t
int rsearch(Tptr p, char s) if(!p)
return 0 if(s lt p-gtsplitchar)
return rsearch(p-gtlokid, s) else if (s gt
p-gtsplitchar) return rsearch(p-gthikid,
s) else if (s 0) return 1
return rsearch(p-gteqkid, s)
int rsearch(Tptr p, char s) if(!p)
return 0 if(s lt p-gtsplitchar)
return rsearch(p-gtlokid, s) else if (s gt
p-gtsplitchar) return rsearch(p-gthikid,
s) else if (s 0) return 1
return rsearch(p-gteqkid, s)
int rsearch(Tptr p, char s) if(!p)
return 0 if(s lt p-gtsplitchar)
return rsearch(p-gtlokid, s) else if (s gt
p-gtsplitchar) return rsearch(p-gthikid,
s) else if (s 0) return 1
return rsearch(p-gteqkid, s)
int rsearch(Tptr p, char s) if(!p)
return 0 if(s lt p-gtsplitchar)
return rsearch(p-gtlokid, s) else if (s gt
p-gtsplitchar) return rsearch(p-gthikid,
s) else if (s 0) return 1
return rsearch(p-gteqkid, s)
30/03/05 ???????????????????
???????????????? 28
29???????????? (???)
Membership Searching
i
String b y
o
b
s
h
a
e
n
t
s
t
n
e
y
s
f
r
o
t
int rsearch(Tptr p, char s) if(!p)
return 0 if(s lt p-gtsplitchar)
return rsearch(p-gtlokid, s) else if (s gt
p-gtsplitchar) return rsearch(p-gthikid,
s) else if (s 0) return 1
return rsearch(p-gteqkid, s)
int rsearch(Tptr p, char s) if(!p)
return 0 if(s lt p-gtsplitchar)
return rsearch(p-gtlokid, s) else if (s gt
p-gtsplitchar) return rsearch(p-gthikid,
s) else if (s 0) return 1
return rsearch(p-gteqkid, s)
int rsearch(Tptr p, char s) if(!p)
return 0 if(s lt p-gtsplitchar)
return rsearch(p-gtlokid, s) else if (s gt
p-gtsplitchar) return rsearch(p-gthikid,
s) else if (s 0) return 1
return rsearch(p-gteqkid, s)
int rsearch(Tptr p, char s) if(!p)
return 0 if(s lt p-gtsplitchar)
return rsearch(p-gtlokid, s) else if (s gt
p-gtsplitchar) return rsearch(p-gthikid,
s) else if (s 0) return 1
return rsearch(p-gteqkid, s)
int rsearch(Tptr p, char s) if(!p)
return 0 if(s lt p-gtsplitchar)
return rsearch(p-gtlokid, s) else if (s gt
p-gtsplitchar) return rsearch(p-gthikid,
s) else if (s 0) return 1
return rsearch(p-gteqkid, s)
30/03/05 ???????????????????
???????????????? 29
30???????????? (???)
Membership Searching
i
String b y
o
b
s
h
a
e
n
t
s
t
n
e
y
s
f
r
o
t
int rsearch(Tptr p, char s) if(!p)
return 0 if(s lt p-gtsplitchar)
return rsearch(p-gtlokid, s) else if (s gt
p-gtsplitchar) return rsearch(p-gthikid,
s) else if (s 0) return 1
return rsearch(p-gteqkid, s)
int rsearch(Tptr p, char s) if(!p)
return 0 if(s lt p-gtsplitchar)
return rsearch(p-gtlokid, s) else if (s gt
p-gtsplitchar) return rsearch(p-gthikid,
s) else if (s 0) return 1
return rsearch(p-gteqkid, s)
int rsearch(Tptr p, char s) if(!p)
return 0 if(s lt p-gtsplitchar)
return rsearch(p-gtlokid, s) else if (s gt
p-gtsplitchar) return rsearch(p-gthikid,
s) else if (s 0) return 1
return rsearch(p-gteqkid, s)
int rsearch(Tptr p, char s) if(!p)
return 0 if(s lt p-gtsplitchar)
return rsearch(p-gtlokid, s) else if (s gt
p-gtsplitchar) return rsearch(p-gthikid,
s) else if (s 0) return 1
return rsearch(p-gteqkid, s)
int rsearch(Tptr p, char s) if(!p)
return 0 if(s lt p-gtsplitchar)
return rsearch(p-gtlokid, s) else if (s gt
p-gtsplitchar) return rsearch(p-gthikid,
s) else if (s 0) return 1
return rsearch(p-gteqkid, s)
30/03/05 ???????????????????
???????????????? 30
31???????????? (???)
Membership Searching
i
String b y
o
b
s
h
a
e
n
t
s
t
n
e
y
s
f
r
o
t
int rsearch(Tptr p, char s) if(!p)
return 0 if(s lt p-gtsplitchar)
return rsearch(p-gtlokid, s) else if (s gt
p-gtsplitchar) return rsearch(p-gthikid,
s) else if (s 0) return 1
return rsearch(p-gteqkid, s)
int rsearch(Tptr p, char s) if(!p)
return 0 if(s lt p-gtsplitchar)
return rsearch(p-gtlokid, s) else if (s gt
p-gtsplitchar) return rsearch(p-gthikid,
s) else if (s 0) return 1
return rsearch(p-gteqkid, s)
int rsearch(Tptr p, char s) if(!p)
return 0 if(s lt p-gtsplitchar)
return rsearch(p-gtlokid, s) else if (s gt
p-gtsplitchar) return rsearch(p-gthikid,
s) else if (s 0) return 1
return rsearch(p-gteqkid, s)
int rsearch(Tptr p, char s) if(!p)
return 0 if(s lt p-gtsplitchar)
return rsearch(p-gtlokid, s) else if (s gt
p-gtsplitchar) return rsearch(p-gthikid,
s) else if (s 0) return 1
return rsearch(p-gteqkid, s)
int rsearch(Tptr p, char s) if(!p)
return 0 if(s lt p-gtsplitchar)
return rsearch(p-gtlokid, s) else if (s gt
p-gtsplitchar) return rsearch(p-gthikid,
s) else if (s 0) return 1
return rsearch(p-gteqkid, s)
30/03/05 ???????????????????
???????????????? 31
32???????????? (???)
Membership Searching
i
String b y
o
b
s
h
a
e
n
t
s
t
n
e
y
s
f
r
o
t
int rsearch(Tptr p, char s) if(!p)
return 0 if(s lt p-gtsplitchar)
return rsearch(p-gtlokid, s) else if (s gt
p-gtsplitchar) return rsearch(p-gthikid,
s) else if (s 0) return 1
return rsearch(p-gteqkid, s)
int rsearch(Tptr p, char s) if(!p)
return 0 if(s lt p-gtsplitchar)
return rsearch(p-gtlokid, s) else if (s gt
p-gtsplitchar) return rsearch(p-gthikid,
s) else if (s 0) return 1
return rsearch(p-gteqkid, s)
int rsearch(Tptr p, char s) if(!p)
return 0 if(s lt p-gtsplitchar)
return rsearch(p-gtlokid, s) else if (s gt
p-gtsplitchar) return rsearch(p-gthikid,
s) else if (s 0) return 1
return rsearch(p-gteqkid, s)
int rsearch(Tptr p, char s) if(!p)
return 0 if(s lt p-gtsplitchar)
return rsearch(p-gtlokid, s) else if (s gt
p-gtsplitchar) return rsearch(p-gthikid,
s) else if (s 0) return 1
return rsearch(p-gteqkid, s)
int rsearch(Tptr p, char s) if(!p)
return 0 if(s lt p-gtsplitchar)
return rsearch(p-gtlokid, s) else if (s gt
p-gtsplitchar) return rsearch(p-gthikid,
s) else if (s 0) return 1
return rsearch(p-gteqkid, s)
30/03/05 ???????????????????
???????????????? 32
33???????????? (???)
Membership Searching
i
String b y
o
b
s
h
a
e
n
t
s
t
n
e
y
s
f
r
o
t
int rsearch(Tptr p, char s) if(!p)
return 0 if(s lt p-gtsplitchar)
return rsearch(p-gtlokid, s) else if (s gt
p-gtsplitchar) return rsearch(p-gthikid,
s) else if (s 0) return 1
return rsearch(p-gteqkid, s)
int rsearch(Tptr p, char s) if(!p)
return 0 if(s lt p-gtsplitchar)
return rsearch(p-gtlokid, s) else if (s gt
p-gtsplitchar) return rsearch(p-gthikid,
s) else if (s 0) return 1
return rsearch(p-gteqkid, s)
int rsearch(Tptr p, char s) if(!p)
return 0 if(s lt p-gtsplitchar)
return rsearch(p-gtlokid, s) else if (s gt
p-gtsplitchar) return rsearch(p-gthikid,
s) else if (s 0) return 1
return rsearch(p-gteqkid, s)
int rsearch(Tptr p, char s) if(!p)
return 0 if(s lt p-gtsplitchar)
return rsearch(p-gtlokid, s) else if (s gt
p-gtsplitchar) return rsearch(p-gthikid,
s) else if (s 0) return 1
return rsearch(p-gteqkid, s)
int rsearch(Tptr p, char s) if(!p)
return 0 if(s lt p-gtsplitchar)
return rsearch(p-gtlokid, s) else if (s gt
p-gtsplitchar) return rsearch(p-gthikid,
s) else if (s 0) return 1
return rsearch(p-gteqkid, s)
30/03/05 ???????????????????
???????????????? 33
34???????????? (???)
Membership Searching
i
String b y
o
b
s
h
a
e
n
t
s
t
n
e
y
s
f
r
o
t
int rsearch(Tptr p, char s) if(!p)
return 0 if(s lt p-gtsplitchar)
return rsearch(p-gtlokid, s) else if (s gt
p-gtsplitchar) return rsearch(p-gthikid,
s) else if (s 0) return 1
return rsearch(p-gteqkid, s)
int rsearch(Tptr p, char s) if(!p)
return 0 if(s lt p-gtsplitchar)
return rsearch(p-gtlokid, s) else if (s gt
p-gtsplitchar) return rsearch(p-gthikid,
s) else if (s 0) return 1
return rsearch(p-gteqkid, s)
int rsearch(Tptr p, char s) if(!p)
return 0 if(s lt p-gtsplitchar)
return rsearch(p-gtlokid, s) else if (s gt
p-gtsplitchar) return rsearch(p-gthikid,
s) else if (s 0) return 1
return rsearch(p-gteqkid, s)
int rsearch(Tptr p, char s) if(!p)
return 0 if(s lt p-gtsplitchar)
return rsearch(p-gtlokid, s) else if (s gt
p-gtsplitchar) return rsearch(p-gthikid,
s) else if (s 0) return 1
return rsearch(p-gteqkid, s)
int rsearch(Tptr p, char s) if(!p)
return 0 if(s lt p-gtsplitchar)
return rsearch(p-gtlokid, s) else if (s gt
p-gtsplitchar) return rsearch(p-gthikid,
s) else if (s 0) return 1
return rsearch(p-gteqkid, s)
30/03/05 ???????????????????
???????????????? 34
35???????????? (???)
Membership Searching
i
String b y
o
b
s
h
a
e
n
t
s
t
n
e
y
s
f
r
o
t
int rsearch(Tptr p, char s) if(!p)
return 0 if(s lt p-gtsplitchar)
return rsearch(p-gtlokid, s) else if (s gt
p-gtsplitchar) return rsearch(p-gthikid,
s) else if (s 0) return 1
return rsearch(p-gteqkid, s)
int rsearch(Tptr p, char s) if(!p)
return 0 if(s lt p-gtsplitchar)
return rsearch(p-gtlokid, s) else if (s gt
p-gtsplitchar) return rsearch(p-gthikid,
s) else if (s 0) return 1
return rsearch(p-gteqkid, s)
int rsearch(Tptr p, char s) if(!p)
return 0 if(s lt p-gtsplitchar)
return rsearch(p-gtlokid, s) else if (s gt
p-gtsplitchar) return rsearch(p-gthikid,
s) else if (s 0) return 1
return rsearch(p-gteqkid, s)
int rsearch(Tptr p, char s) if(!p)
return 0 if(s lt p-gtsplitchar)
return rsearch(p-gtlokid, s) else if (s gt
p-gtsplitchar) return rsearch(p-gthikid,
s) else if (s 0) return 1
return rsearch(p-gteqkid, s)
int rsearch(Tptr p, char s) if(!p)
return 0 if(s lt p-gtsplitchar)
return rsearch(p-gtlokid, s) else if (s gt
p-gtsplitchar) return rsearch(p-gthikid,
s) else if (s 0) return 1
return rsearch(p-gteqkid, s)
30/03/05 ???????????????????
???????????????? 35
36???????????? (???)
Membership Searching
i
String b y
o
b
s
h
a
e
n
t
s
t
n
e
y
s
f
r
o
t
int rsearch(Tptr p, char s) if(!p)
return 0 if(s lt p-gtsplitchar)
return rsearch(p-gtlokid, s) else if (s gt
p-gtsplitchar) return rsearch(p-gthikid,
s) else if (s 0) return 1
return rsearch(p-gteqkid, s)
int rsearch(Tptr p, char s) if(!p)
return 0 if(s lt p-gtsplitchar)
return rsearch(p-gtlokid, s) else if (s gt
p-gtsplitchar) return rsearch(p-gthikid,
s) else if (s 0) return 1
return rsearch(p-gteqkid, s)
int rsearch(Tptr p, char s) if(!p)
return 0 if(s lt p-gtsplitchar)
return rsearch(p-gtlokid, s) else if (s gt
p-gtsplitchar) return rsearch(p-gthikid,
s) else if (s 0) return 1
return rsearch(p-gteqkid, s)
int rsearch(Tptr p, char s) if(!p)
return 0 if(s lt p-gtsplitchar)
return rsearch(p-gtlokid, s) else if (s gt
p-gtsplitchar) return rsearch(p-gthikid,
s) else if (s 0) return 1
return rsearch(p-gteqkid, s)
int rsearch(Tptr p, char s) if(!p)
return 0 if(s lt p-gtsplitchar)
return rsearch(p-gtlokid, s) else if (s gt
p-gtsplitchar) return rsearch(p-gthikid,
s) else if (s 0) return 1
return rsearch(p-gteqkid, s)
30/03/05 ???????????????????
???????????????? 36
37???????????? (???)
Membership Searching
i
String b y
o
b
s
h
a
e
n
t
s
t
n
e
y
s
f
r
o
t
int rsearch(Tptr p, char s) if(!p)
return 0 if(s lt p-gtsplitchar)
return rsearch(p-gtlokid, s) else if (s gt
p-gtsplitchar) return rsearch(p-gthikid,
s) else if (s 0) return 1
return rsearch(p-gteqkid, s)
int rsearch(Tptr p, char s) if(!p)
return 0 if(s lt p-gtsplitchar)
return rsearch(p-gtlokid, s) else if (s gt
p-gtsplitchar) return rsearch(p-gthikid,
s) else if (s 0) return 1
return rsearch(p-gteqkid, s)
int rsearch(Tptr p, char s) if(!p)
return 0 if(s lt p-gtsplitchar)
return rsearch(p-gtlokid, s) else if (s gt
p-gtsplitchar) return rsearch(p-gthikid,
s) else if (s 0) return 1
return rsearch(p-gteqkid, s)
int rsearch(Tptr p, char s) if(!p)
return 0 if(s lt p-gtsplitchar)
return rsearch(p-gtlokid, s) else if (s gt
p-gtsplitchar) return rsearch(p-gthikid,
s) else if (s 0) return 1
return rsearch(p-gteqkid, s)
30/03/05 ???????????????????
???????????????? 37
38???????????? (???)
Membership Searching
i
String b y
o
b
s
h
a
e
n
t
s
t
n
e
y
s
f
r
o
t
int rsearch(Tptr p, char s) if(!p)
return 0 if(s lt p-gtsplitchar)
return rsearch(p-gtlokid, s) else if (s gt
p-gtsplitchar) return rsearch(p-gthikid,
s) else if (s 0) return 1
return rsearch(p-gteqkid, s)
int rsearch(Tptr p, char s) if(!p)
return 0 if(s lt p-gtsplitchar)
return rsearch(p-gtlokid, s) else if (s gt
p-gtsplitchar) return rsearch(p-gthikid,
s) else if (s 0) return 1
return rsearch(p-gteqkid, s)
30/03/05 ???????????????????
???????????????? 38
39???????????? (???)
Membership Searching
i
String b y
o
b
s
h
a
e
n
t
s
t
n
e
y
s
f
r
o
t
int rsearch(Tptr p, char s) if(!p)
return 0 if(s lt p-gtsplitchar)
return rsearch(p-gtlokid, s) else if (s gt
p-gtsplitchar) return rsearch(p-gthikid,
s) else if (s 0) return 1
return rsearch(p-gteqkid, s)
30/03/05 ???????????????????
???????????????? 39
40Insert a new string
String m e
s
Tptr insert(Tptr p, char s) if(p 0)
p (Tptr) malloc(sizeof(Tnode))
p-gtsplitchar s p-gtlokid p-gteqkid
p-gthikid 0 if(s lt p-gtsplitchar)
p-gtlokid insert(p-gtlokid, s) else if(s
p-gtsplitchar) if(s ! 0) p-gteqkid
insert(p-gteqkid, s) else p-gthikid
insert(p-gthikid, s) return p
41Insert a new string
i
o
b
s
String m e
h
a
e
n
t
t
n
s
e
y
s
f
r
o
t
Tptr insert(Tptr p, char s) if(p 0)
p (Tptr) malloc(sizeof(Tnode))
p-gtsplitchar s p-gtlokid p-gteqkid
p-gthikid 0 if(s lt p-gtsplitchar)
p-gtlokid insert(p-gtlokid, s) else if(s
p-gtsplitchar) if(s ! 0) p-gteqkid
insert(p-gteqkid, s) else p-gthikid
insert(p-gthikid, s) return p
if (p 0)
42Insert a new string
i
o
b
s
String m e
h
a
e
n
t
t
n
s
e
y
s
f
r
o
t
Tptr insert(Tptr p, char s) if(p 0)
p (Tptr) malloc(sizeof(Tnode))
p-gtsplitchar s p-gtlokid p-gteqkid
p-gthikid 0 if(s lt p-gtsplitchar)
p-gtlokid insert(p-gtlokid, s) else if(s
p-gtsplitchar) if(s ! 0) p-gteqkid
insert(p-gteqkid, s) else p-gthikid
insert(p-gthikid, s) return p
if(s lt p-gtsplitchar)
43Insert a new string
i
o
b
s
String m e
h
a
e
n
t
t
n
s
e
y
s
f
r
o
t
Tptr insert(Tptr p, char s) if(p 0)
p (Tptr) malloc(sizeof(Tnode))
p-gtsplitchar s p-gtlokid p-gteqkid
p-gthikid 0 if(s lt p-gtsplitchar)
p-gtlokid insert(p-gtlokid, s) else if(s
p-gtsplitchar) if(s ! 0) p-gteqkid
insert(p-gteqkid, s) else p-gthikid
insert(p-gthikid, s) return p
else if(s p-gtsplitchar)
44Insert a new string
i
o
b
s
String m e
h
a
e
n
t
t
n
s
e
y
s
f
r
o
t
Tptr insert(Tptr p, char s) if(p 0)
p (Tptr) malloc(sizeof(Tnode))
p-gtsplitchar s p-gtlokid p-gteqkid
p-gthikid 0 if(s lt p-gtsplitchar)
p-gtlokid insert(p-gtlokid, s) else if(s
p-gtsplitchar) if(s ! 0) p-gteqkid
insert(p-gteqkid, s) else p-gthikid
insert(p-gthikid, s) return p
else
45Insert a new string
i
o
b
s
String m e
h
a
e
n
t
t
n
s
e
y
s
f
r
o
t
Tptr insert(Tptr p, char s) if(p 0)
p (Tptr) malloc(sizeof(Tnode))
p-gtsplitchar s p-gtlokid p-gteqkid
p-gthikid 0 if(s lt p-gtsplitchar)
p-gtlokid insert(p-gtlokid, s) else if(s
p-gtsplitchar) if(s ! 0) p-gteqkid
insert(p-gteqkid, s) else p-gthikid
insert(p-gthikid, s) return p
p-gthikid insert(p-gthikid, s)
46Insert a new string
i
o
b
s
String m e
h
a
e
n
t
t
n
s
e
y
s
f
r
o
t
Tptr insert(Tptr p, char s) if(p 0)
p (Tptr) malloc(sizeof(Tnode))
p-gtsplitchar s p-gtlokid p-gteqkid
p-gthikid 0 if(s lt p-gtsplitchar)
p-gtlokid insert(p-gtlokid, s) else if(s
p-gtsplitchar) if(s ! 0) p-gteqkid
insert(p-gteqkid, s) else p-gthikid
insert(p-gthikid, s) return p
47Insert a new string
i
o
b
s
String m e
h
a
e
n
t
t
n
s
e
y
s
f
r
o
t
Tptr insert(Tptr p, char s) if(p 0)
p (Tptr) malloc(sizeof(Tnode))
p-gtsplitchar s p-gtlokid p-gteqkid
p-gthikid 0 if(s lt p-gtsplitchar)
p-gtlokid insert(p-gtlokid, s) else if(s
p-gtsplitchar) if(s ! 0) p-gteqkid
insert(p-gteqkid, s) else p-gthikid
insert(p-gthikid, s) return p
Tptr insert(Tptr p, char s) if(p 0)
p (Tptr) malloc(sizeof(Tnode))
p-gtsplitchar s p-gtlokid p-gteqkid
p-gthikid 0 if(s lt p-gtsplitchar)
p-gtlokid insert(p-gtlokid, s) else if(s
p-gtsplitchar) if(s ! 0) p-gteqkid
insert(p-gteqkid, s) else p-gthikid
insert(p-gthikid, s) return p
if (p 0)
48Insert a new string
i
o
b
s
String m e
h
a
e
n
t
t
n
s
e
y
s
f
r
o
t
Tptr insert(Tptr p, char s) if(p 0)
p (Tptr) malloc(sizeof(Tnode))
p-gtsplitchar s p-gtlokid p-gteqkid
p-gthikid 0 if(s lt p-gtsplitchar)
p-gtlokid insert(p-gtlokid, s) else if(s
p-gtsplitchar) if(s ! 0) p-gteqkid
insert(p-gteqkid, s) else p-gthikid
insert(p-gthikid, s) return p
Tptr insert(Tptr p, char s) if(p 0)
p (Tptr) malloc(sizeof(Tnode))
p-gtsplitchar s p-gtlokid p-gteqkid
p-gthikid 0 if(s lt p-gtsplitchar)
p-gtlokid insert(p-gtlokid, s) else if(s
p-gtsplitchar) if(s ! 0) p-gteqkid
insert(p-gteqkid, s) else p-gthikid
insert(p-gthikid, s) return p
Tptr insert(Tptr p, char s) if(p 0)
p (Tptr) malloc(sizeof(Tnode))
p-gtsplitchar s p-gtlokid p-gteqkid
p-gthikid 0 if(s lt p-gtsplitchar)
p-gtlokid insert(p-gtlokid, s) else if(s
p-gtsplitchar) if(s ! 0) p-gteqkid
insert(p-gteqkid, s) else p-gthikid
insert(p-gthikid, s) return p
if (p 0)
if(s lt p-gtsplitchar)
49Insert a new string
i
o
b
s
String m e
h
a
e
n
t
t
n
s
e
y
s
f
r
o
t
Tptr insert(Tptr p, char s) if(p 0)
p (Tptr) malloc(sizeof(Tnode))
p-gtsplitchar s p-gtlokid p-gteqkid
p-gthikid 0 if(s lt p-gtsplitchar)
p-gtlokid insert(p-gtlokid, s) else if(s
p-gtsplitchar) if(s ! 0) p-gteqkid
insert(p-gteqkid, s) else p-gthikid
insert(p-gthikid, s) return p
Tptr insert(Tptr p, char s) if(p 0)
p (Tptr) malloc(sizeof(Tnode))
p-gtsplitchar s p-gtlokid p-gteqkid
p-gthikid 0 if(s lt p-gtsplitchar)
p-gtlokid insert(p-gtlokid, s) else if(s
p-gtsplitchar) if(s ! 0) p-gteqkid
insert(p-gteqkid, s) else p-gthikid
insert(p-gthikid, s) return p
Tptr insert(Tptr p, char s) if(p 0)
p (Tptr) malloc(sizeof(Tnode))
p-gtsplitchar s p-gtlokid p-gteqkid
p-gthikid 0 if(s lt p-gtsplitchar)
p-gtlokid insert(p-gtlokid, s) else if(s
p-gtsplitchar) if(s ! 0) p-gteqkid
insert(p-gteqkid, s) else p-gthikid
insert(p-gthikid, s) return p
if (p 0)
p-gtlokid insert(p-gtlokid, s)
50Insert a new string
i
o
b
s
String m e
h
a
e
n
t
t
n
s
e
y
s
f
r
o
t
Tptr insert(Tptr p, char s) if(p 0)
p (Tptr) malloc(sizeof(Tnode))
p-gtsplitchar s p-gtlokid p-gteqkid
p-gthikid 0 if(s lt p-gtsplitchar)
p-gtlokid insert(p-gtlokid, s) else if(s
p-gtsplitchar) if(s ! 0) p-gteqkid
insert(p-gteqkid, s) else p-gthikid
insert(p-gthikid, s) return p
Tptr insert(Tptr p, char s) if(p 0)
p (Tptr) malloc(sizeof(Tnode))
p-gtsplitchar s p-gtlokid p-gteqkid
p-gthikid 0 if(s lt p-gtsplitchar)
p-gtlokid insert(p-gtlokid, s) else if(s
p-gtsplitchar) if(s ! 0) p-gteqkid
insert(p-gteqkid, s) else p-gthikid
insert(p-gthikid, s) return p
Tptr insert(Tptr p, char s) if(p 0)
p (Tptr) malloc(sizeof(Tnode))
p-gtsplitchar s p-gtlokid p-gteqkid
p-gthikid 0 if(s lt p-gtsplitchar)
p-gtlokid insert(p-gtlokid, s) else if(s
p-gtsplitchar) if(s ! 0) p-gteqkid
insert(p-gteqkid, s) else p-gthikid
insert(p-gthikid, s) return p
51Insert a new string
i
o
b
s
String m e
h
a
e
n
t
t
n
s
e
y
s
f
r
o
t
Tptr insert(Tptr p, char s) if(p 0)
p (Tptr) malloc(sizeof(Tnode))
p-gtsplitchar s p-gtlokid p-gteqkid
p-gthikid 0 if(s lt p-gtsplitchar)
p-gtlokid insert(p-gtlokid, s) else if(s
p-gtsplitchar) if(s ! 0) p-gteqkid
insert(p-gteqkid, s) else p-gthikid
insert(p-gthikid, s) return p
Tptr insert(Tptr p, char s) if(p 0)
p (Tptr) malloc(sizeof(Tnode))
p-gtsplitchar s p-gtlokid p-gteqkid
p-gthikid 0 if(s lt p-gtsplitchar)
p-gtlokid insert(p-gtlokid, s) else if(s
p-gtsplitchar) if(s ! 0) p-gteqkid
insert(p-gteqkid, s) else p-gthikid
insert(p-gthikid, s) return p
Tptr insert(Tptr p, char s) if(p 0)
p (Tptr) malloc(sizeof(Tnode))
p-gtsplitchar s p-gtlokid p-gteqkid
p-gthikid 0 if(s lt p-gtsplitchar)
p-gtlokid insert(p-gtlokid, s) else if(s
p-gtsplitchar) if(s ! 0) p-gteqkid
insert(p-gteqkid, s) else p-gthikid
insert(p-gthikid, s) return p
Tptr insert(Tptr p, char s) if(p 0)
p (Tptr) malloc(sizeof(Tnode))
p-gtsplitchar s p-gtlokid p-gteqkid
p-gthikid 0 if(s lt p-gtsplitchar)
p-gtlokid insert(p-gtlokid, s) else if(s
p-gtsplitchar) if(s ! 0) p-gteqkid
insert(p-gteqkid, s) else p-gthikid
insert(p-gthikid, s) return p
if (p 0)
52Insert a new string
i
o
b
s
String m e
h
a
e
n
t
t
n
s
e
y
s
f
r
o
t
Tptr insert(Tptr p, char s) if(p 0)
p (Tptr) malloc(sizeof(Tnode))
p-gtsplitchar s p-gtlokid p-gteqkid
p-gthikid 0 if(s lt p-gtsplitchar)
p-gtlokid insert(p-gtlokid, s) else if(s
p-gtsplitchar) if(s ! 0) p-gteqkid
insert(p-gteqkid, s) else p-gthikid
insert(p-gthikid, s) return p
Tptr insert(Tptr p, char s) if(p 0)
p (Tptr) malloc(sizeof(Tnode))
p-gtsplitchar s p-gtlokid p-gteqkid
p-gthikid 0 if(s lt p-gtsplitchar)
p-gtlokid insert(p-gtlokid, s) else if(s
p-gtsplitchar) if(s ! 0) p-gteqkid
insert(p-gteqkid, s) else p-gthikid
insert(p-gthikid, s) return p
Tptr insert(Tptr p, char s) if(p 0)
p (Tptr) malloc(sizeof(Tnode))
p-gtsplitchar s p-gtlokid p-gteqkid
p-gthikid 0 if(s lt p-gtsplitchar)
p-gtlokid insert(p-gtlokid, s) else if(s
p-gtsplitchar) if(s ! 0) p-gteqkid
insert(p-gteqkid, s) else p-gthikid
insert(p-gthikid, s) return p
Tptr insert(Tptr p, char s) if(p 0)
p (Tptr) malloc(sizeof(Tnode))
p-gtsplitchar s p-gtlokid p-gteqkid
p-gthikid 0 if(s lt p-gtsplitchar)
p-gtlokid insert(p-gtlokid, s) else if(s
p-gtsplitchar) if(s ! 0) p-gteqkid
insert(p-gteqkid, s) else p-gthikid
insert(p-gthikid, s) return p
p (Tptr) malloc(sizeof(Tnode))
53Insert a new string
i
o
b
s
String m e
h
a
e
n
t
t
n
m
s
e
y
s
f
r
o
t
Tptr insert(Tptr p, char s) if(p 0)
p (Tptr) malloc(sizeof(Tnode))
p-gtsplitchar s p-gtlokid p-gteqkid
p-gthikid 0 if(s lt p-gtsplitchar)
p-gtlokid insert(p-gtlokid, s) else if(s
p-gtsplitchar) if(s ! 0) p-gteqkid
insert(p-gteqkid, s) else p-gthikid
insert(p-gthikid, s) return p
Tptr insert(Tptr p, char s) if(p 0)
p (Tptr) malloc(sizeof(Tnode))
p-gtsplitchar s p-gtlokid p-gteqkid
p-gthikid 0 if(s lt p-gtsplitchar)
p-gtlokid insert(p-gtlokid, s) else if(s
p-gtsplitchar) if(s ! 0) p-gteqkid
insert(p-gteqkid, s) else p-gthikid
insert(p-gthikid, s) return p
Tptr insert(Tptr p, char s) if(p 0)
p (Tptr) malloc(sizeof(Tnode))
p-gtsplitchar s p-gtlokid p-gteqkid
p-gthikid 0 if(s lt p-gtsplitchar)
p-gtlokid insert(p-gtlokid, s) else if(s
p-gtsplitchar) if(s ! 0) p-gteqkid
insert(p-gteqkid, s) else p-gthikid
insert(p-gthikid, s) return p
Tptr insert(Tptr p, char s) if(p 0)
p (Tptr) malloc(sizeof(Tnode))
p-gtsplitchar s p-gtlokid p-gteqkid
p-gthikid 0 if(s lt p-gtsplitchar)
p-gtlokid insert(p-gtlokid, s) else if(s
p-gtsplitchar) if(s ! 0) p-gteqkid
insert(p-gteqkid,