รายว ชา ง40206 โครงสร างข อม ลและขนตอนวธ
โรงเรยนมหดลวทยานสรณ
ความร เบ องต นของโครงสร างข อมลและขนตอนวธ
“ความหมาย โครงสราง”ขอมล
• การรวมประเภทขอมล (Data Type) เขาไวดวยกน จนกลาย
เปนกลมประเภทขอมล และมนยามความสมพนธภายในกลมขอมล
อยางชดเจน•การรวมกลมนอาจเปนการรวมกลม
กนระหวางขอมลประเภทเดยวกน ตางประเภทกน หรอตางโครงสราง
ขอมลกนกได
“ ”ความหมาย อลกอรธม
• ลำาดบขนตอนวธในการทำางานของโปรแกรมเพอแกปญหาใดปญหา
หนง ซงถาปฏบตตามขนตอนอยาง ถกตองแลว จะตองสามารถชวยแก
ปญหาหรอประมวลผลตามตองการไดสำาเรจ
ประเภทของโครงสรางขอมล• ดานกายภาพ
– 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 do
if currentMax < A[i] then
currentMax <- A[i]
return currentMax
ตวอยาง Pseudocode
การวเคราะหประสทธภาพของอลกอรธม
• Space/Memory :
ใชเนอทความจำามากนอยแคไหน• Time
เวลาทใชในการประมวลผล
การว เคราะห Space Complexity การวเคราะหวาจะตองใชหนวยความจำา
ทงหมดเทาไรในการประมวลผลอลกอรธมนน • รองร บจ ำานวนขอม ลท ส งเข ามาประมวลผล (Input Data) ได มากทส ดเท าใด เพ อให อ ลกอร ธมน นสามารถประมวลผลไดอย
•ทราบขนาดของหนวยความจำาท จะต องใชในการ ประมวลผลอลกอร ธ ม เพ อไม ให กระทบกบการ
ทำางานของคนอน
•เพ อเล อกค ณลกษณะของคอมพวเตอร ท จะใชต ดต งโปรแกรมทพ ฒนาขนได อย างเหมาะสม
องคประกอบของ Space Complexity • Instruction Space
– จำานวนของหนวยความจำาทคอมไพเลอร จ ำาเป นต องใชขณะทำาการคอมไพลโปรแกรม
• 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 จะมการเพมหรอลดคาในปรมาณทคงทเชน x = 1
Loop (x <= 2000) x = x+5
x = 1Loop (x <= 2000) x = x+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 เรยกวา บกโอ (big O) ซงเปนสญลกษณทางคณตศาสตร
ทมาจากคำาวา Order of Magnitude
•O(N), O(logN), O(N2), O(1)
Big-O Notation
• แนวความคดของบกโอ จะดจากคาทมผลกระทบมากทสดเพยงคาเดยว
• คาอนๆทเกยวของจะมผลตอฟงกชนนอยกวา จง ไมสนใจ และไมสนใจคาคงทดวย
ตวอยาง หาคาบกโอของ N4 + 10N – 5
ถา f(N) = N4 + 10N – 5
O(f(N)) = O(N4)
ตวอยาง หาคาบกโอของ 100N +1
ถา f(N) = 100N +1
O(f(N)) = O(N)
ตวอยาง หาคาบกโอของ N/5 +100
ถา f(N) = N/5 +100
O(f(N)) = O(N)
ตวอยาง หาคาบกโอของ N3 + 2N3 + 10
ถา f(N) = N3 + 2N3 + 10
O(f(N)) = O(N3)
ตวอยาง หาคาบกโอของ 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)