data structure intro

Post on 07-Jul-2015

242 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

รายว ชา ง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)

top related