หลักเกณฑ และว ธิการตรวจวี ัด ...infofile.pcd.go.th › air › Harbor_measure.pdfร บแสง ท ถ กฝ นละอองฟ
SEARCHING · 2005. 1. 15. · การเปรียบเท ียบท ี่มากท...
Transcript of SEARCHING · 2005. 1. 15. · การเปรียบเท ียบท ี่มากท...
![Page 1: SEARCHING · 2005. 1. 15. · การเปรียบเท ียบท ี่มากท ี่สุด ก อนท ี่จะได ผล ดังน ั้น ถ](https://reader035.fdocuments.in/reader035/viewer/2022071022/5fd6cd0f531f4d355f54857c/html5/thumbnails/1.jpg)
SEARCHING
![Page 2: SEARCHING · 2005. 1. 15. · การเปรียบเท ียบท ี่มากท ี่สุด ก อนท ี่จะได ผล ดังน ั้น ถ](https://reader035.fdocuments.in/reader035/viewer/2022071022/5fd6cd0f531f4d355f54857c/html5/thumbnails/2.jpg)
S. Prasitjutrakul 1994
!ขอมูลที่เก็บไวประกอบดวย– คีย (Key)– ขอมูลที่เกี่ยวของกับคีย
!การคนขอมูล– ที่เก็บในหนวยความจํ าหลัก ( internal search )– ที่เก็บในหนวยความจํ าสํ ารอง ( external search )
!การคนแบบลํ าดับ ( sequential search )!การคนแบบทวิภาค ( binary search )
การคนขอมูล ( Searching )
![Page 3: SEARCHING · 2005. 1. 15. · การเปรียบเท ียบท ี่มากท ี่สุด ก อนท ี่จะได ผล ดังน ั้น ถ](https://reader035.fdocuments.in/reader035/viewer/2022071022/5fd6cd0f531f4d355f54857c/html5/thumbnails/3.jpg)
S. Prasitjutrakul 1994
Sequential Searchtypedef int KeyType;typedef struct ItemTag { KeyType key; char Name[30]; ...} ItemType;
typedef struct ListTag { int count; ItemType data[ MAX ];} ListType;
int SeqSearch( ListType pList, KeyType TargetKey ){ int loc;
for ( loc=0; loc<pList->count; loc++ ) if ( EQ( pList->data[loc].key == TargetKey ) ) return( loc ); return( -1 );}
31115
31316
31585
31745
42515
22245
51815
21915
สมหวัง สมนึก สมบูรณ สมใจ สมศักดิ์ สมปอง สมเกียรติ สมหมาย
0
1
2
3
4
5
6
7
![Page 4: SEARCHING · 2005. 1. 15. · การเปรียบเท ียบท ี่มากท ี่สุด ก อนท ี่จะได ผล ดังน ั้น ถ](https://reader035.fdocuments.in/reader035/viewer/2022071022/5fd6cd0f531f4d355f54857c/html5/thumbnails/4.jpg)
S. Prasitjutrakul 1994
Sequential Searchtypedef struct NodeTag { ItemType data; struct NodeTag *pNext;} NodeType;
typedef struct ListTag;
NodeTag *pHeader;} ListType;
NodeType *SeqSearch( ListType *pList, KeyType TargetKey ){ NodeType *pLoc;
for ( pLoc=pList->pHeader; ploc!=NULL; ploc=pLoc->pNext ) if ( EQ( ( L >d t ) k T tK ) ) t ( l )
31316
31585 31745
42515 22245
51815 21915
สมนึก
สมบูรณ สมใจ
สมศักดิ์ สมปอง
สมเกียรติ สมหมาย
31115 สมหวัง
![Page 5: SEARCHING · 2005. 1. 15. · การเปรียบเท ียบท ี่มากท ี่สุด ก อนท ี่จะได ผล ดังน ั้น ถ](https://reader035.fdocuments.in/reader035/viewer/2022071022/5fd6cd0f531f4d355f54857c/html5/thumbnails/5.jpg)
S. Prasitjutrakul 1994
Analysis of Sequential Search
! จํ านวนครั้งในการเปรียบเทียบคียระหวางการคน เปนปจจัยในการวิเคราะหเวลาในการคนขอมูล
!สมมติใหมีขอมูล n ตัวถาหาคียที่ตองการไมพบ ตองมีการเปรียบเทียบ n ครั้งถาหาคียที่ตองการพบ จํ านวนการเปรียบเทียบขึ้นกับตํ าแหนงของขอมูล ใหความนาจะเปนในการคนขอมูลแตละตัวมีโอกาสเทากัน
1+2+3+...+n 0.5n(n+1)= 0.5(n+1)
n n=
![Page 6: SEARCHING · 2005. 1. 15. · การเปรียบเท ียบท ี่มากท ี่สุด ก อนท ี่จะได ผล ดังน ั้น ถ](https://reader035.fdocuments.in/reader035/viewer/2022071022/5fd6cd0f531f4d355f54857c/html5/thumbnails/6.jpg)
S. Prasitjutrakul 1994
การคนแบบทวิภาค ( Binary Search)
31115
31316
31585
31745
42515
22245
51815
21915
สมหวัง สมนึก สมบูรณ สมใจ สมศักดิ์
สมปอง
สมเกียรติ
สมหมาย0
1
2
3
4
5
6
7
ตองการทราบชื่อของรหัส 31745 จะมีการเปรียบเทียบขอมูล 2 ครั้งสังเกตวุาขอมูลจะตองถูกเก็บในลักษณะที่ - เรียงลํ าดับตามคีย - สามารถอางถึงขอมูลตัวใดก็ไดในเวลาที่เทากันจงึไมเหมาะกับกรณีที่เก็บขอมูลแบบ linked list
เปรียบเทียบครั้งที่ 1
เปรียบเทียบครั้งที่ 2
![Page 7: SEARCHING · 2005. 1. 15. · การเปรียบเท ียบท ี่มากท ี่สุด ก อนท ี่จะได ผล ดังน ั้น ถ](https://reader035.fdocuments.in/reader035/viewer/2022071022/5fd6cd0f531f4d355f54857c/html5/thumbnails/7.jpg)
S. Prasitjutrakul 1994
Binary Search : Binary2int Binary2( ListType *pList, KeyType TargetKey ){ int top, bot, mid;
bot = 0; top = pList->count - 1; while ( bot <= top ) { mid = (bot + top) / 2; if ( EQ( pList->data[mid].key, TargetKey ) ) return( mid ); else if ( LT( pList->data[mid].key, TargetKey ) ) bot = mid + 1; else top = mid - 1; } return( -1 );}
a b c d g h k m p s t u x
0 1 2 3 4 5 6 7 8 9 10 11 12
![Page 8: SEARCHING · 2005. 1. 15. · การเปรียบเท ียบท ี่มากท ี่สุด ก อนท ี่จะได ผล ดังน ั้น ถ](https://reader035.fdocuments.in/reader035/viewer/2022071022/5fd6cd0f531f4d355f54857c/html5/thumbnails/8.jpg)
S. Prasitjutrakul 1994
Binary Search : Binary1int Binary1( ListType *pList, KeyType TargetKey ){ int top, bot, mid;
bot = 0; top = pList->count - 1; if ( top == -1 ) return( -1 ); while ( bot < top ) { mid = (bot + top) / 2; if ( LT( pList->data[mid].key, TargetKey ) ) bot = mid + 1; else top = mid; } if ( EQ( pList->data[top].key, TargetKey ) ) return( top ); else return( -1 );}
a b c d g h k m p s t u x
0 1 2 3 4 5 6 7 8 9 10 11 12
![Page 9: SEARCHING · 2005. 1. 15. · การเปรียบเท ียบท ี่มากท ี่สุด ก อนท ี่จะได ผล ดังน ั้น ถ](https://reader035.fdocuments.in/reader035/viewer/2022071022/5fd6cd0f531f4d355f54857c/html5/thumbnails/9.jpg)
S. Prasitjutrakul 1994
Comparison Trees
Sequentialsearch
2
3
1
n-1
n
1
2
3
n-1
n
≠
≠
≠
≠
≠
≠
=
=
=
=
=
![Page 10: SEARCHING · 2005. 1. 15. · การเปรียบเท ียบท ี่มากท ี่สุด ก อนท ี่จะได ผล ดังน ั้น ถ](https://reader035.fdocuments.in/reader035/viewer/2022071022/5fd6cd0f531f4d355f54857c/html5/thumbnails/10.jpg)
S. Prasitjutrakul 1994
Comparison Trees
Binary2
3
=
6 9
0 2 5 8
1 7
4
= =
= = ==
== =
<
<
< <<
< <
<
<
<
![Page 11: SEARCHING · 2005. 1. 15. · การเปรียบเท ียบท ี่มากท ี่สุด ก อนท ี่จะได ผล ดังน ั้น ถ](https://reader035.fdocuments.in/reader035/viewer/2022071022/5fd6cd0f531f4d355f54857c/html5/thumbnails/11.jpg)
S. Prasitjutrakul 1994
Comparison Trees
5 610
0 2 3 4 5 7 8 9
1 3 6 8
2 7
4
2 3 4
510 6
7 8 9
≤
≤
≤
≤
≤
≤
≤ ≤
≤≠ ≠≠
≠ ≠ ≠ ≠
≠ ≠≠==
=
=
= =
= ==
==
Binary1
![Page 12: SEARCHING · 2005. 1. 15. · การเปรียบเท ียบท ี่มากท ี่สุด ก อนท ี่จะได ผล ดังน ั้น ถ](https://reader035.fdocuments.in/reader035/viewer/2022071022/5fd6cd0f531f4d355f54857c/html5/thumbnails/12.jpg)
S. Prasitjutrakul 1994
! ราก กิ่ง ใบ จุดภายใน ระดับ ความสูง ของตนไม! ทางเดนิจากจุด a ถึง b ในตนไม คือลํ าดับของกิ่งของตนไมที่ตอกันเปนทางเดินจากจุด a ถึงจุด b
! ตนไมที่สมดุล คือตนไมที่ทุกๆใบในตนไมจะอยูในระดับที่ตางกันได อยางมากเพียง 1 ระดับ
Trees
ราก
ใบ
จุดภายใน
กิ่ง ระดับที่ 0
ระดับที่ 1
ระดับที่ 2
ระดับที่ 3
ความสูง = 3
![Page 13: SEARCHING · 2005. 1. 15. · การเปรียบเท ียบท ี่มากท ี่สุด ก อนท ี่จะได ผล ดังน ั้น ถ](https://reader035.fdocuments.in/reader035/viewer/2022071022/5fd6cd0f531f4d355f54857c/html5/thumbnails/13.jpg)
S. Prasitjutrakul 1994
Comparison Trees
! 2-tree คือตนไมที่ทุกๆจุดภายใน ของตนไม จะมีจุดที่เปนลูก 2 จุด ดังนั้น2-tree ที่มีความสูง h จะมีจํ านวนใบอยางมาก 2 ใบ
! ตนไมเปรียบเทียบคือตนไมแบบ 2-tree! ตนไมเปรียบเทียบของการคนแบบทวิภาค จะเปนตนไมสมดุล! ตนไมเปรียบเทียบที่มี k ใบ จะมีความสูง h
h
h = ?log k 2
![Page 14: SEARCHING · 2005. 1. 15. · การเปรียบเท ียบท ี่มากท ี่สุด ก อนท ี่จะได ผล ดังน ั้น ถ](https://reader035.fdocuments.in/reader035/viewer/2022071022/5fd6cd0f531f4d355f54857c/html5/thumbnails/14.jpg)
S. Prasitjutrakul 1994
! External path length - ผลรวมของจํ านวนกิ่งของทางเดินทั้งหมดจากรากถึงทุกๆใบของตนไม
! Internal path length - ผลรวมของจํ านวนกิ่งของทางเดินทั้งหมดจากรากถึงทุกๆจดุภายในของตนไม (ซึ่งคือจุดที่ไมใชใบ)
External & Internal Path Lengths
ราก
ใบ
จุดภายใน
กิ่งExternal path lengthE = 2+3+3+2+3+3 = 16
Internal path lengthI = 1+2+1+2 = 6
ให q แทนจ ํานวนจุดภายในทั้งหมดของตนไม
E = I + 2q
![Page 15: SEARCHING · 2005. 1. 15. · การเปรียบเท ียบท ี่มากท ี่สุด ก อนท ี่จะได ผล ดังน ั้น ถ](https://reader035.fdocuments.in/reader035/viewer/2022071022/5fd6cd0f531f4d355f54857c/html5/thumbnails/15.jpg)
S. Prasitjutrakul 1994
E - External path lengthI - Internal path lengthn - the number of data
Comparison Counts
กรณีที่หาพบ กรณีที่หาไมพบBinary1
Binary2
En
En
2En+1
2In + 1
![Page 16: SEARCHING · 2005. 1. 15. · การเปรียบเท ียบท ี่มากท ี่สุด ก อนท ี่จะได ผล ดังน ั้น ถ](https://reader035.fdocuments.in/reader035/viewer/2022071022/5fd6cd0f531f4d355f54857c/html5/thumbnails/16.jpg)
S. Prasitjutrakul 1994
Comparison Counts : Binary1
5 610
0 2 3 4 5 7 8 9
1 3 6 8
2 7
4
2 3 4
510 6
7 8 9
≤
≤
≤
≤
≤
≤
≤ ≤
≤≠ ≠≠
≠ ≠ ≠ ≠
≠ ≠≠==
=
=
= =
= ==
==
! ตนไมเปรียบเทียบของการคนขอมูลจํ านวน n ตัว มี 2n ใบ! จ ํานวนครั้งในการเปรียบเทียบที่มากที่สุด จะเทากับความสูงของ ตนไมเปรียบเทียบ
! ความสูงของตนไมเปรียบเทียบของ Binary1 จะประมาณlog 2n = 1 + log n
2 2
![Page 17: SEARCHING · 2005. 1. 15. · การเปรียบเท ียบท ี่มากท ี่สุด ก อนท ี่จะได ผล ดังน ั้น ถ](https://reader035.fdocuments.in/reader035/viewer/2022071022/5fd6cd0f531f4d355f54857c/html5/thumbnails/17.jpg)
S. Prasitjutrakul 1994
Comparison Counts : Binary2
3
=
6 9
0 2 5 8
1 7
4
= =
= = ==
== =
<
<
< <<
< <
<
<
<
ในกรณีที่ไมพบคีย :ในกรณีที่พบคีย : E = I + 2q
I = E - 2q = (n+1) log (n+1) - 2n2
2In + 1 = log (n+1) - 3
2(n+1)n 2
2 log (n+1)2
![Page 18: SEARCHING · 2005. 1. 15. · การเปรียบเท ียบท ี่มากท ี่สุด ก อนท ี่จะได ผล ดังน ั้น ถ](https://reader035.fdocuments.in/reader035/viewer/2022071022/5fd6cd0f531f4d355f54857c/html5/thumbnails/18.jpg)
S. Prasitjutrakul 1994
Sequential vs. Binary Search
n คือจํ านวนขอมูล
กรณีที่หาพบ กรณีที่หาไมพบ
Sequential 0.5(n+1) n
Binary1
Binary2
จ ํานวนการเปรียบเทียบเฉลี่ย
log n + 12 log n + 1
2
2log n - 32 2log n2
Algorithms
![Page 19: SEARCHING · 2005. 1. 15. · การเปรียบเท ียบท ี่มากท ี่สุด ก อนท ี่จะได ผล ดังน ั้น ถ](https://reader035.fdocuments.in/reader035/viewer/2022071022/5fd6cd0f531f4d355f54857c/html5/thumbnails/19.jpg)
S. Prasitjutrakul 1994
Sequential vs. Binary Search
time
# of data
Sequential
Binary2
Binary1
![Page 20: SEARCHING · 2005. 1. 15. · การเปรียบเท ียบท ี่มากท ี่สุด ก อนท ี่จะได ผล ดังน ั้น ถ](https://reader035.fdocuments.in/reader035/viewer/2022071022/5fd6cd0f531f4d355f54857c/html5/thumbnails/20.jpg)
S. Prasitjutrakul 1994
Sequential Search1= <
1
2= <
2
n= <
n
...
int SeqSearch( ListType pList, KeyType TargetKey ){ int loc;
for ( loc=0; loc<pList->count; loc++ ) { if ( GT( TargetKey, pList->data[loc].key ) ) continue; if ( EQ( TargetKey, pList->data[loc].key ) ) return( loc ); else return( -1 ); } return( -1 );}กรณีหาคียพบ : (2+3+...+n+(n+1))/ n = 0.5(n+3)กรณีหาคียไมพบ : (2+3+...+n+(n+1) + n)/(n+1) = 0.5(n+3) + n/(n+1)
![Page 21: SEARCHING · 2005. 1. 15. · การเปรียบเท ียบท ี่มากท ี่สุด ก อนท ี่จะได ผล ดังน ั้น ถ](https://reader035.fdocuments.in/reader035/viewer/2022071022/5fd6cd0f531f4d355f54857c/html5/thumbnails/21.jpg)
S. Prasitjutrakul 1994
Lower Bounds for Searching
5 610
0 2 3 4 5 7 8 9
1 3 6 8
2 7
4
2 3 4
510 6
7 8 9
≤
≤
≤
≤
≤
≤
≤ ≤
≤≠ ≠≠
≠ ≠ ≠ ≠
≠ ≠≠==
=
=
= =
= ==
==
การคนขอมูล n ตัว จะไดผล 2n+1 กรณี ซึ่งคือ - กรณีพบคีย จะมี n กรณี (เนื่องจากมีขอมูลอยู n ตัว) - กรณีไมพบคีย จะมี n+1 กรณี ซึ่งคือกรณีที่ คียที่หา- มีคานอยกวาตัวแรก, มีคาระหวางตัวแรกกับตัวที่สอง, มีคาระหวางตัวที่สองกับตัวที่สาม ,..... มีคามากกวาตัวที่ nใบของตนไมเปรียบเทียบแทนผลของการคน และความสูงของตนไมเปรียบเทียบแทน จํ านวนครัการเปรียบเทียบที่มากที่สุด กอนที่จะไดผล ดังนั้น ถาตนไมมี 2n+1 ใบ จะมีความสูงอยางนอย (2n+1) ≈ 1 + log n 2 2
![Page 22: SEARCHING · 2005. 1. 15. · การเปรียบเท ียบท ี่มากท ี่สุด ก อนท ี่จะได ผล ดังน ั้น ถ](https://reader035.fdocuments.in/reader035/viewer/2022071022/5fd6cd0f531f4d355f54857c/html5/thumbnails/22.jpg)
S. Prasitjutrakul 1994
Lower Bounds for Searching