ให้ประหยัดการใช้หน่วยความจำ (space) ด้วยความรวดเร็ว (time)

Slides:



Advertisements
งานนำเสนอที่คล้ายกัน
อัลกอริทึม ITS101 2/2011.
Advertisements

กลุ่มสาระการงานอาชีพและเทคโนโลยี โรงเรียนมัธยมวานรนิวาส
อสมการ 1.1 อสมการเชิงเส้นตัวแปรเดียว
เทคโนโลยีฐานข้อมูลสำนักงาน
Course Orientation Data Structure and Algorithms ( )
การศึกษาและประยุกต์ใช้ขั้นตอนวิธีเชิง วิวัฒน์แบบหลายจุดประสงค์บนคลังข้อมูล เจเมทัล Study of Evolutionary Algorithm in Multi- objective on Library jMetal.
รายวิชา ง40206 โครงสร้างข้อมูลและขั้นตอนวิธี
การทำงานแบบเลือกทำ (Selection)
การวิเคราะห์ระบบและวิธีปฏิบัติงาน
การเลือกตัวอย่าง อ.สมพงษ์ พันธุรัตน์.
วิทยาการเชิงการคำนวณ?
Data Structure โครงสร้างข้อมูล.
ขั้นตอนการพัฒนาโปรแกรม
ภาษาคอมพิวเตอร์ กฎเกณฑ์เกี่ยวกับคำศัพท์ ไวยากรณ์ และ หลักภาษาในการเขียนคำสั่งงานให้คอมพิวเตอร์ทำงานอย่างใดอย่างหนึ่งให้กับเราได้ มีหลากหลายชนิดต่างๆ กัน.
Lecture no. 1: Introduction to Computer and Programming
Lecture No. 3 ทบทวนทฤษฎีและแบบฝึกหัด
การแก้ปัญหาด้วยคอมพิวเตอร์
โปรเจค ระบบร้านขายกาแฟ.
หน่วยที่ 1 ระบบคอมพิวเตอร์
Surachai Wachirahatthapong
การออกแบบโปรแกรมอย่างมีโครงสร้าง Structured Design
CHAPTER 1 Major Sources of Errors in Numerical Methods
ขั้นตอนวิธี (Algorithm)
ความหมาย ปัญญาประดิษฐ์
วิทยาการคอมพิวเตอร์ 1 เรื่องคัดเฉพาะทาง
การวางแผนการผลิตรวม ความหมาย วัตถุประสงค์และขั้นตอนการวางแผนการผลิตรวม
กระบวนการสอบถามข้อมูล
การวิจัยดำเนินงาน Operations research
บทที่ 1 ความรู้พื้นฐานในการ พัฒนาระบบ
Algorithm Efficiency There are often many approaches (algorithms) to solve a problem. How do we choose between them? At the heart of computer program.
วิธีการทางคอมพิวเตอร์
การออกแบบฐานข้อมูลและการบริหารธุรกิจ
คณิตศาสตร์คอมพิวเตอร์
การออกแบบและการวิเคราะห์อัลกอริทึม
การวิเคราะห์ข้อมูล.
ที่ใช้ใน Object-Oriented Design
การออกแบบโปรแกรม ขั้นตอนการแก้ปัญหา การนิยามปัญหา (Problem definition)
Geographic Information System
เครื่องมือและเครื่องทุ่นแรงในงานบัญชี
2.1 วิธีแก้ปัญหาด้วยคอมพิวเตอร์ (Computer problem solving methods)
ลิงค์ลิสต์ (Linked List)
Introduction : Principle of Programming
การประเมินค่างาน ดร. สุจิตรา ธนานันท์.
หลักการเขียนโปรแกรม ( )
โปรแกรมฐานข้อมูลที่นิยมใช้
WATTANAPONG SUTTAPAK SOFTWARE ENGINEERING, SCHOOL OF INFORMATION COMMUNICATION TECHNOLOGY, UNIVERSITY OF PHAYAO Chapter 4 analysis of algorithm efficiency.
คำสั่งทำซ้ำ for คำสั่ง for เป็นคำสั่งทำซ้ำในลักษณะ Definite loop คือทราบจำนวนรอบที่แน่นอนในการทำงาน ซึ่งจะใช้ตัวแปร 1 ตัวในการนับจำนวนรอบว่าครบตามกำหนดหรือไม่
หลักการและวิธีการแก้ปัญหาด้วยกระบวนการเทคโนโลยีสารสนเทศ
Chapter 01 Problem-Solving Concept แนวคิดการแก้ปัญหา
หลักการแก้ปัญหา.
Computer Project Siam Richwood Company Limited Titiporn Kanchanwong Code :
Chapter 04 Flowchart ผู้สอน อ.ยืนยง กันทะเนตร
School of Information Communication Technology,
บทที่ 2 การวิเคราะห์อัลกอริทึม
โครงสร้างข้อมูลและขั้นตอนวิธี (Data Structures and Algorithms)
การแก้ปัญหาโปรแกรม (Flowchart)
สาขาวิชาเทคโนโลยี สารสนเทศ คณะเทคโนโลยีสารสนเทศ และการสื่อสาร.
Introduction TO Discrete mathematics
การวิเคราะห์และออกแบบระบบ System Analysis and Design
โครงสร้างข้อมูลและอังกอลิทึม
หลักการเขียนโปรแกรมเบื้องต้น
Introduction ธนวัฒน์ แซ่เอียบ.
ประโยชน์ของคอมพิวเตอร์
Data Structure and Algorithms
การออกแบบการวิจัย.
โครงสร้างข้อมูลแบบ สแตก (stack)
Week 13 Basic Algorithm 2 (Searching)
การแบ่งแยกและเอาชนะ Divide & Conquer
การแบ่งแยกและเอาชนะ Divide & Conquer
Computer Program คือ ขั้นตอนการทำงาน ของคอมพิวเตอร์
ใบสำเนางานนำเสนอ:

ให้ประหยัดการใช้หน่วยความจำ (space) ด้วยความรวดเร็ว (time) โครงสร้างข้อมูล ให้ประหยัดการใช้หน่วยความจำ (space) ด้วยความรวดเร็ว (time) เป็นหนึ่งในความรู้พื้นฐานของการศึกษาทางวิทยาการคอมพิวเตอร์ เรียนเกี่ยวกับการจัดเก็บข้อมูลอย่างมีระเบียบและจัดการข้อมูลอย่างมีระบบ แปลงแนวคิดนี้ออกมาเป็นโปรแกรมที่ใช้งานจริงได้เพื่อให้การประมวลผลมีประสิทธิภาพ

โครงสร้างข้อมูล อาศัยทักษะและความรู้การเขียนโปรแกรมในการพัฒนาโครงสร้างข้อมูลที่เราเลือกหรือออกแบบไว้ให้เห็นจริง อาศัยทักษะและความรู้ทางคณิตศาสตร์ การนับ การวิเคราะห์ ตรรกศาสตร์และการจำลอง ในการวิเคราะห์ออกแบบขั้นตอนวิธีในการจัดการข้อมูลให้มีประสิทธิภาพ

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

ความสำคัญของการเรียนโครงสร้างข้อมูล ไม่มีโครงสร้างข้อมูลใดที่ใช้ได้ดีกับทุกงาน ดังนั้นเราเรียนเพื่อจะได้รู้ว่าโครงสร้างข้อมูลแบบไหนเหมาะกับงานประเภทไหน รู้การเรียกใช้การดำเนินการต่าง ๆ ที่เกี่ยวกับโครงสร้างข้อมูลนี้ได้ เช่น search, insert, update, delete รู้เงื่อนไขที่เกี่ยวข้อง แปลงแนวคิดการจัดเก็บและจัดการข้อมูลออกเป็นโปรแกรมได้ เลือกเป็น ใช้เป็น สร้างเป็น

ตัวอย่าง Array Implementation Linked List Implementation ต้องการเก็บคะแนนของนักศึกษา 5 คน ซึ่งเป็นเลขจำนวนเต็ม วิธีที่ 1 : จัดเก็บโดยใช้โครงสร้างข้อมูลแบบเส้นตรง Unsorted list Sorted list วิธีที่ 2 : จัดเก็บโดยใช้โครงสร้างข้อมูลแบบต้นไม้ General Tree Binary Tree Heap Implementation ทำได้ 2 แบบคือ Array Implementation Linked List Implementation อธิบายบนกระดาน

เคยถามตัวเองบ้างไหมว่า เราจะใช้เวลาในการประมวลผลเงินเดือนของพนักงานในปริษัทของเราเท่าไหร่ ? เราควรจะซื้อโปรแกรมในการคำนวณเงินเดือนของพนักงานในปริษัทของเราจากบริษัท ABC หรือ ควรซื้อจากบริษัท XYZ? โปรแกรมใช้เวลาในการประมวลผลนานมาก เป็นเพราะการออกแบบขั้นตอนวิธีไม่ดีหรือว่าเป็นเพราะปัญหาที่แก้เป็นปัญหาที่ยาก เทคนิคพื้นฐานในการวิเคราะห์อัลกอลิทึม (Algorithm Analysis) อัลกอลิทึมคือชุดของคำสั่งซึ่งใช้ในการแก้ปัญหา

Algorithm Efficiency There are often many approaches (algorithms) to solve a problem. How do we choose between them? At the heart of computer program design are two (sometimes conflicting) goals. To design an algorithm that is easy to understand, code, debug. To design an algorithm that makes efficient use of the computer’s resources.

Algorithm Efficiency (cont) Goal (1) is the concern of Software Engineering. Goal (2) is the concern of data structures and algorithm analysis. When goal (2) is important, how do we measure an algorithm’s cost?

How to Measure Efficiency? Empirical comparison (run programs) Asymptotic Algorithm Analysis Critical resources: Factors affecting running time: For most algorithms, running time depends on “size” of the input. Running time is expressed as T(n) for some function T on input size n. Empirical comparison is difficult to do “fairly” and is time consuming. Critical resources: Time. Space (disk, RAM). Programmers effort. Ease of use (user’s effort). Factors affecting running time: Machine load. OS. Compiler. Problem size. Specific input values for given problem size.

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

Growth Rate The growth rate for an algorithm is the rate at which the cost (running time) of the algorithm grows as the size of its input grows. Empirical comparison is difficult to do “fairly” and is time consuming. Critical resources: Time. Space (disk, RAM). Programmers effort. Ease of use (user’s effort). Factors affecting running time: Machine load. OS. Compiler. Problem size. Specific input values for given problem size.

Growth Rate Graph T(n) Input size n x1000 T(n)

ขั้นตอนการพัฒนาโปรแกรมในการแก้ปัญหาหนึ่งๆ การแก้ปัญหาด้านคอมพิวเตอร์หนึ่งๆ เหมือนกับการแก้ปัญหาใดๆ สามารถหาวิธีแก้ (solution)ได้หลายแบบ ในทางคอมพิวเตอร์เราเรียกว่าเรามีขั้นตอนวิธีในการแก้ปัญหานี้ได้หลายแบบ เช่น นายจ้างของเราต้องการวิธีในการค้นหาข้อมูลจากรายการข้อมูลตัวเลขราคาสินค้าจำนวน 10000 ตัว เราและเพื่อนร่วมงานได้เสนอแนวทางในการแก้ปัญหานี้แก่นายจ้าง  ออกแบบอัลกอริทึมมาแก้ (5 อัน)  ทำการวิเคราะห์ประสิทธิภาพของอัลกอริทึมแต่ละอัน  หา Growth rate ของอัลกอริทึมแต่ละอัน  เปรียบเทียบ Growth rate และทำการเลือก Growth rate ที่มีอัตราการเติบโตน้อยสุด

Big O Notation Big O Notation หรือ อันดับขนาด (Order of Magnitude) หมายถึงปริมาณที่เครื่องคอมพิวเตอร์ทำไม่ขึ้นกับขนาดของโปรแกรมหรือ จำนวนบรรทัดของโปรแกรม เป็นฟังก์ชันที่ได้จากการประมาณค่าทางคณิตศาสตร์ซึ่งเป็นฟังก์ชันที่สัมพันธ์กับขนาดของปัญหา ให้ข้อมูลในการเปรียบเทียบอัลกอลิทึม List[1] = 0; List[2] = 0; : List [1000] = 0; Algorithm 1 For(i=1;i<=n;i=i+1) List [i] = 0; Algorithm 2 Algorithm 1 และ Algorithm 2 มีอันดับขนาดคือ O(n) Empirical comparison is difficult to do “fairly” and is time consuming. Critical resources: Time. Space (disk, RAM). Programmers effort. Ease of use (user’s effort). Factors affecting running time: Machine load. OS. Compiler. Problem size. Specific input values for given problem size.

Examples of Growth Rate (1) for (i=1; i<=1000; i=i+1) 1000 times <<application code>>; for (i=1; i<=1000; i=i+2) 500 times for (i=1; i<1000; i=i*2) 10 times for (i=1000; i>=1; i=i/2) 10 times Asymptotic analysis is defined for equations. We need to convert programs to equations to analyze them. The traditional notation is (1), not (c). (n) even though the value of sum is n2.

Examples (2) for (j=1; j<=10; j=j+1) 10 times for (i=1; i<=10; i=i+1) 10 iterations <<application code>>; 100 iterations for (j=1; j<=10; j=j+1) 10 iterations for (i=1; i<=10; i=i*2) log210 iterations 10*log210 iterations for (j=1; j<=10; j=j+1) 10 times for (i=1; i<=j; i=i+1) (10+1)/2 times 55 iterations Asymptotic analysis is defined for equations. We need to convert programs to equations to analyze them. The traditional notation is (1), not (c). (n) even though the value of sum is n2.

Example: Input Size = n for (i=1; i<=n; i=i+1) T(n) = n <<application code>>; for (i=1; i<=n; i=i+2) T(n) = n/2 for (i=1; i<n; i=i*2) <<application code>>; T(n) for (i=n; i>=1; i=i/2) Asymptotic analysis is defined for equations. We need to convert programs to equations to analyze them. The traditional notation is (1), not (c). (n) even though the value of sum is n2.

Examples (2) for (j=1; j<=n; j=j+1) for (i=1; i<=n; i=i+1) <<application code>>; for (i=1; i<=n; i=i*2) for (i=1; i<=j; i=i+1) Asymptotic analysis is defined for equations. We need to convert programs to equations to analyze them. The traditional notation is (1), not (c). (n) even though the value of sum is n2.

Examples (3) // Find largest value int largest(int array[], int n) { int currlarge = 0; // Largest value seen for (int i=1; i<n; i++) // For each val if (array[currlarge] < array[i]) currlarge = i; // Remember pos return currlarge; // Return largest } As n grows, how does T(n) grow? Cost: T(n) = c1n + c2 steps

Time Complexity Best Case Time Complexity Worst Case Time Complexity เวลาที่ดีสุด (minimum time) ที่ algorithm ใช้ในการประมวลผลสำหรับข้อมูลนำเข้าขนาด n Worst Case Time Complexity เวลาที่มากสุด(maximum time) ที่algorithm ใช้ในการประมวลผลสำหรับข้อมูลนำเข้าขนาด n รับประกันเวลาได้ว่า algorithm ที่ใช้จะไม่ใช้เวลาเกินนี้ ใช้ใน time-critical software application Average Case Time Complexity เวลาที่เฉลี่ย(average time) ที่ algorithm ใช้ในการประมวลผลสำหรับข้อมูลนำเข้าขนาด n Need assumption about inputs’ distribution

Best, Worst, Average Cases Sequential search for K in an array of n integers: Begin at first element in array and look at each element in turn until K is found Best case: Worst case: Average case: Best: Find at first position. Cost is 1 compare. Worst: Find at last position. Cost is n compares. Average: (n+1)/2 compares IF we assume the element with value K is equally likely to be in any position in the array.

Which Analysis to Use? While average time appears to be the fairest measure, it may be difficult to determine. When is the worst case time important? Average time analysis requires knowledge of distributions. For example, the assumption of distribution used for average case in the last example. Worst-case time is important for real-time algorithms.

Big-O Notation Big-oh notation represents the growth rate. It's useful to be able to estimate the cpu or memory resources an algorithm requires. Example: If T(n) = 3n2 then T(n) is in O(n2). Wish tightest upper bound: While T(n) = 3n2 is in O(n3), we prefer O(n2). It provides more information in this example to say O(n2) than O(n3).

Big-Oh Examples Example 1: Finding value X in an array T(n) is in O(n). Example 2: T(n) = c1n2 + c2n T(n) is in O(n2). Example 3: T(n) = c. We say this is in O(1). We are doing average case. cs is a constant. The actual value is irrelevant.

Running Time Examples (1) Example 1: O(1) a = b; This assignment takes constant time, so it is O(1). Example 2: O(n) sum = 0; for (i=1; i<=n; i++) O(n) sum += n; Asymptotic analysis is defined for equations. We need to convert programs to equations to analyze them. The traditional notation is (1), not (c). (n) even though the value of sum is n2.

Running Time Examples (2) Example 3: O(n2) sum = 0; O(1) for (j=1; j<=n; j++) O(n2) for (i=1; i<=j; i++) sum++; for (k=0; k<n; k++) O(n) A[k] = k; First statement is (1). Double for loop is i = (n2). Final for loop is (n). Result: (n2).

Running Time Examples (3) Example 4: O(n2) sum1 = 0; O(1) for (i=1; i<=n; i++) O(n2) for (j=1; j<=n; j++) sum1++; sum2 = 0; O(1) for (j=1; j<=i; j++) sum2++; sum is n2. First loop, sum is n2. Second loop, sum is (n+1)(n)/2. Both are (n2). sum is (n+1)(n)/2.

Running Time Examples (4) Example 5: O(nlogn) sum1 = 0; for (k=1; k<=n; k*=2) O(logn) for (j=1; j<=n; j++) O(n) sum1++; sum2 = 0; for (k=1; k<=n; k*=2) O(n) for (j=1; j<=k; j++) sum2++; First loop is n for k = 1 to log n, or (n log n). Second loop is 2k for k = 0 to log n - 1, or (n). First loop is n for k = 1 to log n. Second loop is 2k for k = 0 to log n.

Algorithm Efficiency Constant O(1) การข้าถึงสมาชิกตัวที่ iในแถวลำดับ Logarithmic O(logn) การค้นหาแบบBinary Search Linear O(n) การค้นหาแบบSequential Search Linear logarithmic O(n(logn)) การจัดเรียงแบบMerge Sort Quadratic O(n2) การจัดเรียงแบบธรรมดา How much speedup? 10 times. More important: How much increase in problem size for same time expended? That depends on the growth rate. n: Size of input that can be processed in one hour (10,000 steps). n’: Size of input that can be processed in one hour on the new machine (100,000 steps). Note: for 2n, if n = 1000, then n’ would be 1003.

Algorithm Efficiency Assumes instruction speed of one microsecond and 10 instructions in loop. Efficiency Big-O Iterations Est. Time Logarithmic Linear O(logn) O(n) 14 10,000 Microseconds .1 seconds Linear logarithmic Quadratic O(n(logn)) O(n2) 140,000 10,0002 2 seconds 15-20 min. Polynomial O(nk) 10,000k Hours Exponential O(cn) 210,000 Intractable Factorial O(n!) 10,000! How much speedup? 10 times. More important: How much increase in problem size for same time expended? That depends on the growth rate. n: Size of input that can be processed in one hour (10,000 steps). n’: Size of input that can be processed in one hour on the new machine (100,000 steps). Note: for 2n, if n = 1000, then n’ would be 1003.

Faster Computer or Algorithm? Old machine can run 10,000 basic operations/hour. New machine can run 100,000 basic operations/hour. What happens when we buy a computer 10 times faster? T(n) n n’ Change n’/n 10n 1,000 10,000 n’ = 10n 10 20n 500 5,000 5n log n 250 1,842 10 n < n’ < 10n 7.37 2n2 70 223 n’ = 10n 3.16 2n 13 16 n’ = n + 3 ----- Algorithmที่มี growth rate ที่สูงจะใช้เวลามากในการแก้ปัญหาข้อมูลนำเข้าที่มีขนาดเล็กและแม้ว่าจะเพิ่มความเร็วของเครื่องคอมพิวเตอร์ก็ไม่ได้ช่วยอะไรให้ดีขึ้น How much speedup? 10 times. More important: How much increase in problem size for same time expended? That depends on the growth rate. n: Size of input that can be processed in one hour (10,000 steps). n’: Size of input that can be processed in one hour on the new machine (100,000 steps). Note: for 2n, if n = 1000, then n’ would be 1003.