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

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

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

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


งานนำเสนอเรื่อง: "1 ครั้งที่ 12 การ ค้นหาข้อมูล (Searching). 2 เรื่องที่จะเรียนวันนี้  Sequential Search  Binary Search การค้นหาข้อมูลจะทำได้เมื่อข้อมูลมีการเรียงลำดับแล้ว!!!"— ใบสำเนางานนำเสนอ:

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

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

3 3

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

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

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

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

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

9 9 Sequential search int seqsearch(int data[],int n,int key) { int pos; if(key<=data[n-1]) for(pos = 0; pos

10 10 #include #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 11 int seqsearch(int data[],int n,int key) { int pos; if(key<=data[n-1]) for(pos=0; pos

12 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 13 Solution Ex4 #include int input(int data[]) { int seqsearch(int data[],int n,int key) {

14 14 void main() {

15 15

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

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

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

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

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

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

22 22 Ex6 search = 7 ( ต่อ )

23 23 Ex6 search = 7 ( ต่อ )

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

25 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 26 #include #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"); } Ex7

27 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 28 void printlist(int data[],int n) { int pos; for(pos=0; pos

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

30 30 Solution Ex8 #include int input(float data[])

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

32 32 void output(int r) {

33 33 void main() {

34 34 Question?

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

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


ดาวน์โหลด ppt 1 ครั้งที่ 12 การ ค้นหาข้อมูล (Searching). 2 เรื่องที่จะเรียนวันนี้  Sequential Search  Binary Search การค้นหาข้อมูลจะทำได้เมื่อข้อมูลมีการเรียงลำดับแล้ว!!!

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


Ads by Google