งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ

งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ

ครั้งที่ 12 การค้นหาข้อมูล (Searching)

งานนำเสนอที่คล้ายกัน


งานนำเสนอเรื่อง: "ครั้งที่ 12 การค้นหาข้อมูล (Searching)"— ใบสำเนางานนำเสนอ:

1 ครั้งที่ 12 การค้นหาข้อมูล (Searching)

2 เรื่องที่จะเรียนวันนี้
Sequential Search Binary Search การค้นหาข้อมูลจะทำได้เมื่อข้อมูลมีการเรียงลำดับแล้ว!!!

3

4 การทำงาน ใช้กับข้อมูลที่เก็บไว้ใน Array โดยการค้นหาด้วยวิธีนี้การจะค้นหาตั้งแต่ข้อมูลตัวแรกไปจนถึงข้อมูลตัวที่ต้องการ หรือไปจนถึงข้อมูลตัวสุดท้าย (กรณีที่ค้นหาไม่พบ)

5 ขั้นตอน ทำการเปรียบเทียบค่า search กับค่าในตำแหน่งสุดท้าย
จากนั้นค่อยๆ เลื่อนไปทางขวามือทีละตำแหน่ง

6 Ex1 กำหนดให้ค่าที่ต้องการค้นหา (search) = 10 [0] [1] [2] [3] [4] [5]
[6] [7] 1 6 9 10 12 17 23 24 X เริ่มต้น 10 <= 24 ? เป็นจริงแสดงว่ามีค่าในอาร์เรย์ รอบที่ i=2 10 = x[2] 10 = 9 แสดงว่ายังไม่เจอข้อมูล ต้องเขยิบไปในช่องถัดไป รอบที่ i=0 10 = x[0] 10 = 1 แสดงว่ายังไม่เจอข้อมูล ต้องเขยิบไปในช่องถัดไป รอบที่ i=3 10 = x[3] 10 = 10 แสดงว่ายังเจอข้อมูล จะทำให้ทราบว่าเลข 10 อยู่ในตำแหน่งที่ 3 ในอาร์เรย์ รอบที่ i=1 10 = x[1] ? 10 = 6 แสดงว่ายังไม่เจอข้อมูล ต้องเขยิบไปในช่องถัดไป

7 Ex2 กำหนดให้ค่า search = 50
[0] [1] [2] [3] [4] [5] [6] [7] 1 6 9 10 12 17 23 24 X เริ่มต้น 50 <= 24 ? เป็นเท็จแสดงว่าไม่ค่าตัวเลข 50 ในอาร์เรย์

8 การเขียนโปรแกรม Sequential Search

9 Sequential search int seqsearch(int data[],int n,int key) { int pos;
if(key<=data[n-1]) for(pos = 0; pos<n; pos++) if(data[pos] == key) return pos; return -1; /* no data found */ }

10 Ex3 #include <stdio.h> #define N 10
int table[N] = {1,2,3,5,6,7,10,22,23,31}; int seqsearch(int data[],int n,int key); void printlist(int data[],int n); void main(void) { int search,result; printlist(table,N) printf("Please enter a data to search : “); scanf("%d",&search); result = seqsearch(table, N, search); if(result >= 0) printf("Data found at location %d\n",result); else printf("No such data in the table\n"); } Ex3

11 int seqsearch(int data[],int n,int key)
{ int pos; if(key<=data[n-1]) for(pos=0; pos<n; pos++) if(data[pos] == key) return pos; return -1; /* no data found */ } void printlist(int data[],int n) printf("%2d ",data[pos]); printf("\n");

12 Ex4 จงเขียนโปรแกรมเพื่อกรอกข้อมูลอายุของนักศึกษา 10 คน (แบบเรียงลำดับ)แล้วทำการค้นหาว่าอายุที่ต้องการอยู่ในลำดับที่เท่าไรโดยใช้ Sequential Search Input Age 1: 14 Age 2: 15 Age 3: 16 Age 4: 18 Age 5: 19 Age 6: 21 Age 7: 22 Age 8: 23 Age 9: 24 Age10:26 Output Enter Search Age : 18 Result = 4 Enter Search Age : 24 Result = 9 Enter Search Age : 20 Result = Not Found

13 Solution Ex4 #include <stdio.h> int input(int data[]) {
int seqsearch(int data[],int n,int key) Solution Ex4

14 void main() {

15

16 การทำงาน หลักการของ Binary search คือ แบ่งข้อมูลออกเป็นสองส่วน แล้วพิจารณาค่าข้อมูลตรงกลาง ถ้าพบว่าค่าข้อมูลตรงกลางมีค่ามากกว่าค่าที่เราต้องการ ก็จะพิจารณาข้อมูลชุดทางซ้ายในรอบที่เหลืออยู่ แต่ถ้ามีค่าน้อยกว่า ก็จะพิจารณาข้อมูลชุดทางซ้ายในรอบที่เหลืออยู่ ถ้าตรงแล้ว ก็จะรายงานตำแหน่งออกไป หากยังไม่ตรงก็จะกระทำการซ้ำกับชุดข้อมูลครึ่งที่สนใจ เช่นนี้ไปเรื่อยๆ จนกว่าจะพบข้อมูล หรือไม่ก็จนกว่าจะไม่มีข้อมูลจะพิจารณาแล้ว ก็จะสรุปได้ว่าไม่มีข้อมูลที่ต้องการค้นหา

17 ขั้นตอน หาค่ากึ่งกลางของข้อมูลจาก Mid = (First + Last)/2
เปรียบเทียบค่า search กับค่าในตำแหน่งกึ่งกลาง ถ้าค่า search > ค่าในตำแหน่งกึ่งกลาง (อยู่ครึ่งหลัง) ถ้าค่า search < ค่าในตำแหน่งกึ่งกลาง (อยู่ครึ่งแรก) ถ้าค่า search = ค่าในตำแหน่งกึ่งกลาง (อยู่กึ่งกลาง)

18 Ex 5 กำหนดให้ค่า search = 12
[0] [1] [2] [3] [4] [5] [6] [7] X 1 6 9 10 12 17 23 24 Mid Last First รอบที่ 1 Mid=(First+Last)/2 =(0+7)/2 =3 (เศษปัดทิ้ง) เปรียบเทียบค่าที่ต้องการค้นหากับค่าในตำแหน่ง Mid 12 > X[3] 12 >10  จะเลือกใช้ข้อมูลครึ่งหลัง

19 [4] [5] [6] [7] X Ex5 search = 12(ต่อ) 12 17 23 24 Mid Last First
รอบที่ 2 Mid=(First+Last)/2 =(4+7)/2 =5 (เศษปัดทิ้ง) เปรียบเทียบค่าที่ต้องการค้นหากับค่าในตำแหน่ง Mid 12 < X[5] 12 <17  จะเลือกใช้ข้อมูลครึ่งแรก

20 [4] Ex5 search = 12(ต่อ) X 12 First Last Mid รอบที่ 3
Mid=(First+Last)/2 =(4+4)/2 =4 เปรียบเทียบค่าที่ต้องการค้นหากับค่าในตำแหน่ง Mid 12 = X[4] 12 =12  ตำแหน่งที่ค้นหาข้อมูลคือตำแหน่งที่ 4

21 Ex6 กำหนดให้ค่า search = 7
[0] [1] [2] [3] [4] [5] [6] [7] X 1 6 9 10 12 17 23 24 Last First รอบที่ 1

22 Ex6 search = 7 (ต่อ)

23 Ex6 search = 7 (ต่อ)

24 การเขียนโปรแกรม Binary Search

25 int binarysearch(int data[],int n,int key)
{ int first,last,mid; first=0; last=n-1; while(first<=last) mid =(last+first)/2; /*find the center */ if(key < data[mid]) /*move the range down */ last = mid-1; else if(key > data[mid]) /*move range up*/ first = mid+1; else return mid; } return -1; /* no data found */

26 Ex7 #include<stdio.h> #define N 10
int table[N]={1,2,3,5,6,7,10,22,23,31}; int binarysearch(int data[],int n,int key); void printlist(int data[],int n); void main(void) { int search,result; printf(“Data in TABLE\n:"); printlist(table,N); printf("Please enter a data to search : "); scanf("%d",&search); result = binarysearch(table,N,search); if(result>=0) printf("Data found at position %d\n",result); else printf("No such data in the table\n"); }

27 int binarysearch(int data[],int n,int key)
{ int first,last,mid; first=0; last=n-1; while(first<=last) mid =(last+first)/2; /*find the center */ if(key < data[mid]) /*move the range down */ last = mid-1; else if(key > data[mid]) /*move range up*/ first = mid+1; else return mid; } return -1; /* no data found */

28 void printlist(int data[],int n)
{ int pos; for(pos=0; pos<n; pos++) printf("%2d ",data[pos]); printf("\n"); }

29 Ex8 จงเขียนโปรแกรมเพื่อรับจำนวนนักศึกษา และกรอกคะแนนของนักศึกษาตามจำนวนที่รับ (แบบเรียงลำดับ) แล้วทำการค้นหาว่าคะแนนที่ต้องการอยู่ในลำดับที่เท่าไหร่โดยใช้ Binary Search Input Enter num of student : 6 Student 1: 15.6 Student 2: 16 Student 3: 18.75 Student 4: 19.32 Student 5: 21.56 Student 6: 28 Output Enter Search Score : 21.56 Student No. = 5 Enter Search Score : 15.6 Student No. = 1 Enter Search Score : 17.75 Student No. = Not Found

30 #include <stdio.h>
int input(float data[]) Solution Ex8

31 int binarysearch(float data[],int n,float key)
{

32 void output(int r) {

33 void main() {

34 Question?

35 Quiz จงเขียนโปรแกรมเพื่อรับข้อมูลน้ำหนักของนักศึกษาจำนวน 10 คน (ไม่ซ้ำ) แล้วนำน้ำหนักของนักศึกษา 10 คนนั้นมาเรียงลำดับ (ด้วยวิธีใดก็ได้) หลังจากนั้นทำการค้นหาน้ำหนักที่ต้องการโดยใช้ Binary Search แล้วแสดงตำแหน่งที่ได้จากการค้นหานั้นในส่วนของ main() กำหนดให้มีฟังก์ชันต่าง ๆ ดังนี้ - GetData() - SortData() - DisplayData() - BinarySearch()

36 Output Before Sorting : After Sorting : Enter Key Weight : 59.35 Position : 9 ************************ Bye Bye ************************** Input Weight 1: 35.5 Weight 2: 46 Weight 3: 58.75 Weight 4: 49.32 Weight 5: 61.56 Weight 6: 40.2 Weight 7: 48.75 Weight 8: 59.35 Weight 9: 57.56 Weight 10: 48


ดาวน์โหลด ppt ครั้งที่ 12 การค้นหาข้อมูล (Searching)

งานนำเสนอที่คล้ายกัน


Ads by Google