สัญกรณ์โอใหญ่

จาก testwiki
ไปยังการนำทาง ไปยังการค้นหา

แม่แบบ:ต้องการอ้างอิง

ตัวอย่างของสัญกรณ์โอใหญ่ โดย f(x) ∈ O(g(x)) ซึ่งหมายความว่ามี c > 0 (เช่น c = 1) และ x0 (เช่น x0 = 5) ที่ทำให้ f(x) < cg(x) เมื่อ x > x0

ในวิชาทฤษฎีความซับซ้อนและคณิตศาสตร์ สัญกรณ์โอใหญ่ (แม่แบบ:Langx) เป็นสัญกรณ์คณิตศาสตร์ที่ใช้บรรยายพฤติกรรมเชิงเส้นกำกับของฟังก์ชัน โดยระบุเป็นขนาด (magnitude) ของฟังก์ชันในพจน์ของฟังก์ชันอื่นที่โดยทั่วไปซับซ้อนน้อยกว่า สัญกรณ์โอใหญ่เป็นหนึ่งในสัญกรณ์เชิงเส้นกำกับ หรืออาจเรียกว่า สัญกรณ์ของลันเดา หรือ สัญกรณ์ของบัคแมนน์-ลันเดา (ตั้งชื่อตามเอ็ดมุนด์ ลานเดาและเพาล์ บาคมันน์) สัญกรณ์โอใหญ่ใช้ในการเขียนเพื่อประมาณพจน์ในคณิตศาสตร์ ประยุกต์ใช้ในวิทยาการคอมพิวเตอร์เพื่อใช้อธิบายความเร็วประมาณในการทำงานของโปรแกรมในกรณีต้องประมวลผลข้อมูลจำนวนมาก และใช้เพื่ออธิบายประสิทธิภาพของขั้นตอนวิธีหรือโครงสร้างข้อมูลนั้น ๆ

สัญกรณ์โอใหญ่ระบุลักษณะของฟังก์ชันตามอัตราการเติบโต ถึงแม้ฟังก์ชันจะต่างกัน แต่ถ้ามีอัตราการเติบโตเท่ากันก็จะมีสัญกรณ์โอใหญ่เท่ากัน สำหรับสัญกรณ์โอใหญ่แล้ว จะพิจารณาเฉพาะขอบเขตบนของอัตราการเติบโตของฟังก์ชัน อาทิฟังก์ชัน n2+n และ n+4 ล้วนมีอัตราการเติบโตน้อยกว่าหรือเท่ากับ n2 นั่นคืออัตราการเติบโตของฟังก์ชัน n2 เป็นขอบเขตบนของ n2+n และ n+4 จึงอาจกล่าวได้ว่า n2+n และ n+4 เป็นสมาชิกของเซตของฟังก์ชัน O(n2) ในขณะที่สัญกรณ์เชิงเส้นกำกับอื่น พิจารณาขอบเขตอื่น ๆ เช่นสัญกรณ์โอเมกาใหญ่พิจารณาขอบเขตล่างของอัตราการเติบโตของฟังก์ชันแทน

ประวัติ

แนวคิดของสัญกรณ์โอใหญ่ถูกคิดโดยนักทฤษฎีจำนวนที่ชื่อเพาล์ บาคมันน์ (Paul Bachmann) จากงานตีพิมพ์ของเขาที่ชื่อว่า Analytische Zahlentheorie (ทฤษฎีจำนวนวิเคราะห์) ในปี 1894 โดยครั้งนั้นยังไม่ได้ใช้ตัวสัญกรณ์โอใหญ่ สำหรับตัวสัญกรณ์โอใหญ่เองได้รับการใช้อย่างแพร่หลายโดยนักทฤษฎีจำนวนชาวเยอรมัน ที่มีชื่อว่า เอ็ดมุนด์ ลานเดา (Edmund Landau) ชื่อของเขาบางครั้งได้รับการยกย่องให้เป็นชื่อของสัญกรณ์โอใหญ่ว่าเป็น สัญกรณ์ของลานเดา (Landau notation) หรือ สัญกรณ์แบชมาน-ลานเดา (Bachmann-Landau notation) สำหรับตัวสัญกรณ์ที่เขียนเป็นรูปโอใหญ่นั้นได้แนวคิดมาจากคำว่า "order of" ซึ่งเดิมทีนั้นเขียนโดยใช้เป็นโอไมครอนใหญ่

นิยาม

อัตราการเติบโตของฟังก์ชันใด ๆ มีค่าเป็นสัญกรณ์โอใหญ่ของอีกฟังก์ชันหนึ่งแล้ว แสดงว่าอัตราการเติบโตของฟังก์ชันใด ๆ นั้นจะ โตน้อยกว่าหรือเท่ากับ อัตราการเติบโตของฟังก์ชันดังกล่าว ดังนั้นจึงอาจนิยามได้ว่า

ให้ f(n) และ g(n) เป็นฟังก์ชันบนจำนวนจริงใด ๆ แล้ว จะกล่าวว่า
f(n)O(g(n)) เมื่อ n
ก็ต่อเมื่อมีจำนวนจริง c และ n0 ค่าหนึ่งที่ทำให้ |f(n)|c|g(n)| ทุก ๆ nn0

อย่างไรก็ตาม นิยามนี้จำกัดเฉพาะกรณี n เท่านั้น ซึ่งไม่เพียงพอต่อการอธิบายในกรณีที่ na ดังนั้นจึงอาจใช้นิยามในอีกรูปแบบ ในการขยายไปถึงสัญกรณ์โอใหญ่กณิกนันต์ ซึ่งเป็นพิจารณาอัตราการเติบโตของฟังกชันรอบ ๆ จุด a ใด ๆ

ให้ f(x) และ g(x) เป็นฟังก์ชันใด ๆ จะกล่าวว่า
f(x)O(g(x)) ขณะ x เข้าใกล้ a
ก็ต่อเมื่อ limxa|f(x)g(x)|[0,)

การขยายนิยามไปหลายตัวแปร

นิยามทั้งสองรูปแบบสามารถขยายไปหลายตัวแปรได้

ให้ f(a0,a1,,an) และ g(a0,a1,,an) เป็นฟังก์ชันหลายตัวแปรใด ๆ จะกล่าวได้ว่า
f(a0,a1,,an)O(a0,a1,,an)
ก็ต่อเมื่อมีจำนวนจริง c และ n0 ค่าหนึ่งที่ทำให้ |f(a0,a1,,an)|c|g(a0,a1,,an)| ทุก ๆ a0,a1,,ann0

หรือในอีกนิยามที่พิจารณาอัตราการเติบโตของฟังก์ชันรอบ ๆ พิกัด (k0,k1,,kn) ใด ๆ ว่า

f(a0,a1,,an)O(g(a0,a1,,an))
ก็ต่อเมื่อ lima0,a1,,ank0,k1,,kn|f(a0,a1,,an)g(a0,a1,,an)|[0,).

ตัวอย่าง

  • n2+n2n2 ทุกๆ n1 (หาได้จากการแก้อสมการ) เพราะฉะนั้น n2+nO(n2) (c=2,n0=1)
  • n2+42n2 ทุกๆ n2 (หาได้จากการแก้อสมการ) เพราะฉะนั้น n2+4O(n2) (c=2,n0=2)

หรือ

  • limnn2+nn2=1 เพราะฉะนั้น n2+nO(n2)
  • limnn2+4n2=1 เพราะฉะนั้น n2+nO(n2)

การใช้งาน

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

กรณีเส้นกำกับอนันต์

สัญกรณ์โอใหญ่มีประโยชน์ในการใช้วิเคราะห์ขั้นตอนวิธี เพื่อหาประสิทธิภาพของขั้นตอนวิธี ตัวอย่างเช่น สมมติให้เวลา (หรือจำนวนขั้นตอน) ที่ใช้ในการแก้ปัญหาขนาด n มีฟังก์ชันเป็น T(n)=4n22n+2

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

T(n)O(n2)

และกล่าวได้ว่า ขั้นตอนวิธีดังตัวอย่างนี้มีความซับซ้อนเชิงเวลาเป็นอันดับของ n2

กรณีเส้นกำกับกณิกนันต์

สัญกรณ์โอใหญ่ยังใช้เพื่อแสดงพจน์ของค่าคลาดเคลื่อนโดยประมาณในฟังก์ชันทางคณิตศาสตร์ ตัวอย่างเช่น

ex=1+x+x22+O(x3)as x0

หมายความว่า เมื่อ x มีค่าเข้าใกล้ศูนย์ ผลต่างของฟังก์ชัน ex กับ 1+x+x2/2 (หรืออาจกล่าวอีกนัยหนึ่งว่าเป็นความคลาดเคลื่อนของสองฟังก์ชันนี้) จะมีอยู่ในสับเซตของ O(x3) นั่นเอง หรือเขียนเป็นสัญลักษณ์ว่า

|ex(1+x+x22)|O(x3)as x0

คุณสมบัติ

การคูณ

การคูณด้วยค่าคงที่

ให้ k เป็นค่าคงที่ใด ๆ ที่เป็นบวก

O(kg)=O(g)
fO(g)kfO(g)

การซ้อนสัญกรณ์โอใหญ่

f(n)O(g(n))O(f(n))O(g(n))

ให้ h (n) เป็นอีกฟังก์ชันหนึ่ง

O(f(n))O(g(n))O(f(h(n)))O(g(h(n)))

สัญกรณ์โอใหญ่มาตรฐานน้อยสุด

ในบางครั้งสัญกรณ์โอใหญ่อาจมีการครอบคลุมมากเกินไป เช่น O(n2)O(n3) เป็นต้น จึงทำให้สำหรับฟังก์ชันใด ๆ อาจอยู่ในเซตของสัญกรณ์โอใหญ่หลายค่า จึงมีการกำหนดรูปแบบฟังก์ชันอย่างง่าย ให้ตอบในรูปสัญกรณ์โอใหญ่มาตรฐานน้อยสุด กล่าวคือตอบในรูปแบบมาตรฐานที่เล็กที่สุด เรามักจะอนุโลมให้ใช้จากสัญลักษณ์เท่ากับ (=) แทนสัญลักษณ์สมาชิก () เมื่อใช้กับรูปสัญกรณ์โอใหญ่มาตรฐานน้อยสุดนี้ เช่น n2+4=O(n2)

ในทางวิทยาการคอมพิวเตอร์ การทำงานที่มีสัญกรณ์โอใหญ่มาตรฐานน้อยสุดมีขนาดยิ่งเล็กเท่าใด แสดงว่าทำงานได้ยิ่งเร็วเท่านั้น

สัญกรณ์โอใหญ่มาตรฐานเรียงจากขนาดเล็กไปใหญ่ (ขนาดเล็กหมายถึงจะเป็นซับเซตของขนาดที่ใหญ่กว่า) ให้ m เป็นค่าคงที่ใด ๆ ที่มากกว่าศูนย์ และ n เป็นโดเมนของฟังก์ชัน

สัญกรณ์โอใหญ่มาตรฐาน ชื่อฟังก์ชัน หมายเหตุ
O(1) ค่าคงที่ ไม่ใช้ค่าคงที่อื่นในการแสดงสัญกรณ์ เช่นไม่มีการใช้ O (2)
O(logn) ลอการิทึม ลอการิทึมทุกฐานอยู่ในระดับเดียวกัน เพราะเปลี่ยนฐานได้โดยคูณค่าคงที่
O(kn) 0<k<1 เอกซ์โพเนนเชียลฐานเศษส่วนแท้ ยิ่งค่าฐานมากยิ่งใหญ่
O((logn)m) โพลีลอการิทึม ยิ่งเลขชี้กำลังมากระดับยิ่งใหญ่
O(nk),0<k<1 ยกกำลังที่เป็นเศษส่วนแท้ (ติดราก) ยิ่งเลขชี้กำลังมากระดับยิ่งใหญ่
O(n) เชิงเส้น จริง ๆ แล้วเป็นพหุนามรูปแบบหนึ่ง แยกมาเรียกเพราะใช้บ่อย
O(nk),k>1 พหุนาม ยิ่งเลขชี้กำลังมากระดับยิ่งใหญ่
O(kn) k>1 เอกซ์โพเนนเชียล ยิ่งค่าฐานมากยิ่งใหญ่
O(n!) แฟกทอเรียล อาจรวมถึงการเรียงลำดับสับเปลี่ยน (permutation)
O(nn) n ยกกำลัง n มีบางครั้งคนใช้ O (nn) แทน O (n!) แต่ที่จริง O (nn) ใหญ่กว่า O (n!) เล็กน้อย

บางครั้งเราจำเป็นต้องใช้การผสมโดยการคูณเช่น O(nlogn) เกิดจากการคูณระหว่างเชิงเส้นและลอการิทึมย่อมทำได้

สัญกรณ์อื่น

แม่แบบ:โครงส่วน