รายวิชา ง40 206 ...
DESCRIPTION
รายวิชา ง40 206 โครงสร้างข้อมูลและขั้นตอนวิธี. โรงเรียนมหิดลวิทยานุสรณ์. ความรู้เบื้องต้นของโครงสร้างข้อมูลและขั้นตอนวิธี. ความหมาย “โครงสร้างข้อมูล”. การรวมประเภทข้อมูล (Data Type) เข้าไว้ด้วยกัน จนกลายเป็นกลุ่มประเภทข้อมูล และมีนิยามความสัมพันธ์ภายในกลุ่มข้อมูลอย่างชัดเจน - PowerPoint PPT PresentationTRANSCRIPT
รายวิ�ชา ง40206 โครงสร�างข้�อมู�ลและข้��นตอนวิ�ธี�
โรงเร�ยนมหิดลวิทยาน�สรณ์�
ควิามูร��เบื้��องต�นข้องโครงสร�างข้�อมู�ลและข้��นตอนวิ�ธี�
“ควิามหิมาย โครงสร�าง”ข้�อม�ล
• การรวิมประเภทข้�อม�ล (Data Type) เข้�าไวิ�ด�วิยก�น จนกลายเป!นกล�"มประเภทข้�อม�ล และม�นยามควิามส�มพั�นธ์�ภายในกล�"มข้�อม�ลอย"างชั�ดเจน
• การรวิมกล�"มน�(อาจเป!นการรวิมกล�"มก�นระหิวิ"างข้�อม�ลประเภทเด�ยวิก�น ต่"างประเภทก�น หิร*อต่"างโครงสร�างข้�อม�ลก�นก+ได�
“ ”ควิามหิมาย อ�ลกอรธ์,ม• ล-าด�บข้�(นต่อนวิธ์�ในการท-างานข้องโปรแกรมเพั*/อ
แก�ป0ญหิาใดป0ญหิาหิน,/ง ซึ่,/งถ้�าปฏิบ�ต่ต่ามข้�(นต่อนอย"างถ้�กต่�องแล�วิ จะต่�องสามารถ้ชั"วิยแก�ป0ญหิาหิร*อประมวิลผลต่ามต่�องการได�ส-าเร+จ
ประเภทข้องโครงสร�างข้�อม�ล• ด�านกายภาพั
– Primitive Data Type เช�น char, int, float– Structure Data Type เช�น array, struct
• ด�านต่รรกกะ- Linear Data Structure - Non-linear Data Structure
A C K S5
3 8
-1 4 12
-1 3 4 5 8 12
วิ�ต่ถ้�ประสงค�ข้องการศึ,กษาโครงสร�างข้�อม�ลและข้�(นต่อนวิธ์�
โปรแกรมูทำ!างานได้�อย�างรวิด้เร$วิ
ใช�เน��อทำ�&หน�วิยควิามูจำ!าน�อยทำ�&ส)ด้
เทคนคท�/ชั"วิยในการออกแบบ
• ผ�งงาน (Flowchart)– ผ�งงานระบบ (System Flowchart)– ผ�งงานโปรแกรม (Program Flowchart)
• รหิ�สเท�ยม (Pseudocode)– ใชั�อธ์บายการท-างานข้องอ�ลกอรธ์,ม ท-าใหิ�ไม"ต่�องเข้�ยนอธ์บาย
ด�วิย code– ไม"ข้,(นก�บภาษาคอมพัวิเต่อร�ภาษาใดภาษาหิน,/ง– อาจเป!นภาษาไทยหิร*อภาษาอ*/นก+ได� แต่"การใชั�ภาษาอ�งกฤษจะ
สะดวิกท�/ส�ด
Pseudocode• เป!นค-าส�/งท�/ม�ล�กษณ์ะการเข้�ยนใกล�เค�ยงก�บภาษา
อ�งกฤษ แต่"ม�โครงสร�างเก*อบจะเป!นภาษาโปรแกรม เชั"น– เร/มต่�นอาจใหิ�ม�ค-าวิ"า BEGIN จบลงใหิ�ใชั� END– อ"าน เข้�ยนข้�อม�ลอาจใชั� READ และ PRINT – การทดสอบเง*/อนไข้อาจใชั� IF , ELSE , ELSEIF – การท-าซึ่-(าอาจใชั� WHILE , DO ENDWHILE เป!นต่�น
ต่�วิอย"าง Pseudocode
BEGIN
READ A, B
SUM = A+B
IF SUM > 10 THEN
PRINT SUM
ELSE
PRINT A-B
END
ต่�วิอย"าง PseudocodeAlgorithm arrayMax(A,n)Input: An array A storing n integers.Output: The maximum element in A.
currentMax < A[0]for I <- 1 to n-1 doif currentMax < A[i] then
currentMax <- A[i]return currentMax
ต่�วิอย"าง Pseudocode
การวิเคราะหิ�ประสทธ์ภาพัข้องอ�ลกอรธ์,ม
• Space/Memory :
ใชั�เน*(อท�/ควิามจ-ามากน�อยแค"ไหิน• Time
เวิลาท�/ใชั�ในการประมวิลผล
การวิ�เคราะห* Space Complexity การวิเคราะหิ�วิ"าจะต่�องใชั�หิน"วิยควิามจ-าท�(งหิมด
เท"าไรในการประมวิลผลอ�ลกอรธ์,มน�(น
•รองร�บื้จำ!านวินข้�อมู�ลทำ�&ส�งเข้�ามูาประมูวิลผล (Input Data)ได้�มูากทำ�&ส)ด้เทำ�าใด้ เพื่�&อให�อ�ลกอร�ธี-มูน��นสามูารถประมูวิลผลได้�อย��
•ทำราบื้ข้นาด้ข้องหน�วิยควิามูจำ!าทำ�&จำะต�องใช�ในการประมูวิลผลอ�ลกอร�ธี-มู เพื่�&อไมู�ให�กระทำบื้ก�บื้การทำ!างานข้องคนอ�&น
•เพื่�&อเล�อกค)ณล�กษณะข้องคอมูพื่�วิเตอร*ทำ�&จำะใช�ต�ด้ต��งโปรแกรมูทำ�&พื่�ฒนาข้-�นได้�อย�างเหมูาะสมู
องค*ประกอบื้ข้อง Space Complexity • Instruction Space
– จำ!านวินข้องหน�วิยควิามูจำ!าทำ�&คอมูไพื่เลอร*จำ!าเป2นต�องใช�ข้ณะทำ!าการคอมูไพื่ล*โปรแกรมู
• Data Space – จำ!านวินหน�วิยควิามูจำ!าทำ�&ต�องใช�ส!าหร�บื้เก$บื้ค�าคงทำ�& และ
ต�วิแปรทำ��งหมูด้ทำ�&ต�องใช�ในการประมูวิลผลโปรแกรมู
• Environment Stack Space – จำ!านวินหน�วิยควิามูจำ!าทำ�&ต�องใช�ในการเก$บื้ผลล�พื่ธี*ข้อง
ข้�อมู�ลเอาไวิ� เพื่�&อรอเวิลาทำ�&จำะน!าผลล�พื่ธี*น��นกล�บื้ไปประมูวิลผลอ�กคร��ง (พื่บื้ใน recursive function)
Data Space• Static memory allocationStatic memory allocation
จำ!านวินข้องหน�วิยควิามูจำ!าทำ�&ต�องใช�อย�างแน�นอน ไมู�มู�การเปล�&ยนแปลง ประกอบื้ด้�วิยหน�วิยควิามูจำ!าทำ�&ใช�เก$บื้ค�าคงทำ�&และต�วิแปรประเภทำ array – เช�น การประกาศต�วิแปร int a, b; char s[10], c;
• Dynamic memory allocationDynamic memory allocationจำ!านวินข้องหน�วิยควิามูจำ!าทำ�&ใช�ในการประมูวิลผลสามูารถเปล�&ยนแปลงได้� และจำะทำราบื้จำ!านวินหน�วิยควิามูจำ!าทำ�&จำะใช�ก$ต�อเมู�&อโปรแกรมูก!าล�งทำ!างานอย�� – เช�น การใช� pointer และมู�การจำองเน��อทำ�&ในหน�วิยควิามูจำ!าด้�วิยค!าส�&ง
malloc(); int *p; p = malloc(sizeof(int)*2);
ต�วิอย�างการวิ�เคราะห* Space Complexity {
int num1, num2, temp;
temp = num1;
num1 = num2;
num2 = temp;
} ใช�หน�วิยควิามูจำ!า 6 bytes
ต�วิอย�างการวิ�เคราะห* Space Complexity int factorial(int n)
{
if (n==0)
return 1;
else
return (n * factorial(n-1));
} ใช�หน�วิยควิามูจำ!า 4 Max{1, n}
ค�า 4 ค!านวิณมูาจำาก หน�วิยควิามูจำ!าส!าหร�บื้เก$บื้ address 2 bytes และต�วิแปรชน�ด้ integer อ�ก 2 bytes
factorial(4)
4 x factorial(3)
factorial(0) = 1
1
1x1=1
2x1=2
3x2=6
4x6=24
หาค�า 4! โด้ยใช� recursive
3 x factorial(2)factorial(3)
2 x factorial(1)factorial(2)
1 x factorial(0)factorial(1)
การวิ�เคราะห* Time Complexity ค�อ เวิลาทำ�&เคร�&องคอมูพื่�วิเตอร*ต�องใช�ในการประ
มูวิลผลอ�ลกอร�ธี-มู
วิ�เคราะห*เพื่�&อ... ประมูาณเวิลาทำ��งหมูด้ทำ�&ต�องใช�ในโปรแกรมูได้� มู)�งประเด้$นการแก�ไข้ไปทำ�&อ�ลกอร�ธี-มูทำ�&ใช�เวิลาในการประมูวิลผล
นานๆ ทำ!าให�ไมู�ต�องแก�ไข้ทำ��งโปรแกรมู โปรแกรมูคอมูพื่�วิเตอร*ทำ�&ทำ!างานแบื้บื้ Interactive เล�อกค)ณล�กษณะข้องคอมูพื่�วิเตอร*ทำ�&จำะใช�ต�ด้ต��งโปรแกรมูทำ�&
พื่�ฒนาข้-�นได้�อย�างเหมูาะสมู
??
เวิลาในการประมูวิลผลข้องโปรแกรมูCompile TimeCompile Time ค*อ เวิลาท�/ใชั�ในการต่รวิจสอบ
ไวิยากรณ์� (syntax) ข้อง code วิ"าเข้�ยนได�ถ้�กต่�องหิร*อไม"
Run Time Run Time หร�อ หร�อ Execution TimeExecution Time ค*อ เวิลาท�/เคร*/องคอมพัวิเต่อร�ใชั�ในการประมวิลผล
การวิ�เคราะห* Time Complexity ด้�วิยวิ�ธี�การน�บื้ต�วิด้!าเน�นการ
แบื้บื้ Linear Loops แบื้บื้ Logarithmic Loops แบื้บื้ Nested Loops
แบื้บื้ Linear Loopsอ�ลกอรธ์,มม�การท-างานแบบวินรอบ (Loop) โดย
แต่"ละ loop จะม�การเพั/มหิร*อลดค"าในปรมาณ์ท�/คงท�/ เชั"น 1x=
( < =2000) 5x=x+
= =1 ( < =2000) = ===1ถ้�าใหิ� f(n) แทนประสทธ์ภาพั และ n แทนจ-านวินรอบการ
ท-างาน สามารถ้เข้�ยนเป!นสมการวิ�ดประสทธ์ภาพัข้องอ�ลกอรธ์,มแบบ Linear loop ได�ด�งน�(f(n) = n
แบื้บื้ Logarithmic Loopsอ�ลกอรธ์,มจะท-างานแบบ Loop โดยการท-างาน
ภายในแต่"ละ loop จะเพั/มหิร*อลดค"าเป!นเท"าต่�วิ x = 1Loop (x < 1000)
x = x*2
x = 1000Loop (x >= 1)
x = x/2
ถ้�าใหิ� f(n) แทนประสทธ์ภาพั และ n แทนจ-านวินรอบการท-างาน สามารถ้เข้�ยนเป!นสมการวิ�ดประสทธ์ภาพัได�ด�งน�(
f(n) = [logn]
แบื้บื้ Nested Loops
ค�อ อ�ลกอร�ธี-มูทำ�&มู� loop ซ้�อนอย��ภายใน loop โด้ยประส�ทำธี�ภาพื่ข้องอ�ลกอร�ธี-มูก$จำะมู�ค�าเทำ�าก�บื้จำ!านวิน loop ทำ��งหมูด้ทำ�&จำะต�องประมูวิลผล ซ้-&งหาได้�จำากการเอาจำ!านวิน loop ทำ�&ซ้�อนก�นมูาค�ณก�น
f(n) = n2 f(n) = n3
Big-O Notation
• การวิเคราะหิ�อ�ลกอรธ์,ม จะใชั�วิธ์�หิาจ-านวินคร�(งข้องการท-างานข้องโปรแกรม โดยม�กจะสนใจค"าโดยประมาณ์เท"าน�(น ซึ่,/งจะใชั�ส�ญล�กษณ์�วิ"า O เร�ยกวิ"า บ9กโอ (big O) ซึ่,/งเป!นส�ญล�กษณ์�ทางคณ์ต่ศึาสต่ร�ท�/มาจากค-าวิ"า Order of Magnitude
•O(N), O(logN), O(N2), O(1)
Big-O Notation
• แนวิควิามคดข้องบ9กโอ จะด�จากค"าท�/ม�ผลกระทบมากท�/ส�ดเพั�ยงค"าเด�ยวิ
• ค"าอ*/นๆท�/เก�/ยวิข้�องจะม�ผลต่"อฟั0งก�ชั�นน�อยกวิ"า จ,งไม"สนใจ และไม"สนใจค"าคงท�/ด�วิย
ต่�วิอย"าง หิาค"าบ9กโอข้อง N4 + 10N – 5ถ้�า f(N) = N4 + 10N – 5
O(f(N)) = O(N4)
ต่�วิอย"าง หิาค"าบ9กโอข้อง 100N +1
ถ้�า f(N) = 100N +1
O(f(N)) = O(N)
ต่�วิอย"าง หิาค"าบ9กโอข้อง N/5 +100
ถ้�า f(N) = N/5 +100
O(f(N)) = O(N)
ต่�วิอย"าง หิาค"าบ9กโอข้อง N3 + 2N3 + 10
ถ้�า f(N) = N3 + 2N3 + 10
O(f(N)) = O(N3)
ต่�วิอย"าง หิาค"าบ9กโอข้อง 100
ถ้�า f(N) = 100
O(f(N)) = O(1)
การวิเคราะหิ�ควิามเร+วิข้อง Algorithm
log n n n log n n2 n3 2n
0 1 0 1 1 21 2 2 4 8 42 4 8 16 64 163 8 24 64 512 2564 16 64 256 4096 65,5365 32 160 1,024 32,768 4,294,967,296
เร$วิ ช�า
log n n n log n n2 n3 2n
0 1 0 1 1 21 2 2 4 8 42 4 8 16 64 163 8 24 64 512 2564 16 64 256 4096 65,5365 32 160 1,024 32,768 4,294,967,296
1
10
100
1000
10000
100000
n
n2
n log n
n
log n
n32n
Running time calculationsA simple Example
int sum(int n)
{ int i, partialSum;
partialSum = 0; //1
for(i=1;i<N;i++) //2
partialSum += i*i*i; //3
return partialSum;
}
-> Count for 1 unit per time executed
-> Count for 2N+1 units
-> 4N units
The total is 6N+2
This function is O(N)
Running time calculationsA simple Example
int factorial(int n)
{ int fac
if((n==0)||(n=1))
fac = 1;
else
fac = n*factorial(n-1);
}
-> Running time = 1
-> เร�ยกต่�วิเอง N คร�(ง
This function is O(N)