วันอาทิตย์ที่ 23 กันยายน พ.ศ. 2555

อัลริทึม คืออะไร





อัลริทึม

คืออะไร


Algorithm      

 คือ กระบวนการแก้ปัญหาที่สามารถอธิบายออกมาเป็นขั้นตอนที่ชัดเจน เมื่อนำเข้าอะไร แล้วจะต้องได้ผลลัพธ์เช่นไร  กระบวนการนี้ประกอบด้วยจะประกอบด้วย วิธีการเป็นขั้นๆ และมีส่วนที่ต้องทำแบบวนซำอีก จนกระทั่งเสร็จสิ้นการทำงาน 

Algorithm ไม่ใช่คำตอบแต่เป็นชุดคำสั่งที่ทำให้ได้คำตอบ วิธีการในการอธิบาย Algorithm ได้แก่
1. Natural Language อธิบายแบบใช้ภาษาที่เราสื่อสารกันทั่วไป
2.Pseudocode อธิบายด้วยรหัสจำลองหรือรหัสเทียม
3.Flowchart อธิบายด้วยแผนผัง
การนำขั้นตอนวิธีไปใช้แก้ปัญหา ไม่จำกัดเฉพาะการเขียนโปรแกรมคอมพิวเตอร์ แต่สามารถใช้กับปัญหาอื่น ๆ ได้เช่นเดียวกัน
      ตัวอย่างเช่น ในการวางแผนการใช้ทรัพยากรทางธุรกิจขององค์กร หรือ Enterprise Resource Planning ( ERP ) เพื่อให้เกิดการใช้ทรัพยากรอย่างมีประโยชน์สูงสุด ซึ่งจำเป็นต้องวางแผนอย่างเป็นระบบ เป็นขั้นตอน จึงจำเป็นต้องอาศัย Algorithm ด้วย เพื่อให้ทราบถึงขั้นตอนต่างๆ และสามารถตัดทอนขั้นตอนที่เกินความจำเป็น อีกทั้งยังสามารถปรับปรุง และเพิ่มเติมขั้นตอนใหม่ เข้าไปได้ ช่วยลดความสับสนขณะทำงานด้วย

  ขั้นตอนวิธี หรือ algorithm (ภาษาไทย : อัลกอริทึม) หมายถึงกระบวนการแก้ปัญหาที่สามารถเข้าใจได้ มีลำดับหรือวิธีการในการแก้ไขปัญหาใดปัญหาหนึ่งอย่างเป็นขั้นเป็นตอนและชัดเจน เมื่อนำเข้าอะไร แล้วจะต้องได้ผลลัพธ์เช่นไร ซึ่งแตกต่างจากการแก้ปัญหาแบบสามัญสำนึก หรือฮิวริสติก (heuristic)
          โดยทั่วไป ขั้นตอนวิธี จะประกอบด้วย วิธีการเป็นขั้นๆ และมีส่วนที่ต้องทำแบบวนซ้ำ (iterate) หรือ เวียนเกิด (recursive) โดยใช้ตรรกะ (logic) และ/หรือ ในการเปรียบเทียบ (comparison) ในขั้นตอนต่างๆ จนกระทั่งเสร็จสิ้นการทำงาน
          ในการทำงานอย่างเดียวกัน เราอาจจะเลือกขั้นตอนวิธีที่ต่างกันเพื่อแก้ปัญหาได้ โดยที่ผลลัพธ์ที่ได้ในขั้นสุดท้ายจะออกมาเหมือนกันหรือไม่ก็ได้ และจะมีความแตกต่าง ที่จำนวนและชุดคำสั่งที่ใช้ต่างกันซึ่งส่งผลให้ เวลา (time) , และขนาดหน่วยความจำ (space) ที่ต้องการต่างกัน หรือเรียกได้อีกอย่างว่ามีความซับซ้อน (complexity) ต่างกัน
          การนำขั้นตอนวิธีไปใช้ ไม่จำกัดเฉพาะการเขียนโปรแกรมคอมพิวเตอร์ แต่สามารถใช้กับปัญหาอื่น ๆ ได้เช่น การออกแบบวงจรไฟฟ้า, การทำงานเครื่องจักรกล, หรือแม้กระทั่งปัญหาในธรรมชาติ เช่น วิธีของสมองมนุษย์ในการคิดเลข หรือวิธีการขนอาหารของแมล







โครงสร้างข้อมูล (Data Structure) คืออะไร
คือ รูปแบบของการจัดระเบียบของข้อมูล ซึ่งมีอยู่หลายรูปแบบ เช่น เขตข้อมูล(Field), แถวลำดับ(Array), ระเบียน(Record), ต้นไม้(Tree), ลิงค์ลิสต์(Link List) เป็นต้น (ทักษิณา สวนานนท์, 2544, หน้า 161) [4]p.12
คือ รูปแบบวิธีการจัดระเบียบของข้อมูลที่ได้จากการดำเนินการทางคณิตศาสตร์(Operations) เพื่อให้สามารถจัดการกับข้อมูลที่ใช้กับระบบคอมพิวเตอร์ได้ [4]p.12
คือ การรวบรวมข้อมูลเป็นกลุ่มอย่างมีรูปแบบ เพื่อให้การนำข้อมูลกลับมาใช้ หรือประมวลผลอย่างมีประสิทธิภาพ ด้วยขั้นตอนวิธีที่หลากหลาย แล้วนำเสนอได้อย่างถูกต้องรวดเร็วตามลักษณะงานที่ต้องการ
คือ การนำกลุ่มของข้อมูลขนาดใหญ่มาจัดรูปแบบ เพื่อให้เครื่องประมวลผลและแสดงผลอย่างมีขั้นตอน โดยเริ่มจากการรวบรวม เพิ่ม ลบ หรือเข้าถึงข้อมูลแต่ละรายการ
โครงสร้างข้อมูล (Data Structure)
บิท (Bit) คือ ข้อมูลที่มีขนาดเล็กที่สุด เป็นข้อมูลที่เครื่องคอมพิวเตอร์เข้าใจ และใช้งานได้ ได้แก่ 0 หรือ 1
ไบท์ (Byte) หรือ อักขระ (Character) คือ ตัวเลข หรือ ตัวอักษร หรือ สัญลักษณ์พิเศษ จำนวน 1 ตัว
ฟิลด์ (Field) หรือ เขตข้อมูล คือ ไบท์ หรือ อักขระตั้งแต่ 1 ตัวขึ้นไปรวมกันเป็นฟิลด์ เช่น เลขประจำตัว หรือ ชื่อพนักงาน
เรคคอร์ด (Record) หรือระเบียน คือ ฟิลด์ตั้งแต่ 1 ฟิลด์ขึ้นไป ที่มีความสัมพันธ์เกี่ยวข้องกันมารวมกัน
ไฟล์ (File) หรือ แฟ้มข้อมูล คือ หลายเรคคอร์ดมารวมกัน เช่น ข้อมูลที่อยู่นักเรียนมารวมกัน
ฐานข้อมูล (Database) คือ หลายไฟล์ข้อมูลมารวมกัน เช่น ไฟล์ข้อมูลนักเรียนมารวมกันในงานทะเบียน แล้วรวมกับไฟล์การเงิน

















เว็บเพจที่เกี่ยวข้อง

แนะนำหนังสือ
ซูโดโค้ด (Pseudocode)
+ การเขียนโปรแกรม เรียงเลข 3 ตัว
ตัวอย่างข้อมูล
ภาษาปาสคาล
r : real;
i : integer;
c : char;
s : string;
s20 : array[1..20] of char;
ภาษาซี
bool b; b = true;
char c; c = 'a';
int ar1[30]; ar1[0]=555;
int ar2[3]={55,66,77};
ภาษาจาวา
// boolean, char
// byte, short, int, long
// float, double
ภาษาวีบี
' 17 type : boolean, byte, char, date
' decimal, double, integer, long, object
' sbyte, short, single, string, uinteger
' ulong, user-defined, ushort
' s คือ signed และ u คือ unsigned

ศัพท์เทคนิค (Technical Terms)
  1. phrase "a picture is worth a thousand words" [2]p.1
  2. โครงสร้างข้อมูลพื้นฐาน ประกอบด้วยแบบของข้อมูลเบื้องต้น คือ 1)บิท(Binary) 2)อักขระ(Character) 3)ฟิลด์(Field) 4)เรคอร์ด(Record) 5)ไฟล์(File) 6)ฐานข้อมูล(Database) [4]p.12
  3. วิเคราะห์ปัญหา (Problem Analysis) คือ การแยกปัญหาใหญ่ออกเป็นส่วน เพื่อนำไปสู่การแก้ปัญหาแต่ละส่วน
  4. อัลกอริทึม (Algorithm) (มีความเป็นนามธรรมอยู่ในตัวเป็นธรรมชาติ)
    คือ กลุ่มของขั้นตอนหรือกฎเกณฑ์ที่จะนำพาไปสู่การแก้ปัญหา [3]p.37
    คือ ขั้นตอนวิธีที่ประกอ้บด้วยชุดคำสั่งเป็นขั้นเป็นตอนที่ชัดเจน และรับประกันว่าเมื่อได้ปฏิบัติถูกต้องตามขั้นตอนจนครบก็จะได้ผลลัพธ์ที่ถูกต้องตามต้องการ [3]p.37
    คือ รูปแบบของการกำหนดการทำงานอย่างเป็นขั้นตอน ซึ่งผ่านการวิเคราะห์และแยกแยะ เพื่อการแก้ปัญหาต่าง ๆ ตามลำดับขั้น อาจเลือกใช้ภาษาไทยหรือภาษาอังกฤษตามความถนัด เพื่อนำเสนอขั้นตอนของกิจกรรมก็ได้ [4]p.17
  5. รหัสเทียม หรือซูโดโค้ด (Pseudo Code)
    คือ รหัสจำลองที่ใช้เป็นตัวแทนของอัลกอริทึม โดยมีถ้อยคำหรือประโยคคำสั่งที่เขียนอยู่ในรูปแบบของภาษาอังกฤษที่ไม่ขึ้นกับภาษาคอมพิวเตอร์ใดภาษาหนึ่ง [3]p.37
    คือ การแสดงขั้นตอนวิธีการที่ใช้ภาษาเขียนที่เข้าใจได้ง่าย อาจใช้ภาษาไทยหรือภาษาอังกฤษก็ได้ขึ้นอยู่กับความสะดวกของผู้เขียนและกิจกรรมที่จะนำเสนอ มักใช้รูปแบบคล้ายประโยคภาษาอังกฤษเพื่ออธิบายรายละเอียดของอัลกอริทึม
  6. ผังงาน (Flowchart)
    คือ การแสดงขั้นตอนวิธีการที่ใช้สัญลักษณ์ที่เข้าใจได้ง่าย แต่ให้รายละเอียดได้น้อยกว่า
    คือ รูปภาพ (Image) หรือสัญลักษณ์(Symbol) ที่ใช้เขียนแทนขั้นตอน คำอธิบาย ข้อความ หรือคำพูด ที่ใช้ในอัลกอริทึม (Algorithm) เพราะการนำเสนอขั้นตอนของงานให้เข้าใจตรงกัน ระหว่างผู้เกี่ยวข้อง ด้วยคำพูด หรือข้อความ ทำได้ยากกว่า [#]
  7. การโปรแกรมโครงสร้าง (Structured Programming) คือ การกำหนดขั้นตอนให้เครื่องคอมพิวเตอร์ทำงานโดยมีโครงสร้างการควบคุมพื้นฐาน 3 หลักการ ได้แก่ 1)การทำงานแบบตามลำดับ(Sequence) 2)การเลือกกระทำตามเงื่อนไข(Decision หรือ Selection) และ 3)การทำงานแบบทำงานซ้ำ (Repetition หรือ Iteration หรือ Loop) #
  8. อาร์เรย์ (Array)
    คือ ชุดของข้อมูลในชื่อเดียวกันที่มีได้หลายสมาชิก โดยสมาชิกถูกจัดเรียงเป็นลำดับ และมีรูปแบบเป็นแบบใดแบบหนึ่ง
    คือ การรวมกลุ่มของตัวแปรที่สามารถใช้ตัวแปรชื่อเดียวกันแทนข้อมูลสมาชิกได้หลาย ๆ ตัวในคราวเดียวกัน ด้วยการใช้เลขดรรชนี (Index) หรือซับสคริปต์ (Subscript) เป็นตัวอ้างอิงตำแหน่งสมาชิกบนแถวลำดับนั้น ๆ [3]p.80
  9. โอเปอเรชั่น (Operation) คือ การกระทำที่สามารถทำกับโครงสร้างนั้น เช่น โอเปอเรชั่นของอาร์เรย์ ได้แก่ 1)การท่องเข้าไป (Traversal) 2)การค้นหาข้อมูลที่ต้องการ(Searching) 3)การแทรกข้อมูลใหม่(Insertion) 4)การลบข้อมูล (Deletion) 5)การเรียงกลับหลัง(Reversing) 6)การเรียงลำดับ(Sorting) [1]p.14
  10. นามธรรม (Abstract) คือ เป็นแนวทางพื้นฐานของมนุษย์ที่ใช้จัดการกับความซับซ้อน (Grady Booch) [3]p.41 โดยเรื่องราวของนวนิยายเป็นจินตนาการในหัวของผู้เขียนถือเป็นนามธรรม เมื่อถ่ายทอดผ่านตัวแทน (Representation) ทางหนังสือด้วยภาษาต่าง ๆ ก็จะออกมาเป็นรูปธรรม ดังนั้นการเขียนโปรแกรมต้องเริ่มต้นด้วยนามธรรม หรือจินตนาการจัดการความซับซ้อนก่อนนำเสนอเป็นรูปธรรม เพื่อประมวลผล
  11. ชนิดข้อมูลนามธรรม (Abstract Data Type) คือ เครื่องมือกำหนดโครงสร้างข้อมูลที่ประกอบด้วยชนิดของโครงสร้างข้อมูล รูปแบบการดำเนินการ หรือแยกได้ 3 ส่วนคือ รูปแบบข้อมูล (Element) โครงสร้าง (Structure) และ การดำเนินการ (Operations) [4]p.25
  12. โปรแกรม (Program) คือ ตัวแทนของอัลกอริทึม
  13. โปรเซส (Process) คือ กิจกรรมที่ประมวลผลตามขั้นตอนของอัลกอริทึม

ความรู้เบื้องต้นเกี่ยวกับการพัฒนาระบบ
การพัฒนาโปรแกรมประกอบด้วยขั้นตอนพื้นฐาน 7 ขั้นตอน [3]p.19
1. กำหนดปัญหา (Define the Problem)
2. ร่างรายละเอียดแนวทางแการแก้ไขปัญหา (Outline the Solution)
3. พัฒนาอัลกอริทึม (Develop Algorithm) อาจนำเสนอด้วย Flowchart, DFD, ER หรือ UML
4. ตรวจสอบความถูกต้องของอัลกอริทึม (Test the Algorithm for Correctness)
5. เขียนโปรแกรม (Programming)
6. ทดสอบโปรแกรม (Testing)
7. จัดทำเอกสารและบำรุงรักษาโปรแกรม (Document and Maintain the Program)

กรรมวิธีการออกแบบโปรแกรม (Program Design Methodology) [3]p.21 # - การออกแบบโปรแกรมแบบ Procedure-Driven - การออกแบบโปรแกรมแบบ Event-Driven - การออกแบบโปรแกรมแบบ Data-Driven
การเขียนโปรแกรมแบบ Procedural และ Object-Oriented [3]p.22 - การเขียนโปรแกรมแบบบนลงล่าง (Top-Down Development) - การออกแบบโปรแกรมในลักษณะโมดูล (Modular Design) - การโปรแกรมเชิงวัตถุ (Object-Oriented Programming)
คือการโปรแกรมที่ให้ความสำคัญกับการรวมวัตถุ และกระบวนการได้ด้วยกัน เพื่อสืบทอด (Inheritance) หรือนำกลับมาใช้ใหม่ได้ (reused)
โดยการนำทั้งวัตถุ และกระบวนการมารวมกัน มักเก็บไว้ใน Class ซึ่งหมายถึง ต้นแบบของวัตถุ ต.ย. โปรแกรมแบบ Top-Down ด้วยภาษา Pascal
program p01;
begin
Writeln('burin');
Writeln('rujjanapan');
end.
คอมพิวเตอร์สามารถคำนวณได้ เครื่องหมายทางคณิตศาสตร์ เช่น + - * / ^ ( ) [3]p.164
x = 4 / 2 + 4 ^ 2 - 1 * 2 + 3 19 กด Ctrl + A = คำตอบ
y = 36 / (2 + 4) ^ 2 - 1 * 2 + 3 2
z = 4 / 2 + 4 ^ (2 - 1) * 2 + 3 13
ต.ย. โปรแกรมแบบ Modular ด้วยภาษา Pascal
program p02;
procedure xName;
begin
Writeln('burin'); end; begin
xName; end. ต.ย. โปรแกรมแบบ OOP ด้วยภาษา Java class father { String n; private void pname () {
n = "burin";
return n; } } class child extends father { child() {
n = "rujjanapan";
System.out.println(pname()); // yonok } public static void main(String[] a) {
new child(); } private void pname () {
n = "yonok";
return n; } }
ภาพแสดง ความแตกต่างของ Stack กับ Heap และ pass by value กับ pass by reference

อัลกอริทึม (Algorithm) http://www.thaiall.com/datastructure/pseudocode.htm
การเขียนอัลกอริทึมมีประเด็นต้องพิจารณาหลายเรื่อง คือ 1)วัตถุประสงค์ 2)เหตุการณ์ก่อนประมวลผล 3)ค่าของพารามิเตอร์ทั้งก่อนและหลังประมวลผล 4)สิ่งที่ได้หลังประมวลผล 5)ลำดับเหตุการณ์ระหว่างประมวลผล
ต.ย. อัลกอริทึมที่ 1 : ต้มมาม่า [3]p.25
1. หามาม่าไว้ 1 ซอง
2. ฉีกซองมาม่าและเทลงถ้วยเปล่า
3. ฉีกซองเครื่องปรุง แล้วเทลงถ้วยเดิม
4. ต้มน้ำให้ร้อนได้ที่ แล้วเทลงถ้วย
5. ปิดฝาไว้ 3 นาที
6. เปิดฝา แล้วรับประทาน
คำถาม : ต้มมาม่า
1. มีขั้นตอนใดสลับกันได้
2. ถ้าเปลี่ยนข้อความ จะเปลี่ยนอย่างไร
3. ถ้าทำหลายถ้วยจะทำอย่างไร

? คน 3 คนใครอายุมากที่สุด และเป็นเท่าใด
ต.ย. อัลกอริทึมที่ 2 : หาค่าเฉลี่ย ใช้ Pseudo Code 
1. set variable
2. loop
1. read number into variable
2. add number to total
3. increase counter 3. end loop 4. set average = total / counter 5. print average
คำถาม : หาค่าเฉลี่ย
1. เขียนเป็นภาษาไทยอย่างไร
2. แต่ละบรรทัดในจาวาคืออะไร
3. สลับบรรทัดใดในจาวาได้บ้าง
4. ไม่มีตัวแปร avg จะได้หรือไม่
1.


2.



3.
4.
5.
ภาษาจาวา
byte x;
int i = 0;
int total = 0;
while (i < 5) {
  x = System.in.read();
  total = total + x;
  i++;
}
double avg = total/i;
System.out.println(avg);

ปฏิบัติการพื้นฐานของเครื่องคอมพิวเตอร์ [3]p.37
1. รับข้อมูล (input device)
2. แสดงผล (output device)
3. คำนวณ (limit and sequence)
4. กำหนดค่าตัวแปร (storage)
5. เปรียบเทียบ หรือเลือกทำงาน (compare or decision)
6. ทำซ้ำ (repeation or loop)

หน่วยความจำ (Memory)
โครงสร้างหน่วยความจำ (Memory Architecture)
การจัดสรรหน่วยความจำ (Memory Allocation)
- แบบคงที่ (Static)
- แบบเปลี่ยนแปลงได้ (Dynamic)
ตารางแฟท (FAT = File Allocatio Table)
- Directory Table
- Memory Pointer
File Attribute
- Archive file
- System file
- Readonly file
- Hidden file
 
ต.ย. แฟ้ม adisinit.exe มีขนาด 35.1 KB ใช้พื้นที่ 9 Block ๆ ละ 4 KB
เพราะเครื่องนี้แบ่ง 1 Cluster มีขนาด 8 Sectors

ชนิดข้อมูลนามธรรม (Abstract Data Type : ADT)
ชนิดข้อมูลนามธรรม (Abstract Data Type) คือ เครื่องมือกำหนดโครงสร้างข้อมูลที่ประกอบด้วยชนิดของโครงสร้างข้อมูล รูปแบบการดำเนินการ 
หรือแยกได้ 3 ส่วนคือ รูปแบบข้อมูล (Element) โครงสร้าง (Structure) และ การดำเนินการ (Operations) [4]p.25
แบบประเภทข้อมูลตามลักษณะความสัมพันธ์ในข้อมูล 1. ข้อมูลเชิงเดี่ยว (Atomic Data) 2. ข้อมูลเชิงประกอบ (Composite Data)ชนิดข้อมูลนามธรรม (ADT) มิใช้โครงสร้างข้อมูล [3]p.50 แต่เป็นรูปแบบระดับแนวคิดหรือรูปแบบข้อมูลเชิงลอจิคอล  1. รูปแบบข้อมูลเชิงลอจิคอล (Logical Form) เป็นการนิยามด้วย ADT 2. รูปแบบข้อมูลเชิงฟิสิคัล (Psysical Form) เป็นการนำ ADT มาใช้

ประสิทธิภาพของอัลกอริทึม (Algorithm Efficiency)
ประเด็นที่ใช้วัดประสิทธิภาพ [3]p.58

1. เวลาที่ใช้ประมวลผล (Running Time)

2. หน่วยความจำที่ใช้ (Memory Requirement)

3. เวลาที่ใช้แปลโปรแกรม (Compile Time)

4. เวลาที่ใช้ติดต่อสื่อสาร (Communication Time)
ปัจจัยที่ส่งผลต่อความเร็วในการประมวลผล

1. ความเร็วของเครื่องคอมพิวเตอร์ (CPU, Main Board)

2. อัลกอริทึมที่ออกแบบเพื่อใช้งาน

3. ประสิทธิภาพของตัวแปลภาษา

4. ชุดคำสั่งที่สั่งประมวลผลเครื่องคอมพิวเตอร์

5. ขนาดของหน่วยความจำในเครื่องคอมพิวเตอร์

6. ขนาดของข้อมูลนำเข้า และผลลัพธ์จากการประมวลผล
- การวัดประสิทธิภาพของอัลกอริทึม (Efficiency Algorihm)
คือ วัดจากพื้นที่ทำงาน และเวลา แต่กับคอมพิวเตอร์ในปัจจุบันที่มีศักยภาพสูง การวัดประสิทธิภาพจากเวลาอาจไม่เห็นความแตกต่าง
- การวิเคราะห์บิ๊กโอ (Big-O Analysis)
คือ การวัดประสิทธิภาพของอัลกอริทึมจากความเร็วในการทำงาน โดยพิจารณาไปที่จำนวนรอบ และเวลา
ปัจจุบันมีการเปลี่ยนจาก f() มาเป็น Big-O notaion เพื่อใช้ Big-O วัดประสิทธิภาพของอัลกอริทึม
- ขั้นตอนการเปลี่ยน f() เป็น Big-O Notation [4]p.23
1. ปรับฟังก์ชันให้อยู่ในรูปสัมประสิทธิ์อย่างง่าย คือตัดตัวประกอบออก ให้เหลือเพียงค่าของโพลิโนเมียน (คือ n ยกกำลัง)
f(n) = n( (n + 1) / 2 )
= ((1/2)(n ^ 2)) + (1/2(n))
= (n ^ 2) + n
2. ตัดค่าของตัวประกอบออก
= n ^ 2
3. นำฟังก์ชันมาตรฐานมาเขียนในรูปของ Big-O Notation
O(f(n)) = O(n ^ 2)
ความหมายของลอการิทึม
- ลอการิทึม (อังกฤษ: logarithm) เป็นการดำเนินการทางคณิตศาสตร์ที่เป็นฟังก์ชันผกผันของฟังก์ชันเลขชี้กำลัง
- ค่าลอการิทึมของจำนวนหนึ่งโดยกำหนดฐานไว้ให้ จะมีค่าเทียบเท่ากับ การเอาฐานมายกกำลังค่าลอการิทึม ซึ่งจะให้คำตอบเป็นจำนวนนั้น

ลูปแบบเพิ่ม 2 เท่า
for(i=1;i<1000;i*=2){ echo i; }
เช่น 1 2 4 8 16 32 64

ลูปแบบลด 2 เท่า
for(i=1;i<1000;i/=2){ echo i; }
เช่น 1000 500 250 125 62.5 31.25
- ต.ย.1 จงหาผลบวกของการบวกจำนวนที่เริ่มต้นตั้งแต่ 1 - 10
ฟังก์ชัน คือ f(n) = n( (n + 1) / 2 )
= ((1/2)(n ^ 2)) + (1/2(n))
= (n ^ 2) + n
= n ^ 2
O(f(n)) = O(n ^ 2) - ต.ย.2 จงแปลง f(n) = a*n^k + a*n^k-1 + .. a*n^0 เป็น Big-O Notation
ฟังก์ชัน คือ f(n) = a*n^k + a*n^k-1 + .. a*n^0
= n^k + n^k-1 + .. n^0 (ปรับให้อยู่ในรูปสัมประสิทธิ์อย่างง่าย)
= n^k (ตัดค่าของตัวประกอบออก)
O(f(n)) = O(n ^ k) (เขียนในรูปของ Big-O Notation) - ต.ย.3 จงแปลง f(n) = 4n + 7 เป็น Big-O Notation [6]p.50
ฟังก์ชัน คือ f(n) = 4n + 7
= n + 7 (ปรับให้อยู่ในรูปสัมประสิทธิ์อย่างง่าย)
= n (ตัดค่าของตัวประกอบออก)
O(f(n)) = O(n) (เขียนในรูปของ Big-O Notation) - ต.ย.4 จงแปลง f(n) = 1009 เป็น Big-O Notation [6]p.51
ฟังก์ชัน คือ f(n) = 1009
= 1009 (ปรับให้อยู่ในรูปสัมประสิทธิ์อย่างง่าย)
= 1 (ตัดค่าของตัวประกอบออก)
O(f(n)) = O(1) (เขียนในรูปของ Big-O Notation)
ดร.บุญญฤทธิ์  อุยยานนวาระ

เปรียบเทียมประสิทธิภาพของ Big-O กับความเร็วของยวดยาน ดังนี้
+ O(1) เหมือนเครื่องว๊าบ หรือเครื่องย้ายมวลสาร คือ ไกลแค่ไหนไม่เกี่ยว 
+ O(log n) เหมือนเครื่องบินโดยสาร 
+ O(n) - เหมือนรถฟอร์มูล่าวัน ระยะทางไกลขึ้น ก็ขับนานขึ้น
+ O(n log n) - เหมือนรถยนตทั่วไป ยิ่งไกลยิ่งช้า
+ O(n^2) - เหมือนมอร์เตอร์ไซด์ 
+ O(n^3) - เหมือนจักรยาน 
+ O(2^n) - เหมือนคนเดิน


การทำซ้ำ หรือลูป มีหลายแบบ
- ลูปแบบเชิงเส้น (Linear Loops)
- ลูปแบบลอการิธมิค (Logarithmic Loops)
- ลูปแบบซ้อน (Nested Loops)

ลูปแบบเชิงเส้น (Linear Loops) [3]p.59 f(n) = n
for (i=0; i< n; i++)
application code f(n) = n / 2
for (i=0; i< n; i+=2)
application code ลูปแบบลอการิทึม (Logarithmic Loops) f(n) = logn
for (i=0; i< n; i*=2)
application code f(n) = log2n
for (i=0; i< n; i/=2)
application code ลูปแบบซ้อน (Nest Loops) ลูปแบบซ้อนชนิดกำลังสอง (Quadratic) f(n) = n^2
for (i=0; i< n; i++)
for (j=0; j< n; j++)
application code ลูปแบบซ้อนชนิดลอการิทึมเชิงเส้น (Linear Logarithmic) f(n) = nlogn
for (i=0; i< n; i++)
for (j=0; j< n; j*=2)
application code ลูปแบบซ้อนกำลังสองชนิดขึ้นต่อกัน (Dependent Quadratic) f(n) = n( (n + 1) / 2 )
for (i=0; i< n; i++)
for (j=0; j< i; j++)
application code

อาร์เรย์ (Array)
คือ ชุดของข้อมูลในชื่อเดียวกันที่มีได้หลายสมาชิก โดยสมาชิกถูกจัดเรียงเป็นลำดับ และมีรูปแบบเป็นแบบใดแบบหนึ่ง
คือ การรวมกลุ่มของตัวแปรที่สามารถใช้ตัวแปรชื่อเดียวกันแทนข้อมูลสมาชิกได้หลาย ๆ ตัวในคราวเดียวกัน ด้วยการใช้เลขดรรชนี (Index) หรือซับสคริปต์ (Subscript) เป็นตัวอ้างอิงตำแหน่งสมาชิกบนแถวลำดับนั้น ๆ [3]p.80
- อาร์เรย์หนึ่งมิติ (One Dimension Array)
รูปแบบของอาร์เรย์ คือ arrayname[L:U]
arrayname คือ ชื่อของตัวแปรอาร์เรย์ เช่น x[5]
L คือ ขอบเขตล่างสุด (Lower Bound)
U คือ ขอบเขตบนสุด (Upper Bound)
จำนวนสมาชิก = U - L + 1 - อาร์เรย์สองมิติ (Two Dimension Array)
จำนวนสมาชิก = (U1 - L1 + 1) * (U2 - L2 + 1)
ตัวอย่างอารย์เรย์ ภาษาเบสิก เช่น Dim x(7, 24) As Byte
ตัวอย่างอารย์เรย์ ภาษาซี เช่น int a[][] = new int[4][3];
ตัวแรกมักหมายถึง แถว (rows) ตัวที่สองหมายถึง หลัก (columns) - เมทริกซ์ คล้ายกับอาร์เรย์ 2 มิติ - ตำแหน่งในหน่วยความจำ
B คือ ตำแหน่ง หรือแอดเดรสเริ่มต้น (Base Address)
w คือ จำนวนช่องของหน่วยความจำที่จัดเก็บข้อมูลต่อหนึ่งสมาชิก
ตำแหน่งในหน่วยความจำ LOC( a[i] ) คือ B + w (i - L)
อาร์เรย์สามมิติ
http://msdn.microsoft.com

เรคอร์ด (Record)
ระเบียนข้อมูล หรือเรคอร์ด


ตารางข้อมูลในฐานข้อมูล NorthWind ประกอบด้วย 8 ตาราง คือ Categories, Customers, Shippers, Products, Orders, Order Details, Employees, Suppliers แบบฝึกหัด : จงเขียนความสัมพันธ์ระหว่างตาราง


ลิงค์ลิสต์ (Linked List) [3]p.101
ลิสต์ (Lists) หรือรายการ ถือเป็นการจัดเก็บข้อมูลชนิดหนึ่ง ซึ่งข้อมูลเชื่อมต่อกันแบบเชิงเส้น แต่ละข้อมูลมักเรียกว่า อีลิเมนต์ (Element) หรือสมาชิก (Member) โดยแบ่งโดยพื้นฐานได้ 2 แบบคือแบบทั่วไป (General) และแบบจำกัด (Restricted) ซึ่งแนวคิดของลิงค์ลิสต์จะกำหนดให้แต่ละสมาชิกจะประกอบด้วย ข้อมูล (Data) และลิงก์ (Link) โดยข้อมูลอาจประกอบด้วยหลายฟิลด์ก็ได้
การดำเนินงานพื้นฐานของลิสต์ (Basic Operations of List)
1. การแทรก (Insertion)
2. การลบ (Deletion)
3. การปรับปรุง (Updation)
4. การท่องเข้าไปในลิสต์ (Traversal)
ตัวชี้ข้อมูลด้วยภาษาปาสคาล [2]p.220
Binary Tree 
type
nodeptr = ^trnode;
trnode = record
data : integer;
leftptr : nodeptr;
rightptr : nodeptr;
end;

ตัวชี้ข้อมูลด้วยภาษาซี [3]p.193
Abstract Data Type ของ คิว 
typedef struct node {
void* dataptr;
struct node* next;
QUEUE_NODE;
typedef struct {
QUEUE_NODE* front;
QUEUE_NODE* rear;
int count;
QUEUE;
QUEUE* createQueue (void);
bool enqueue (QUEUE* q, void* itemptr);
สร้างคิว [2]p.221
var root : nodeptr;
begin
maket(root);

procedure maket(var t:nodeptr);
begin
new(t);
t^.data := 123;
t^.leftptr := nil;
t^.rightptr := nil;
end;
สร้างคิว
QUEUE* createQueue (void) {
QUEUE* q;
q = (QUEUE*) malloc (sizeof (QUEUE));
if (q) {
q->front = NULL; // node ชี้ตัวแรก
q->rear = NULL; // node ชี้ตัวสุดท้าย
q->count = 0;
}
}
เพิ่มข้อมูลในคิว [2]p.224
new(n);
inserted := false;
o := t;
while not inserted do begin
if num <= o^.data then
if o^.leftptr <> nil then
o := o^.leftptr;
else begin
o^.leftptr := n;
inserted := true;
end
else
if o^.rightptr <> nil then
o := o^.rightptr;
else begin
o^.rightptr := n;
inserted := true;
end;
end;
n^.data := num;
n^.leftptr := nil;
n^.rightptr := nil;
เพิ่มข้อมูลในคิว 
bool enqueue (QUEUE* q, void* itemptr) {
QUEUE_NODE* newptr;
if (!(newptr = (QUEUE*) malloc (sizeof(QUEUE))))
return false;
newptr->dataptr = itemptr;
newptr->next = NULL;
if (q->count == 0)
q->front = newptr;
else
q->rear->next = newptr;
(q->count)++;
q->rear = newptr;
return true;
}










----By FaceBook----