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

Slides:



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

ครั้งที่ 9 Function(ต่อ).
รายวิชา ง40102 หลักการแก้ปัญหาและการโปรแกรม
SEARCHING. SEARCH 1. นำดรรชนีที่กำหนดไว้ในคำสั่ง OCCURS มาเปรียบเทียบกับจำนวนของข้อมูลในตาราง ถ้า ดรรชนีมีค่ามากกว่า จะทำให้มีการไปทำงานที่คำสั่ง ที่อยู่ในส่วนของ.
โดยอาจารย์ศิริพร ศักดิ์บุญญารัตน์ ครูชำนาญการ โรงเรียนมหิดลวิทยานุสรณ์
ประเภทของข้อมูลและตัวดำเนินการ Data Types and Operator (บทที่ 3)
คำสั่ง while และ คำสั่ง do..while
การเรียงลำดับข้อมูล(Sorting)
INDEXED FILES แฟ้มดรรชนี.
Hashing Function มีหลายฟังก์ชั่น การเลือกใช้ขึ้นอยู่กับความเหมาะสมของข้อมูล ตัวอย่างของฟังก์ชั่นแฮชมีดังนี้ 1. Mod คือการนำค่าคีย์มา mod ด้วยค่า n ใด.
Lecture no. 5 Control Statements
การเรียงลำดับและการค้นหาแบบง่าย
จำนวนเต็ม จำนวนเต็ม  ประกอบด้วย                   1. จำนวนเต็มบวก    ได้แก่  1 , 2 , 3 , 4, 5 , ....                   2.  จำนวนเต็มลบ      ได้แก่  -1.
บทนำ.
LAB # 4.
สาขาวิชาคอมพิวเตอร์และเทคโนโลยี อ.เลาขวัญ งามประสิทธิ์
ทบทวน Array.
Week 6 ประกาศค่าตัวแปร.
Week 15 C Programming.
Lab 3: คำสั่งพื้นฐานสำหรับการรับและการแสดงผลข้อมูล
คำสั่งควบคุมการทำงาน
ตัวแปรชุด.
การสร้างตาราง Click mouse ที่ปุ่ม จะปรากฏช่องสี่เหลี่ยมแสดง
Arrays.
สาขาวิชาคอมพิวเตอร์และเทคโนโลยี อ.เลาขวัญ งามประสิทธิ์
Arrays.
บทที่ 6 ตัวแปรอาร์เรย์ (Array of Variable)
ขั้นตอนวิธี (Algorithm)
โปรแกรม Microsoft Access
Searching.
สตริง (String).
Flow Control.
ตัวแปรกับชนิดของข้อมูล
โครงสร้างข้อมูลแบบคิว
การใช้ฟังก์ชั่นทาง EXCEL
การสร้างฟังก์ชั่นเพื่อพัฒนาโปรแกรม Interactive C
เทคนิคการเรียงลำดับ Sorting Techniques
เทคนิคการค้นหาข้อมูล
บทที่ 5 เทคนิคการค้นหาข้อมูล (Searching Techniques)
List ADTs By Pantharee S..
Week 12 Engineering Problem 2
Week 12 Engineering Problem 2
การจัดวางคอมโพเนนต์กราฟิก
Linked List List is group of nodes that consists of data and link.
คำสั่งควบคุมขั้นตอน Flow control statements
โปรแกรม Microsoft Access
บทที่ 3 การทำงานกับฟอร์ม (Form)
การเขียนโปรแกรม PHP เชื่อมต่อกับ MySQL
วิชา COSC2202 โครงสร้างข้อมูล (Data Structure)
หลักการเขียนโปรแกรม ( )
การใช้งาน ฐานข้อมูล การเขียนเว็บเพจด้วยภาษา php ศูนย์คอมพิวเตอร์ โรงเรียนปลวกแดงพิทยาคม.
อาร์เรย์ (Arrays).
โครงสร้างข้อมูลแบบรายการโยง (Link List)
การเรียงข้อมูล 1. Bubble Sort 2. Insertion Sort 3. Heap Sort
ต้นไม้ Tree (2) ผู้สอน อาจารย์ ยืนยง กันทะเนตร
ค้นเจอหนังสือที่ต้องการ ใน library catalog
CONDITION Computer Programming Asst. Prof. Dr. Choopan Rattanapoka.
ปัญหา : มีนักโทษ 13 คน มีเครื่องหมายประจำตัวตั้งแต่ A-M ถูกตัดสินประหารชีวิต แต่พอถึงเวลาประหาร มี 1 คนที่ได้รับการอภัยโทษเป็นกรณีพิเศษ โดยใช้วิธีขานเลข.
การจัดเรียงข้อมูล (sorting)
stack #1 ผู้สอน อาจารย์ ยืนยง กันทะเนตร
ต้นไม้ Tree [3] ผู้สอน อาจารย์ ยืนยง กันทะเนตร
Int isEmpty ( node **ptr_head) ; parameter ชื่อของตัวแปรลิสต์ที่จะตรวจสอบว่า ว่างหรือไม่ return value มีได้ 2 สถานะ คือ ว่าง (1) หรือ ไม่ ว่าง (0) body.
Week 13 Basic Algorithm 2 (Searching)
บทที่ 6 ตัวแปรชุดและ สตริง รายวิชา ง การเขียนโปรแกรมเชิง วัตถุ Reading: ใบความรู้ บทที่ 6.
ค32213 คณิตศาสตร์สำหรับคอมพิวเตอร์ โรงเรียนปลวกแดงพิทยาคม
การประยุกต์ใช้ Stack การประยุกต์ใช้ Stack
Lecturers : Boontee Kruatrachue. Room no. 913 Kritawan Siriboon
Lecturers : Boontee Kruatrachue. Room no. 913 Kritawan Siriboon
Lecturers : Boontee Kruatrachue. Room no. 913 Kritawan Siriboon
บทที่ 10 การค้นหาข้อมูล (Searching)
ใบสำเนางานนำเสนอ:

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

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

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

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

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 แสดงว่ายังไม่เจอข้อมูล ต้องเขยิบไปในช่องถัดไป

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

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

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 */ }

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

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");

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

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

void main() {

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

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

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  จะเลือกใช้ข้อมูลครึ่งหลัง

[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  จะเลือกใช้ข้อมูลครึ่งแรก

[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

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

Ex6 search = 7 (ต่อ)

Ex6 search = 7 (ต่อ)

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

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 */

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"); }

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 */

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

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

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

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

void output(int r) {

void main() {

Question?

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

Output Before Sorting : 35.5 46 58.75 49.32 61.56 40.2 48.75 59.35 57.56 48 After Sorting : 35.5 40.2 46 48 48.75 49.32 57.56 58.75 59.35 61.56 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