arrow_backกลับไปที่บันทึกภาคสนาม
OFFENSIVE เผยแพร่แล้ว 29 Jul 2026

Big O Notation: What A-Level CS Actually Expects

การแยกวิเคราะห์ Big O notation สำหรับ A-level computer science พร้อมตัวอย่างที่ได้รับการแก้ไขและเคล็ดลับสไตล์สอบ

Big O notation ปรากฏในทุกข้อกำหนด A-level computer science หลัก (AQA, OCR, Edexcel) และมันทำให้นักเรียนจำนวนมากติดขัดไม่ใช่เพราะคณิตศาสตร์ยาก แต่เพราะพวกเขาไม่เคยเห็นมันเชื่อมต่อกับโค้ดที่แท้จริง นี่คือการอธิบายปฏิบัติสิ่งที่คุณต้องรู้และวิธีตอบคำถามสอบเกี่ยวกับมันโดยไม่พูดลอยๆ

Big O วัดอะไรจริงๆ

Big O อธิบายวิธีการที่เวลาในการทำงาน (หรือการใช้หน่วยความจำ) ของอัลกอริทึมเติบโตตามขนาดของอินพุต โดยปกติเรียกว่า n เมื่อมันใหญ่ขึ้น มันไม่ได้เป็นการวัดที่หยุดนาฬิกาเป็นวินาที มันเป็นวิธีการอธิบายอัตราการเติบโตเพื่อให้คุณสามารถเปรียบเทียบอัลกอริทึมได้โดยไม่ขึ้นกับฮาร์ดแวร์

เมื่อคุณเขียน O(n) คุณกำลังพูดว่า: หากฉันเพิ่มอินพุตเป็นสองเท่า งานจะเพิ่มขึ้นประมาณสองเท่า O(n²) หมายความว่าการเพิ่มอินพุตเป็นสองเท่าจะทำให้งานเพิ่มขึ้นประมาณสี่เท่า ความสัมพันธ์นั้นคือสิ่งที่ผู้ทดสอบต้องการให้คุณระบุ ไม่ใช่การนับการดำเนินการที่แน่นอน

ความซับซ้อนที่คุณต้องรู้ให้ดี

สำหรับ A-level สิ่งเหล่านี้คือสิ่งที่ปรากฏซ้ำแล้วซ้ำอีก:

  • O(1) – เวลาคงที่ การเข้าถึงองค์ประกอบอาร์เรย์ตามดัชนี: arr[5] ไม่สำคัญว่าอาร์เรย์จะใหญ่แค่ไหน
  • O(log n) – ลอการิทึม การค้นหาแบบไบนารีในรายการที่จัดเรียง แต่ละขั้นตอนลดพื้นที่การค้นหาที่เหลือลงครึ่งหนึ่ง
  • O(n) – เชิงเส้น วนซ้ำเดี่ยวผ่านรายการ เช่นการค้นหาเชิงเส้นที่ตรวจสอบแต่ละรายการหนึ่งครั้ง
  • O(n log n) – linearithmic Merge sort และ quicksort (average case) อยู่ที่นี่
  • O(n²) – กำลังสอง วนซ้ำแบบซ้อนกันบนข้อมูลเดียวกัน ซึ่งเป็นสิ่งที่ bubble sort, insertion sort และ selection sort ทำ
  • O(2ⁿ) – เลขชี้กำลัง Fibonacci แบบวนซ้ำไร้เดียวกรรมโดยไม่ใช้ memoisation มันยุ่งเหยิงอย่างรวดเร็ว

คุณควรสามารถดูรหัสเทียมและบอกได้ว่ามันคืออันไหนในสิ่งเหล่านี้เมื่อมองเห็นเพราะนั่นคือสิ่งที่ได้รับการทดสอบส่วนใหญ่

การอ่านโค้ดสำหรับความซับซ้อน

วิธีการที่ใช้ได้ทุกครั้ง: นับลูปและดูว่าพวกมันเกี่ยวข้องกับ n อย่างไร

# O(n) - one loop, one pass
for i in range(n):
    print(i)

# O(n^2) - nested loop, both tied to n
for i in range(n):
    for j in range(n):
        print(i, j)

# O(log n) - the search space halves each iteration
low, high = 0, n - 1
while low <= high:
    mid = (low + high) // 2
    if target == arr[mid]:
        break
    elif target < arr[mid]:
        high = mid - 1
    else:
        low = mid + 1

ลูปแบบซ้อนที่ช่วงของลูปด้านในขึ้นอยู่กับ n ยังคงเป็น O(n²) แม้ว่ามันจะดูแตกต่างกันเล็กน้อย (เช่น for j in range(i) แทนที่จะเป็น for j in range(n) — มันยังคงเป็นกำลังสองโดยรวม มีเพียงความแตกต่างของปัจจัยค่าคงที่)

ระวังลูปที่ไม่ขึ้นกับ n เลย ลูปที่ทำงาน 10 ครั้งเสมอโดยไม่คำนึงถึงขนาดอินพุตคือ O(1) แม้ว่าจะมีลูปอยู่ก็ตาม ผู้ทดสอบชอบอ่อนไปด้วยสิ่งนี้

อัลกอริทึมการเรียงลำดับทั่วไปและ Big O ของพวกมัน

นี่คือหัวข้อสอบโปรดเพราะมันรวมข้อกำหนดสองข้อพร้อมกัน: อัลกอริทึมการเรียงลำดับและความซับซ้อน

AlgorithmBest caseWorst case
Bubble sortO(n)O(n²)
Insertion sortO(n)O(n²)
Merge sortO(n log n)O(n log n)
Binary searchO(1)O(log n)
Linear searchO(1)O(n)

ความสม่ำเสมอของ Merge sort (ความซับซ้อนเดียวกันที่ดีที่สุดและกรณีที่เลวร้ายที่สุด) คุ้มค่าที่จะกล่าวถึงอย่างชัดแจ้งหากคำถามถามว่าเหตุใดคุณจึงจะเลือกมันแทน bubble sort สำหรับชุดข้อมูลขนาดใหญ่ กรณีที่ดีที่สุดของ Bubble sort O(n) ใช้ได้เฉพาะกับการเพิ่มประสิทธิ์การออกจากเร็วเมื่อไม่มีสวิตช์เกิดขึ้นในการผ่าน — กล่าวถึงรายละเอียดนั้นหากคุณนำมันขึ้นมา เนื่องจากบอร์ดสอบบางแห่งคาดหวังมัน

ที่ที่นักเรียนสูญเสียคะแนน

รายหนึ่งที่ใหญ่ที่สุด: การเขียน

เขียนด้วยความช่วยเหลือของ AI ตรวจสอบและเผยแพร่โดย Michal Pilch (CISSP), Korra Studio

พร้อมที่จะไปต่อหรือไม่

นี่คือบันทึกหนึ่งจากฐานความรู้ของ Korra Studio — แพลตฟอร์มจับคู่หัวข้อแต่ละหัวข้อกับการฝึกสอนแบบ 1-to-1

เริ่มใช้งานฟรีarrow_forward