สัญกรณ์ขนาดใหญ่ในโครงสร้างข้อมูล: ทุกสิ่งที่ต้องรู้

เผยแพร่แล้ว: 2022-07-20

Big O Notation ในโครงสร้างข้อมูล ใช้สำหรับกำหนดประสิทธิภาพของอัลกอริธึม ระยะเวลาที่ใช้ในการเรียกใช้ฟังก์ชันด้วยการเติบโตของอินพุต และอัตราส่วนของฟังก์ชันได้ดีเพียงใด การวัดประสิทธิภาพนี้สามารถแบ่งออกเป็นสองส่วน ได้แก่ ความซับซ้อนของพื้นที่และความซับซ้อนของเวลา

สัญกรณ์ Big O หมายถึงสัญกรณ์ทางคณิตศาสตร์ที่ทำหน้าที่เป็นปัจจัยจำกัดของฟังก์ชันใดๆ เมื่ออาร์กิวเมนต์มีแนวโน้มที่จะเอนเอียงไปทางค่าเฉพาะหรืออนันต์ มันอยู่ในหมวดหมู่ของสัญกรณ์คณิตศาสตร์ที่ Edmund Landau, Paul Bachmann และอื่น ๆ คิดค้น ดังนั้นจึงเรียกรวมกันว่าสัญกรณ์ Bachmann–Landau หรือสัญกรณ์ asymptotic

ตามการหักทางคณิตศาสตร์ ฟังก์ชันสองฟังก์ชัน f(n) และ g(n) ถูกกำหนดบนชุดของจำนวนบวกหรือจำนวนจริงที่ไม่ผูกมัด ในที่นี้ g(n) เป็นค่าบวกอย่างเคร่งครัดสำหรับทุกค่าขนาดใหญ่ของ n สามารถเขียนได้ดังนี้

f(n) = O(g(n)) โดยที่ n มีแนวโน้มเป็นอนันต์ (n → ∞)

อย่างไรก็ตาม ในที่นี้ การสมมติของ n ถึงอนันต์ไม่ได้ถูกกำหนดไว้โดยเฉพาะ และนิพจน์ข้างต้นสามารถเขียนเป็น:

ฉ(n) = O(ก.(n))

ในที่นี้ f และ g เป็นฟังก์ชันที่จำเป็นซึ่งเริ่มต้นจากจำนวนเต็มบวกไปจนถึงจำนวนจริงที่ไม่ใช่ค่าลบ

ดังนั้น ค่า n จำนวนมากจึงแสดงโดย Big O asymptotic

สารบัญ

คุณสมบัติของ สัญลักษณ์ Big O ในโครงสร้างข้อมูล

อัลกอริทึม Big O ในโครงสร้างข้อมูล มีคุณสมบัติที่จำเป็นค่อนข้างน้อย คุณสมบัติที่สำคัญดังกล่าวของ Big O Notation มีดังนี้:

  • ฟังก์ชันการรวม:
    ถ้า f(n) = f 1 (n) + f 2 (n) + — + f m (n) และ f i (n)≤ f i +1(n) ∀ i=1, 2,–, m,
    แล้ว O(f(n)) = O(สูงสุด(f1(n), f2(n), –, fm(n)))
  • ฟังก์ชันลอการิทึม:
    ถ้า f(n) = โลแกน และ g(n)=logbn
    แล้ว O(f(n))=O(g(n))
  • การคูณคงที่:
    ถ้า f(n) = cg(n) ดังนั้น O(f(n)) = O(g(n)) โดยที่ c เป็นค่าคงที่ที่ไม่ใช่ศูนย์
  • ฟังก์ชันพหุนาม:
    ถ้า f(n) = a0 + a1.n + a2.n2 + — + am.nm,
    แล้ว O(f(n)) = O(นาโนเมตร)

เรียนรู้ หลักสูตรการพัฒนาซอฟต์แวร์ ออนไลน์จากมหาวิทยาลัยชั้นนำของโลก รับโปรแกรม Executive PG โปรแกรมประกาศนียบัตรขั้นสูง หรือโปรแกรมปริญญาโท เพื่อติดตามอาชีพของคุณอย่างรวดเร็ว

สำรวจหลักสูตรวิศวกรรมซอฟต์แวร์ยอดนิยมของเรา

เอสแอล. ไม่ โปรแกรมพัฒนาซอฟต์แวร์
1 วิทยาศาสตรมหาบัณฑิตสาขาวิทยาการคอมพิวเตอร์จาก LJMU & IIITB โปรแกรมใบรับรองความปลอดภัยทางไซเบอร์ของ Caltech CTME
2 Bootcamp การพัฒนาเต็มกอง โปรแกรม PG ใน Blockchain
3 Executive Post Graduate Program in Software Development - Specialization in DevOps ดูหลักสูตรวิศวกรรมซอฟต์แวร์ทั้งหมด

ที่นี่ ในขณะที่พูดถึง Big O ทุกฟังก์ชันบันทึกเดียวก็เพิ่มขึ้นเช่นเดียวกัน

ความสำคัญของสัญกรณ์ Big O ในการวิเคราะห์รันไทม์ของอัลกอริทึม

ความซับซ้อนของเวลาทำงานที่แย่ที่สุดของอัลกอริธึมถูกใช้เพื่อเปรียบเทียบและคำนวณ โดยเฉพาะอย่างยิ่งในกรณีของการวิเคราะห์ประสิทธิภาพของอัลกอริธึม ลำดับของ O(1) ซึ่งแสดงเป็น Constant Running Time เป็นเวลาทำงานที่เร็วที่สุดของอัลกอริทึม – เวลาที่อัลกอริทึมใช้จะเท่ากันสำหรับขนาดอินพุตต่างๆ สิ่งสำคัญคือต้องสังเกตว่ารันไทม์ในอุดมคติของอัลกอริธึมคือเวลารันคงที่ ซึ่งทำได้ไม่บ่อยนัก เนื่องจากรันไทม์ของอัลกอริธึมขึ้นอยู่กับขนาดอินพุตของ n

ตัวอย่างเช่น:

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

  • n = 20
    บันทึก (20) = 2.996;
    20 = 20;
    20 บันทึก (20) = 59.9;
    20 2 = 400;
    2 20 = 1084576;
    20! = 2.432902 + 18 18 ;
  • n = 10
    บันทึก (10) = 1;
    10 = 10;
    10 บันทึก (10) = 10;
    10 2 = 100;
    2 10 = 1024;
    10! = 3628800;

ประสิทธิภาพรันไทม์ของอัลกอริธึมคำนวณในทำนองเดียวกัน

ต่อไปนี้คือตัวอย่างอัลกอริทึมอื่นๆ ของการวิเคราะห์รันไทม์ –

  • เมื่อพูดถึง Linear Search ความซับซ้อนของรันไทม์คือ O(n)
  • ความซับซ้อนของรันไทม์คือ O(log n) สำหรับการค้นหาแบบไบนารี
  • สำหรับ Selection Sort, Bubble Sort, Bucket Sort, Insertion Sort ความซับซ้อนของรันไทม์คือ O(n^c)
  • เมื่อพูดถึงอัลกอริธึมเอ็กซ์โปเนนเชียล เช่น หอคอยฮานอย ความซับซ้อนของรันไทม์คือ O(c^n)
  • สำหรับ Merge SortSort และ Heap Sort ความซับซ้อนของรันไทม์คือ O(n log n)

Big O วิเคราะห์ความซับซ้อนของอวกาศอย่างไร?

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

สำหรับการกำหนดความซับซ้อนของพื้นที่ของอัลกอริทึม เราต้องปฏิบัติตามสองภารกิจนี้ –

ภารกิจที่ 1: การนำโปรแกรมไปใช้สำหรับอัลกอริธึมเฉพาะเป็นสิ่งสำคัญ

ภารกิจที่ 2: จำเป็นต้องทราบขนาดของอินพุต n เพื่อกำหนดหน่วยความจำที่แต่ละรายการจะเก็บไว้

งานสำคัญทั้งสองนี้จำเป็นต้องทำให้สำเร็จก่อนที่จะคำนวณความซับซ้อนของพื้นที่สำหรับอัลกอริทึม

ตัวอย่างของอัลกอริทึมความซับซ้อนของอวกาศ

มีตัวอย่างมากมายของอัลกอริธึมที่มีความซับซ้อนของพื้นที่ ซึ่งบางส่วนได้รับการกล่าวถึงด้านล่างเพื่อความเข้าใจที่ดีขึ้นของอัลกอริทึมประเภทนี้:

  • สำหรับการเรียงลำดับแบบบับเบิ้ล, การค้นหาเชิงเส้น, การเรียงลำดับการเลือก, การเรียงลำดับการแทรก, การเรียงลำดับฮีป และการค้นหาไบนารี ความซับซ้อนของช่องว่างคือ O(1 )
  • ความซับซ้อนของพื้นที่คือ O(n+k) เมื่อพูดถึง radix sort
  • ความซับซ้อนของพื้นที่คือ O(n) สำหรับ SortSort อย่างรวดเร็ว
  • ความซับซ้อนของพื้นที่คือ O(log n) สำหรับการเรียงลำดับการผสาน

ตัวอย่างสัญลักษณ์ Big O ใน C

เป็นความจริงที่ว่าสัญกรณ์ Big O ถูกใช้เป็นหลักในวิทยาการคอมพิวเตอร์เพื่อกำหนดความซับซ้อนหรือประสิทธิภาพของอัลกอริธึม สัญกรณ์นี้ช่วยให้เราสามารถจำแนกพฤติกรรมของอัลกอริธึมตามการเติบโตของพื้นที่หน่วยความจำหรือข้อกำหนดด้านเวลาดำเนินการเมื่อขอบเขตของข้อมูลที่ป้อนเข้ามีขนาดใหญ่ ไม่ได้ออกแบบมาเพื่อคาดการณ์การใช้หน่วยความจำจริงหรือเวลาดำเนินการ แต่สำหรับการเปรียบเทียบอัลกอริธึมและเลือกสิ่งที่ดีที่สุดสำหรับงาน ไม่ใช่เฉพาะภาษา แต่ยังใช้ใน C.

ด้านล่างนี้ คุณจะพบอัลกอริธึมการเรียงลำดับการเลือกในภาษา C ซึ่งมีการคำนวณความซับซ้อนของตัวพิมพ์ใหญ่ที่สุด (สัญลักษณ์ Big O) ของอัลกอริทึม:-

สำหรับ(int i=0; i<n; i++)

{

int นาที = ผม;

สำหรับ(int j=i; j<n; j++)

{

if(array[j]<array[นาที])

มิน=เจ;

}

int temp = อาร์เรย์[i];

อาร์เรย์[i] = อาร์เรย์[นาที];

อาร์เรย์[นาที] = อุณหภูมิ;

}

ในการวิเคราะห์อัลกอริทึม:

  • สามารถระบุได้แล้วว่าช่วงของ for outer loop คือ i < n ซึ่งระบุว่าลำดับของลูปคือ O(n)
  • ต่อไป เราสามารถระบุได้ว่ามันเป็น O(n) ด้วย j < n สำหรับ inner for loop
  • ค่าคงที่จะถูกละเว้น แม้ว่าจะพบประสิทธิภาพเฉลี่ย n/2 สำหรับค่าคงที่ c ดังนั้น ลำดับคือ O(n)
  • หลังจากการคูณลำดับของวงในและวงนอก ความซับซ้อนของรันไทม์ที่ได้คือ O(n^2)

อัลกอริธึมอื่นๆ ใน C สามารถใช้งานได้ง่าย โดยสามารถวิเคราะห์และกำหนดความซับซ้อนได้ง่ายเช่นเดียวกัน

การใช้สัญกรณ์บิ๊กโอ

มีสองส่วนหลักที่ใช้ Big O Notation:-

  • คณิตศาสตร์ : สัญกรณ์ Big O ค่อนข้างใช้กันทั่วไปในด้านคณิตศาสตร์เพื่ออธิบายว่าอนุกรมที่มีขอบเขตจำกัดนั้นใกล้เคียงกับฟังก์ชันอย่างไร โดยเฉพาะอย่างยิ่งเมื่อพูดถึงกรณีของการขยายแบบไม่มีซีมโทติกหรืออนุกรมเทย์เลอร์ที่ถูกตัดทอน
  • วิทยาการคอมพิวเตอร์: เป็นที่ทราบกันดีอยู่แล้วว่าสัญกรณ์ Big O ส่วนใหญ่ใช้ในด้านวิทยาการคอมพิวเตอร์เนื่องจากมีประโยชน์ในการวิเคราะห์อัลกอริธึม

อย่างไรก็ตาม ในทั้งสองแอปพลิเคชัน ฟังก์ชัน g ( x ) ที่ปรากฏภายใน O (·) มักถูกเลือกให้ใช้งานได้ง่ายที่สุด หากไม่ระบุเงื่อนไขลำดับที่ต่ำกว่าและปัจจัยคงที่

มีการใช้สัญกรณ์นี้อีกสองแบบที่ใกล้เคียงกันอย่างเป็นทางการแต่ค่อนข้างแตกต่างกัน พวกเขาคือ:-

  • อนันต์ asymptotics
  • การแสดงอาการไม่สิ้นสุด

อย่างไรก็ตาม ความแตกต่างนี้ไม่ได้อยู่ในหลักการ ในการใช้งานเฉพาะกับคำจำกัดความอย่างเป็นทางการสำหรับ "บิ๊กโอ" เหมือนกันทุกประการสำหรับทั้งสองกรณี ข้อแตกต่างเพียงอย่างเดียวคือขีดจำกัดสำหรับอาร์กิวเมนต์ของฟังก์ชัน

อ่านบทความยอดนิยมของเราเกี่ยวกับการพัฒนาซอฟต์แวร์

วิธีการใช้ Data Abstraction ใน Java? Inner Class ใน Java คืออะไร? ตัวระบุ Java: คำจำกัดความ ไวยากรณ์ และตัวอย่าง
ทำความเข้าใจการห่อหุ้มใน OOPS ด้วยตัวอย่าง อาร์กิวเมนต์บรรทัดคำสั่งใน C อธิบาย คุณสมบัติและลักษณะเด่น 10 อันดับแรกของคลาวด์คอมพิวติ้งในปี 2022
ความหลากหลายใน Java: แนวคิด ประเภท ลักษณะและตัวอย่าง แพ็คเกจใน Java และวิธีใช้งาน บทช่วยสอน Git สำหรับผู้เริ่มต้น: เรียนรู้ Git ตั้งแต่เริ่มต้น

บทสรุป

โดยสรุป เราสามารถพูดได้ว่า Big Data มีบทบาทสำคัญในโครงสร้างข้อมูล และการมีความรู้เชิงลึกเกี่ยวกับ Big O notation เป็นทักษะที่ยอดเยี่ยม มีความต้องการสูงในภาคงานและอาจเป็นทางเลือกที่ดีสำหรับเส้นทางอาชีพ โปรแกรมใบรับรองขั้นสูง ของ upGrad ใน Big Data จะช่วยให้คุณมีเลเวอเรจที่คุณต้องการเพื่อส่งเสริมอาชีพของคุณ ซึ่งจะแนะนำทักษะระดับมืออาชีพชั้นนำ เช่น การประมวลผลข้อมูลด้วย PySpark, Data Warehousing, MapReduce, การประมวลผลข้อมูลขนาดใหญ่บน AWS Cloud, การประมวลผลแบบเรียลไทม์ เป็นต้น

Big O Notation ผูกหน้าที่อย่างไร?

สัญกรณ์ Big O ใช้สำหรับกำหนดขอบเขตบนของอัลกอริทึม ดังนั้นจึงเชื่อมโยงฟังก์ชันจากด้านบน

บิ๊กโอจะทวีคูณได้อย่างไร?

Big O สามารถคูณได้หากความซับซ้อนของเวลาถูกคูณ

Big O กับ Small O ต่างกันอย่างไร?

Big O นั้นแน่นแบบไม่แสดงอาการ ในขณะที่ขอบเขตบนของ Small O นั้นไม่แน่นแบบไม่มีอาการ