Transcript ความรู้เบื้องต้นของโครงสร้างข้อมูลและขั้นตอนวิธี
Slide 1
รายวิชา ง40206 โครงสรางข
้
้อมูล
และขัน
้ ตอนวิธ ี
โรงเรี ยนมหิ ดลวิทยานุสรณ์
Slide 2
ความรูเ้ บือ้ งต้นของโครงสร้างข้อมูลและขัน้ ตอนวิธี
Slide 3
ความหมาย “โครงสร้างข้อมูล”
• การรวมประเภทข้อมูล (Data Type) เข้าไว้ดว้ ยกัน จน
กลายเป็ นกลุ่มประเภทข้อมูล และมีนิยามความสัมพันธ์
ภายในกลุ่มข้อมูลอย่างชัดเจน
• การรวมกลุ่มนี้อาจเป็ นการรวมกลุ่มกันระหว่างข้อมูล
ประเภทเดียวกัน ต่างประเภทกัน หรื อต่างโครงสร้าง
ข้อมูลกันก็ได้
Slide 4
ความหมาย “อัลกอริ ธึม”
• ลาดับขั้นตอนวิธีในการทางานของโปรแกรมเพื่อ
แก้ปัญหาใดปั ญหาหนึ่ง ซึ่ งถ้าปฏิบตั ิตามขั้นตอนอย่าง
ถูกต้องแล้ว จะต้องสามารถช่วยแก้ปัญหาหรื อ
ประมวลผลตามต้องการได้สาเร็ จ
Slide 5
ประเภทของโครงสร้างข้อมูล
• ด้านกายภาพ
– Primitive Data Type เช่ น char, int, float
– Structure Data Type เช่ น array, struct
• ด้านตรรกกะ
- Linear Data Structure
A
C
K
- Non-linear Data Structure
5
S
3
-1
3
4
5
8
8
12
-1
4
12
Slide 6
Slide 7
วัตถุประสงค์ของการศึกษาโครงสร้างข้อมูลและขั้นตอนวิธี
โปรแกรมทางานได้อย่างรวดเร็ว
ใช้เนื้ อที่หน่ วยความจาน้ อยที่สด
ุ
Slide 8
เทคนิคที่ช่วยในการออกแบบ
• ผังงาน (Flowchart)
– ผังงานระบบ (System Flowchart)
– ผังงานโปรแกรม (Program Flowchart)
• รหัสเทียม (Pseudocode)
– ใช้อธิบายการทางานของอัลกอริ ธึม ทาให้ไม่ตอ้ งเขียนอธิบายด้วย code
– ไม่ข้ ึนกับภาษาคอมพิวเตอร์ภาษาใดภาษาหนึ่ง
– อาจเป็ นภาษาไทยหรื อภาษาอื่นก็ได้ แต่การใช้ภาษาอังกฤษจะสะดวกที่สุด
Slide 9
Pseudocode
• เป็ นคาสั่งที่มีลกั ษณะการเขียนใกล้เคียงกับภาษาอังกฤษ แต่มีโครงสร้าง
เกือบจะเป็ นภาษาโปรแกรม เช่น
–
–
–
–
เริ่ มต้นอาจให้มีคาว่า BEGIN จบลงให้ใช้ END
อ่าน เขียนข้อมูลอาจใช้ READ และ PRINT
การทดสอบเงื่อนไขอาจใช้ IF , ELSE , ELSEIF
การทาซ้ าอาจใช้ WHILE , DO ENDWHILE เป็ นต้น
Slide 10
ตัวอย่าง Pseudocode
BEGIN
READ A, B
SUM = A+B
IF SUM > 10 THEN
PRINT SUM
ELSE
PRINT A-B
END
Slide 11
ตัวอย่าง Pseudocode
Algorithm 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
Slide 12
ตัวอย่าง Pseudocode
Slide 13
การวิเคราะห์ประสิ ทธิภาพของอัลกอริ ธึม
• Space/Memory :
ใช้เนื้อที่ความจามากน้อยแค่ไหน
• Time
เวลาที่ใช้ในการประมวลผล
Slide 14
การวิเคราะห์ Space Complexity
การวิเคราะห์วา่ จะต้องใช้หน่วยความจาทั้งหมดเท่าไรในการ
ประมวลผลอัลกอริ ธึมนั้น
•รองรับจานวนข้อมูลที่ส่งเข้ามาประมวลผล (Input Data)ได้มากที่สดุ เท่าใด
เพื่อให้อลั กอริธึมนัน้ สามารถประมวลผลได้อยู่
•ทราบขนาดของหน่ วยความจาที่จะต้องใช้ในการประมวลผลอัลกอริธึม เพื่อ
ไม่ให้กระทบกับการทางานของคนอื่น
•เพื่อเลือกคุณลักษณะของคอมพิวเตอร์ที่จะใช้ติดตัง้ โปรแกรมที่พฒ
ั นาขึน้ ได้
อย่างเหมาะสม
Slide 15
องค์ ประกอบของ Space Complexity
• Instruction Space
– จานวนของหน่ วยความจาที่คอมไพเลอร์จาเป็ นต้องใช้ขณะทาการ
คอมไพล์โปรแกรม
• Data Space
– จานวนหน่ วยความจาที่ต้องใช้สาหรับเก็บค่าคงที่ และตัวแปรทัง้ หมดที่
ต้องใช้ในการประมวลผลโปรแกรม
• Environment Stack Space
– จานวนหน่ วยความจาที่ต้องใช้ในการเก็บผลลัพธ์ของข้อมูลเอาไว้ เพื่อ
รอเวลาที่จะนาผลลัพธ์นัน้ กลับไปประมวลผลอีกครัง้ (พบใน recursive
function)
Slide 16
Data Space
• Static memory allocation
จานวนของหน่ วยความจาที่ต้องใช้อย่างแน่ นอน ไม่มีการเปลี่ยนแปลง
ประกอบด้วยหน่ วยความจาที่ใช้เก็บค่าคงที่และตัวแปรประเภท array
– เช่น การประกาศตัวแปร int a, b;
char s[10], c;
• Dynamic memory allocation
จานวนของหน่ วยความจาที่ใช้ในการประมวลผลสามารถเปลี่ยนแปลงได้ และจะ
ทราบจานวนหน่ วยความจาที่จะใช้กต็ ่อเมื่อโปรแกรมกาลังทางานอยู่
– เช่น การใช้ pointer และมีการจองเนื้ อที่ในหน่ วยความจาด้วยคาสัง่ malloc();
int *p;
p = malloc(sizeof(int)*2);
Slide 17
ตัวอย่ างการวิเคราะห์ Space Complexity
{
int num1, num2, temp;
temp = num1;
num1 = num2;
num2 = temp;
}
ใช้ หน่ วยความจา 6 bytes
Slide 18
ตัวอย่ างการวิเคราะห์ 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
Slide 19
หาค่ า 4! โดยใช้ recursive
factorial(4)
4x6=24
4 x factorial(3)
3x2=6
3 x factorial(2)
2x1=2
2 x factorial(1)
1x1=1
1 x factorial(0)
1
factorial(0) = 1
Slide 20
การวิเคราะห์ Time Complexity
คือ เวลาทีเ่ ครื่องคอมพิวเตอร์ ต้องใช้ ในการประมวลผลอัลกอริธึม
ประมาณเวลาทั้งหมดที่ต้องใช้ ในโปรแกรมได้
มุ่งประเด็นการแก้ ไขไปทีอ่ ลั กอริธึมทีใ่ ช้ เวลาในการประมวลผลนานๆ ทาให้ ไม่ ต้องแก้ ไข
ทั้งโปรแกรม
โปรแกรมคอมพิวเตอร์ ทที่ างานแบบ Interactive
เลือกคุณลักษณะของคอมพิวเตอร์ ทจี่ ะใช้ ติดตั้งโปรแกรมทีพ่ ฒ
ั นาขึน้ ได้ อย่ างเหมาะสม
Slide 21
หลักในการพิจารณาอย่ างคร่ าวๆ
ถึงเวลาที่ต้องใช้ ในการประมวลผล
ตัวอย่างเช่น
โปรแกรมจะประมวลผลได้เร็ วกว่า เมื่ออยูบ่ นเครื่ องคอมพิวเตอร์ ที่มี
ความเร็ วในการประมวลผลสู งกว่า
ถ้าใช้คอมไพเลอร์ ตวั เดียวกัน code ที่ส้ นั กว่า ย่อมใช้เวลาในการประมวลผล
ได้นอ้ ยกว่า
Slide 22
เวลาในการประมวลผลของโปรแกรม
Compile Time คือ เวลาที่ใช้ในการตรวจสอบไวยากรณ์ (syntax) ของ
code ว่าเขียนได้ถกู ต้องหรื อไม่
Run Time หรือ Execution Time คือ เวลาที่เครื่ องคอมพิวเตอร์ใช้ใน
การประมวลผล
Slide 23
การวิเคราะห์ Time Complexity ด้ วยวิธีการนับตัวดาเนินการ
แบบ Linear Loops
แบบ Logarithmic Loops
แบบ Nested Loops
Slide 24
แบบ Linear Loops
อัลกอริ ธึมมีการทางานแบบวนรอบ (Loop) โดยแต่ละ loop จะมีการเพิ่ม
หรื อลดค่าในปริ มาณที่คงที่ เช่น
x=1
Loop (x <= 2000)
x = x+5
x=1
Loop (x <= 2000)
x = x+1
ถ้าให้ f(n) แทนประสิ ทธิภาพ และ n แทนจานวนรอบการทางาน สามารถเขียนเป็ น
สมการวัดประสิ ทธิภาพของอัลกอริ ธึมแบบ Linear loop ได้ดงั นี้
f(n) = n
Slide 25
แบบ Logarithmic Loops
อัลกอริ ธึมจะทางานแบบ Loop โดยการทางานภายในแต่ละ loop จะ
เพิ่มหรื อลดค่าเป็ นเท่าตัว
x=1
Loop (x < 1000)
x = x*2
x = 1000
Loop (x >= 1)
x = x/2
ถ้าให้ f(n) แทนประสิ ทธิภาพ และ n แทนจานวนรอบการทางาน สามารถเขียนเป็ น
สมการวัดประสิ ทธิ ภาพได้ดงั นี้
f(n) = [logn]
Slide 26
แบบ Nested Loops
คือ อัลกอริธึมที่มี loop ซ้ อนอยู่ภายใน loop โดยประสิ ทธิภาพของ
อัลกอริธึมก็จะมีค่าเท่ ากับจานวน loop ทั้งหมดทีจ่ ะต้ องประมวลผล ซึ่ งหาได้ จากการ
เอาจานวน loop ทีซ่ ้ อนกันมาคูณกัน
f(n) = n2
f(n) = n3
Slide 27
Big-O Notation
• การวิเคราะห์อลั กอริ ธึม จะใช้วธิ ี หาจานวนครั้งของการทางานของโปรแกรม
โดยมักจะสนใจค่าโดยประมาณเท่านั้น ซึ่ งจะใช้สัญลักษณ์วา่ O เรี ยกว่า บิ๊ก
โอ (big O) ซึ่ งเป็ นสัญลักษณ์ทางคณิ ตศาสตร์ ที่มาจากคาว่า Order of
Magnitude
• O(N), O(logN), O(N2), O(1)
Slide 28
Big-O Notation
• แนวความคิดของบิ๊กโอ จะดูจากค่าที่มีผลกระทบมากที่สุดเพียงค่าเดียว
• ค่าอื่นๆที่เกี่ยวข้องจะมีผลต่อฟังก์ชนั น้อยกว่า จึงไม่สนใจ และไม่สนใจ
ค่าคงที่ดว้ ย
ตัวอย่าง หาค่าบิ๊กโอของ N4 + 10N – 5
ถ้า
f(N) =
N4 + 10N – 5
O(f(N)) =
O(N4)
Slide 29
ตัวอย่าง หาค่าบิ๊กโอของ 100N +1
ถ้า
f(N)
=
O(f(N))
=
100N +1
O(N)
ตัวอย่าง หาค่าบิ๊กโอของ N/5 +100
ถ้า
f(N)
=
O(f(N))
=
N/5 +100
O(N)
Slide 30
ตัวอย่าง หาค่าบิ๊กโอของ N3 + 2N3 + 10
ถ้า
f(N)
=
N3 + 2N3 + 10
O(f(N))
=
O(N3)
ตัวอย่าง หาค่าบิ๊กโอของ 100
ถ้า
f(N)
O(f(N))
=
=
100
O(1)
Slide 31
การวิเคราะห์ความเร็ วของ Algorithm
เร็ว
lo g n
0
1
2
3
4
5
ช้า
n
1
2
4
8
16
32
n log n
0
2
8
24
64
1 60
2
n
1
4
16
64
2 56
1 ,0 24
3
n
1
8
64
5 12
4 096
3 2,768
n
2
2
4
16
2 56
6 5,536
4 ,2 94 ,96 7,296
Slide 32
lo g n
0
1
2
3
4
5
n
1
2
4
8
16
32
n log n
0
2
8
24
64
1 60
2
n
1
4
16
64
2 56
1 ,0 24
3
n
1
8
64
5 12
4 096
3 2,768
n
2
2
4
16
2 56
6 5,536
4 ,2 94 ,96 7,296
2n
100000
n3
n2
n log n
10000
n
1000
100
log n
10
1
n
Slide 33
Running time calculations
A simple Example
int sum(int n)
{ int i, partialSum;
partialSum = 0;
//1
for(i=1;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)
Slide 34
Running time calculations
A 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)
รายวิชา ง40206 โครงสรางข
้
้อมูล
และขัน
้ ตอนวิธ ี
โรงเรี ยนมหิ ดลวิทยานุสรณ์
Slide 2
ความรูเ้ บือ้ งต้นของโครงสร้างข้อมูลและขัน้ ตอนวิธี
Slide 3
ความหมาย “โครงสร้างข้อมูล”
• การรวมประเภทข้อมูล (Data Type) เข้าไว้ดว้ ยกัน จน
กลายเป็ นกลุ่มประเภทข้อมูล และมีนิยามความสัมพันธ์
ภายในกลุ่มข้อมูลอย่างชัดเจน
• การรวมกลุ่มนี้อาจเป็ นการรวมกลุ่มกันระหว่างข้อมูล
ประเภทเดียวกัน ต่างประเภทกัน หรื อต่างโครงสร้าง
ข้อมูลกันก็ได้
Slide 4
ความหมาย “อัลกอริ ธึม”
• ลาดับขั้นตอนวิธีในการทางานของโปรแกรมเพื่อ
แก้ปัญหาใดปั ญหาหนึ่ง ซึ่ งถ้าปฏิบตั ิตามขั้นตอนอย่าง
ถูกต้องแล้ว จะต้องสามารถช่วยแก้ปัญหาหรื อ
ประมวลผลตามต้องการได้สาเร็ จ
Slide 5
ประเภทของโครงสร้างข้อมูล
• ด้านกายภาพ
– Primitive Data Type เช่ น char, int, float
– Structure Data Type เช่ น array, struct
• ด้านตรรกกะ
- Linear Data Structure
A
C
K
- Non-linear Data Structure
5
S
3
-1
3
4
5
8
8
12
-1
4
12
Slide 6
Slide 7
วัตถุประสงค์ของการศึกษาโครงสร้างข้อมูลและขั้นตอนวิธี
โปรแกรมทางานได้อย่างรวดเร็ว
ใช้เนื้ อที่หน่ วยความจาน้ อยที่สด
ุ
Slide 8
เทคนิคที่ช่วยในการออกแบบ
• ผังงาน (Flowchart)
– ผังงานระบบ (System Flowchart)
– ผังงานโปรแกรม (Program Flowchart)
• รหัสเทียม (Pseudocode)
– ใช้อธิบายการทางานของอัลกอริ ธึม ทาให้ไม่ตอ้ งเขียนอธิบายด้วย code
– ไม่ข้ ึนกับภาษาคอมพิวเตอร์ภาษาใดภาษาหนึ่ง
– อาจเป็ นภาษาไทยหรื อภาษาอื่นก็ได้ แต่การใช้ภาษาอังกฤษจะสะดวกที่สุด
Slide 9
Pseudocode
• เป็ นคาสั่งที่มีลกั ษณะการเขียนใกล้เคียงกับภาษาอังกฤษ แต่มีโครงสร้าง
เกือบจะเป็ นภาษาโปรแกรม เช่น
–
–
–
–
เริ่ มต้นอาจให้มีคาว่า BEGIN จบลงให้ใช้ END
อ่าน เขียนข้อมูลอาจใช้ READ และ PRINT
การทดสอบเงื่อนไขอาจใช้ IF , ELSE , ELSEIF
การทาซ้ าอาจใช้ WHILE , DO ENDWHILE เป็ นต้น
Slide 10
ตัวอย่าง Pseudocode
BEGIN
READ A, B
SUM = A+B
IF SUM > 10 THEN
PRINT SUM
ELSE
PRINT A-B
END
Slide 11
ตัวอย่าง Pseudocode
Algorithm 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
Slide 12
ตัวอย่าง Pseudocode
Slide 13
การวิเคราะห์ประสิ ทธิภาพของอัลกอริ ธึม
• Space/Memory :
ใช้เนื้อที่ความจามากน้อยแค่ไหน
• Time
เวลาที่ใช้ในการประมวลผล
Slide 14
การวิเคราะห์ Space Complexity
การวิเคราะห์วา่ จะต้องใช้หน่วยความจาทั้งหมดเท่าไรในการ
ประมวลผลอัลกอริ ธึมนั้น
•รองรับจานวนข้อมูลที่ส่งเข้ามาประมวลผล (Input Data)ได้มากที่สดุ เท่าใด
เพื่อให้อลั กอริธึมนัน้ สามารถประมวลผลได้อยู่
•ทราบขนาดของหน่ วยความจาที่จะต้องใช้ในการประมวลผลอัลกอริธึม เพื่อ
ไม่ให้กระทบกับการทางานของคนอื่น
•เพื่อเลือกคุณลักษณะของคอมพิวเตอร์ที่จะใช้ติดตัง้ โปรแกรมที่พฒ
ั นาขึน้ ได้
อย่างเหมาะสม
Slide 15
องค์ ประกอบของ Space Complexity
• Instruction Space
– จานวนของหน่ วยความจาที่คอมไพเลอร์จาเป็ นต้องใช้ขณะทาการ
คอมไพล์โปรแกรม
• Data Space
– จานวนหน่ วยความจาที่ต้องใช้สาหรับเก็บค่าคงที่ และตัวแปรทัง้ หมดที่
ต้องใช้ในการประมวลผลโปรแกรม
• Environment Stack Space
– จานวนหน่ วยความจาที่ต้องใช้ในการเก็บผลลัพธ์ของข้อมูลเอาไว้ เพื่อ
รอเวลาที่จะนาผลลัพธ์นัน้ กลับไปประมวลผลอีกครัง้ (พบใน recursive
function)
Slide 16
Data Space
• Static memory allocation
จานวนของหน่ วยความจาที่ต้องใช้อย่างแน่ นอน ไม่มีการเปลี่ยนแปลง
ประกอบด้วยหน่ วยความจาที่ใช้เก็บค่าคงที่และตัวแปรประเภท array
– เช่น การประกาศตัวแปร int a, b;
char s[10], c;
• Dynamic memory allocation
จานวนของหน่ วยความจาที่ใช้ในการประมวลผลสามารถเปลี่ยนแปลงได้ และจะ
ทราบจานวนหน่ วยความจาที่จะใช้กต็ ่อเมื่อโปรแกรมกาลังทางานอยู่
– เช่น การใช้ pointer และมีการจองเนื้ อที่ในหน่ วยความจาด้วยคาสัง่ malloc();
int *p;
p = malloc(sizeof(int)*2);
Slide 17
ตัวอย่ างการวิเคราะห์ Space Complexity
{
int num1, num2, temp;
temp = num1;
num1 = num2;
num2 = temp;
}
ใช้ หน่ วยความจา 6 bytes
Slide 18
ตัวอย่ างการวิเคราะห์ 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
Slide 19
หาค่ า 4! โดยใช้ recursive
factorial(4)
4x6=24
4 x factorial(3)
3x2=6
3 x factorial(2)
2x1=2
2 x factorial(1)
1x1=1
1 x factorial(0)
1
factorial(0) = 1
Slide 20
การวิเคราะห์ Time Complexity
คือ เวลาทีเ่ ครื่องคอมพิวเตอร์ ต้องใช้ ในการประมวลผลอัลกอริธึม
ประมาณเวลาทั้งหมดที่ต้องใช้ ในโปรแกรมได้
มุ่งประเด็นการแก้ ไขไปทีอ่ ลั กอริธึมทีใ่ ช้ เวลาในการประมวลผลนานๆ ทาให้ ไม่ ต้องแก้ ไข
ทั้งโปรแกรม
โปรแกรมคอมพิวเตอร์ ทที่ างานแบบ Interactive
เลือกคุณลักษณะของคอมพิวเตอร์ ทจี่ ะใช้ ติดตั้งโปรแกรมทีพ่ ฒ
ั นาขึน้ ได้ อย่ างเหมาะสม
Slide 21
หลักในการพิจารณาอย่ างคร่ าวๆ
ถึงเวลาที่ต้องใช้ ในการประมวลผล
ตัวอย่างเช่น
โปรแกรมจะประมวลผลได้เร็ วกว่า เมื่ออยูบ่ นเครื่ องคอมพิวเตอร์ ที่มี
ความเร็ วในการประมวลผลสู งกว่า
ถ้าใช้คอมไพเลอร์ ตวั เดียวกัน code ที่ส้ นั กว่า ย่อมใช้เวลาในการประมวลผล
ได้นอ้ ยกว่า
Slide 22
เวลาในการประมวลผลของโปรแกรม
Compile Time คือ เวลาที่ใช้ในการตรวจสอบไวยากรณ์ (syntax) ของ
code ว่าเขียนได้ถกู ต้องหรื อไม่
Run Time หรือ Execution Time คือ เวลาที่เครื่ องคอมพิวเตอร์ใช้ใน
การประมวลผล
Slide 23
การวิเคราะห์ Time Complexity ด้ วยวิธีการนับตัวดาเนินการ
แบบ Linear Loops
แบบ Logarithmic Loops
แบบ Nested Loops
Slide 24
แบบ Linear Loops
อัลกอริ ธึมมีการทางานแบบวนรอบ (Loop) โดยแต่ละ loop จะมีการเพิ่ม
หรื อลดค่าในปริ มาณที่คงที่ เช่น
x=1
Loop (x <= 2000)
x = x+5
x=1
Loop (x <= 2000)
x = x+1
ถ้าให้ f(n) แทนประสิ ทธิภาพ และ n แทนจานวนรอบการทางาน สามารถเขียนเป็ น
สมการวัดประสิ ทธิภาพของอัลกอริ ธึมแบบ Linear loop ได้ดงั นี้
f(n) = n
Slide 25
แบบ Logarithmic Loops
อัลกอริ ธึมจะทางานแบบ Loop โดยการทางานภายในแต่ละ loop จะ
เพิ่มหรื อลดค่าเป็ นเท่าตัว
x=1
Loop (x < 1000)
x = x*2
x = 1000
Loop (x >= 1)
x = x/2
ถ้าให้ f(n) แทนประสิ ทธิภาพ และ n แทนจานวนรอบการทางาน สามารถเขียนเป็ น
สมการวัดประสิ ทธิ ภาพได้ดงั นี้
f(n) = [logn]
Slide 26
แบบ Nested Loops
คือ อัลกอริธึมที่มี loop ซ้ อนอยู่ภายใน loop โดยประสิ ทธิภาพของ
อัลกอริธึมก็จะมีค่าเท่ ากับจานวน loop ทั้งหมดทีจ่ ะต้ องประมวลผล ซึ่ งหาได้ จากการ
เอาจานวน loop ทีซ่ ้ อนกันมาคูณกัน
f(n) = n2
f(n) = n3
Slide 27
Big-O Notation
• การวิเคราะห์อลั กอริ ธึม จะใช้วธิ ี หาจานวนครั้งของการทางานของโปรแกรม
โดยมักจะสนใจค่าโดยประมาณเท่านั้น ซึ่ งจะใช้สัญลักษณ์วา่ O เรี ยกว่า บิ๊ก
โอ (big O) ซึ่ งเป็ นสัญลักษณ์ทางคณิ ตศาสตร์ ที่มาจากคาว่า Order of
Magnitude
• O(N), O(logN), O(N2), O(1)
Slide 28
Big-O Notation
• แนวความคิดของบิ๊กโอ จะดูจากค่าที่มีผลกระทบมากที่สุดเพียงค่าเดียว
• ค่าอื่นๆที่เกี่ยวข้องจะมีผลต่อฟังก์ชนั น้อยกว่า จึงไม่สนใจ และไม่สนใจ
ค่าคงที่ดว้ ย
ตัวอย่าง หาค่าบิ๊กโอของ N4 + 10N – 5
ถ้า
f(N) =
N4 + 10N – 5
O(f(N)) =
O(N4)
Slide 29
ตัวอย่าง หาค่าบิ๊กโอของ 100N +1
ถ้า
f(N)
=
O(f(N))
=
100N +1
O(N)
ตัวอย่าง หาค่าบิ๊กโอของ N/5 +100
ถ้า
f(N)
=
O(f(N))
=
N/5 +100
O(N)
Slide 30
ตัวอย่าง หาค่าบิ๊กโอของ N3 + 2N3 + 10
ถ้า
f(N)
=
N3 + 2N3 + 10
O(f(N))
=
O(N3)
ตัวอย่าง หาค่าบิ๊กโอของ 100
ถ้า
f(N)
O(f(N))
=
=
100
O(1)
Slide 31
การวิเคราะห์ความเร็ วของ Algorithm
เร็ว
lo g n
0
1
2
3
4
5
ช้า
n
1
2
4
8
16
32
n log n
0
2
8
24
64
1 60
2
n
1
4
16
64
2 56
1 ,0 24
3
n
1
8
64
5 12
4 096
3 2,768
n
2
2
4
16
2 56
6 5,536
4 ,2 94 ,96 7,296
Slide 32
lo g n
0
1
2
3
4
5
n
1
2
4
8
16
32
n log n
0
2
8
24
64
1 60
2
n
1
4
16
64
2 56
1 ,0 24
3
n
1
8
64
5 12
4 096
3 2,768
n
2
2
4
16
2 56
6 5,536
4 ,2 94 ,96 7,296
2n
100000
n3
n2
n log n
10000
n
1000
100
log n
10
1
n
Slide 33
Running time calculations
A simple Example
int sum(int n)
{ int i, partialSum;
partialSum = 0;
//1
for(i=1;i
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)
Slide 34
Running time calculations
A 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)