O ใน Big O คืออะไร


23

Big และ O ในสัญลักษณ์ Big O คืออะไร ฉันอ่านคำจำกัดความแล้วและไม่ได้บอกว่าOออกเสียงว่า 'oh' อย่างไร ตัวอย่างเช่น - ฉันเข้าใจว่าO (n) เป็นความซับซ้อนของอัลกอริทึมเชิงเส้นโดยที่ n อาจเป็นจำนวนการดำเนินการ แต่Oคืออะไร


13
มันเป็นตัวอักษรที่ 15 ของตัวอักษรภาษาอังกฤษ นอกจากนี้ยังเป็นตัวอักษรที่ 15 ในตัวอักษรกรีก
Joel Etherton

1
เพื่อชี้แจง: คุณกำลังมองหาเหตุผลว่าทำไมOเป็นสัญลักษณ์ที่ใช้ (แทน Q หรือ E หรืออย่างอื่น) และมีความหมายอะไรถ้าOมีสัญลักษณ์อื่นมากกว่า?
FrustratedWithFormsDesigner

6
@Joel: จริงๆแล้วมันคือ Omicron และนั่นเป็นเงื่อนงำว่าทำไมจดหมายฉบับนี้จึงถูกเลือก
Jörg W Mittag

คำตอบนี้หักล้าง (อย่างถูกต้องฉันคิดว่า) ทฤษฎี Omicron
Hawkeye Parker

คำตอบ:


31

ดีเดาของฉันจะเป็นคำสั่งที่เกิดขึ้นพร้อมกับวิกิพีเดีย

แก้ไข: (ของฉันเอง (การปรับปรุงใด ๆ ชื่นชม)) แปลจากบทความวิกิพีเดียภาษาเยอรมัน

อักษรตัวใหญ่ O (อันที่จริงเป็นเมืองหลวง omicron ในเวลานั้น) เป็นสัญลักษณ์สำหรับคำสั่งของ (เยอรมัน: "Ordnung von") ถูกใช้ครั้งแรกโดยนักทฤษฎีจำนวนเยอรมัน Paul Bachman ในหนังสือเล่มที่สองของเขาเกี่ยวกับทฤษฎีการวิเคราะห์เชิงตัวเลขปรากฏ 2437 ในสัญกรณ์ที่ได้รับความนิยมเนืองจากการทำงานของเอ๊ดมันด์กุ๊บนักทฤษฎีจำนวนเยอรมันซึ่งเป็นศัพท์ที่เกี่ยวข้องกับวันนี้โดยเฉพาะในศัพท์เยอรมัน


5
แม้ว่ามันอาจจะเป็นกรณีที่นักคณิตศาสตร์หลายคนอ้างถึงเช่นนี้ แต่มันก็ไม่ได้เป็นเช่นนั้น หากคุณอ่านหนังสือทฤษฎีจำนวนตั้งแต่ต้นศตวรรษที่ 20 คุณจะไม่พบคำอธิบายดังกล่าว มันคือสิ่งที่มันเป็นและฉันไม่สามารถอ่านภาษาเยอรมันเพื่อหาว่าสิ่งที่เขาคิดอยู่ในสัญกรณ์
Jonathan Henson

1
@Jonathan: โพสต์อัพเดทแล้ว
back2dos

ดีมาก! ฉันดูในหนังสือทฤษฎีจำนวนทั้งหมดของฉันและฉันไม่สามารถหาคำอธิบายของ O ได้ทุกที่ +1
Jonathan Henson

2
ฉันมักจะออกเสียงว่าเป็นคำสั่งเพียงแค่ว่า O ไม่ได้มีความหมายอะไรมาก
Newtopian

16

"ใหญ่" หมายถึง "ทุน" และ "O" หมายถึงคำสั่งเช่นเดียวกับ "ลำดับความซับซ้อน" ดังนั้นชื่อเนื่องจากการประชุมของการเขียน "คำสั่งของความซับซ้อน" เป็น O (f (x)) เช่นด้วยอักษรตัวใหญ่ 'O' หรือ 'Big O' ไม่มีใครพูดถึงมันมากนักเพราะ 'ทุกคน' เข้าใจความหมายของมันและการทำความเข้าใจมันไม่ได้ช่วยให้คุณเข้าใจการวิเคราะห์ที่ซับซ้อน

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


5
ฉันขอโทษ แต่สัญกรณ์ Bachmann-Landau นั้นถูกคิดค้นโดยนักคณิตศาสตร์ชาวเยอรมันดังนั้นฉันคิดว่าเขาคงจะตั้งชื่อตามคำภาษาอังกฤษไม่ได้ ในความเป็นจริงแม้ว่ามันจะถูกประดิษฐ์ขึ้นโดยนักคณิตศาสตร์ชาวอเมริกันมันก็อาจจะยังคงได้รับการตั้งชื่อตามคำภาษาเยอรมันเพราะเมื่อมันถูกคิดค้น (ประมาณปี 1920 ผมคิดว่า) ภาษาระหว่างประเทศของคณิตศาสตร์เป็นภาษาเยอรมัน นอกจากนี้มันไม่ได้มีอะไรเกี่ยวข้องกับความซับซ้อนจากระยะไกล
Jörg W Mittag

1
@ Jörg: ใช่ แต่ไม่ใช่ว่าจะเป็นOrdnungซึ่งบทความ wiki ของเยอรมันอ้างว่าเป็นจุดกำเนิด: de.wikipedia.org/wiki/Landau-Symbole#Geschichte
back2dos

1
@Ethel คุณสามารถทำการเปลี่ยนแปลงเล็กน้อยในบทความของคุณเพื่อให้ฉันสามารถลงคะแนนคุณ? คุณถูกต้องแน่นอน คุณต้องแก้ไขก่อนที่ฉันจะลงคะแนนได้
Jonathan Henson

1
@ โจนาธานฉันไม่แน่ใจว่าคุณต้องการเปลี่ยนแปลงอะไรเล็กน้อย คุณสามารถทำต่อไปและทำการแก้ไขที่คุณต้องการได้หรือไม่? หรือเราอาจปล่อยให้คำตอบของ back2dos ดูเหมือนว่าเขาอาจจะได้คำตอบที่ดีที่สุดต่อไปเนื่องจากการวิจัยที่ยอดเยี่ยม :)
Ethel Evans

1
อืมน่าสนใจ ในสวีเดนบิ๊กโอมักจะเรียกว่า "ordo" (ละตินสำหรับดีสั่ง) แทนที่จะเป็น "บวช" (ภาษาสวีเดนคำสั่ง)
Vatine

11

Oย่อมาจากคำสั่ง

มันถูกนำมาโดยนักคณิตศาสตร์ชาวเยอรมันพอลแบชแมนน์ในหนังสือเล่มที่สองของหนังสือของเขาในทฤษฎีจำนวนDie Analytische Zahlentheorieตีพิมพ์ในปี 1894 (พี. 401) เขาตั้งข้อสังเกตหลังจากสูตรที่เขาใช้สัญกรณ์ครั้งแรก:

(... ) wenn wir durch das Zeichen O (n) einde Grösseausdrücken, Deren Ordnung ใน Bezug auf nตาย Ordnung von n nicht überschreitet (... )

คำแปลของฉัน:

(... ) โดยที่สัญกรณ์O (n)เราระบุขนาดของคำสั่งที่อ้างอิงถึงnไม่เกินลำดับของn (... )

ตรงกันข้ามกับสิ่งที่คนอื่นพูดไม่มีอะไรในข้อความของเขาบ่งบอกว่าในความเป็นจริงแล้วเป็นเมืองหลวงของกรีก เขาใช้อักขระกรีกและละตินมากมายทั้งคู่ดังนั้นจึงไม่มีวิธีที่จะบอกได้ ให้ใช้อย่างต่อเนื่องของ "Ordnung n log n " ฯลฯ ในข้อความเป็นที่ชัดเจนว่ามันหมายถึง "Ordnung" (เยอรมันสำหรับ "คำสั่ง" หากมีข้อสงสัย) ในกรณีใด ๆ แต่ที่ยังคงสามารถเปิดใช้ กรีกโอแฟนซี

อย่างไรก็ตามต้นกำเนิดของ omikron น่าจะเป็น retronym เนื่องจาก Donald Knuth ที่แนะนำสัญลักษณ์ omega (Ω) และ theta (Θ) สำหรับแนวคิดที่เกี่ยวข้องในกระดาษของเขาBig Omicron และ Big Omega และ Big Thetaหรืออาจเป็นHardy และ Littlewoodที่ แนะนำสัญลักษณ์โอเมก้าก่อนหน้านี้


2
น่าสนใจ ฉันคิดว่าคุณพูดถูก ฉันแค่ค้นหาคำจำกัดความในหนังสือของกุ๊บและแบชแมนน์และพวกเขาก็ a) ใช้ละตินโอไม่ใช่กรีกโอมิครอน b) ทั้งสองใช้คำว่า "Ordnung" และ c) กุ๊บระบุอย่างชัดเจนว่าหมายถึง "Ordnung" . ฉันยืนแก้ไขแล้ว
Jörg W Mittag

จะพบคำใดดีไปกว่านี้ ฉันหมายถึงจากชาวเยอรมันเหรอ? Ordnung ist das halbe Leben!
JensG

ฉันคิดว่าประโยคแรกของคำตอบ (ถูกต้องเพิ่มขึ้นสุดยอดและน่ากลัว) ของคุณควรอ่าน: 'O ย่อมาจาก "Ordnung" (ความหมายเยอรมัน "คำสั่ง") มันจะช่วยให้คำตอบนี้ดึงดูดความสนใจของผู้อ่านคนอื่น ๆ
Hawkeye Parker

5

ฉันชอบบทความนี้หวังว่าคุณจะพบว่ามีประโยชน์เช่นกัน!

การอ้างอิงหัวข้อจากบทความ:
ตัวอักษรกรีกตัวใหญ่

บิ๊กโอมักใช้ในทางที่ผิด Big O หรือ Big Oh ย่อมาจาก Big Omicron มันหมายถึงขอบเขตบนของความซับซ้อนเชิงซีมโทติค ดังนั้นหากอัลกอริทึมเป็น O (n log n) จะมีค่าคงที่ c เช่นนั้นขอบเขตบนคือ cn log n

Θ (n log n) (Big Theta) ถูกผูกไว้แน่นกว่านั้น อัลกอริทึมดังกล่าวหมายความว่ามีอยู่สองค่าคงที่ c1 และ c2 เช่นนั้น c1n log n <f (n) <c2n log n

Ω (n log n) (Big Omega) กล่าวว่าอัลกอริทึมมีขอบเขตที่ต่ำกว่าของ cn log n

มีคนอื่น ๆ แต่สิ่งเหล่านี้เป็นเรื่องธรรมดาที่สุดและบิ๊กโอเป็นเรื่องธรรมดาที่สุด ความแตกต่างดังกล่าวมักจะไม่สำคัญ แต่ก็เป็นที่น่าสังเกต สัญกรณ์ที่ถูกต้องคือสัญกรณ์ที่ถูกต้องหลังจากทั้งหมด

Big O คืออะไร

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

Big O คืออะไร

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

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


5
เพียงเชื่อมโยงบทความไม่มีประโยชน์มากเกินไป เป็นความคิดที่ดีที่จะถอดความหรืออ้างอิงส่วนที่คุณพบโดยเฉพาะที่เกี่ยวข้องกับเธรด
Demian Brecht

3
โหวตลงจำเป็นจริงๆเหรอ? บทความที่เขาเชื่อมโยงมีความเกี่ยวข้องมากและ IMHO ค่อนข้างเป็นประโยชน์ คำตอบที่ได้รับคะแนนสูงสุดคือลิงค์ไปยังบทความ Wikipedia +1 เพื่อชดเชยความเจ้าเล่ห์ของกลุ่มจิต
Brandon Moretz

1
-1 เนื่องจากบทความในขณะที่เป็นบทความที่ดีและเขียนได้ดีไม่มีอะไรเกี่ยวข้องกับคำถาม
Jörg W Mittag

@ Jorg ฉันไม่เคยบอกว่าบทความจะแก้ปัญหาได้ แต่ฉันแบ่งปันเพราะฉันพบว่ามีประโยชน์เมื่อฉันดูแนวคิดเหล่านี้
topgun_ivard

3
@topgun_ivard: แล้วจะเกิดอะไรขึ้นถ้ามันกลายเป็นลิงค์ตาย? การถอดความช่วยให้ 1) ผู้ชมของเธรดนี้ได้รับเวอร์ชัน Coles ของลิงก์ของคุณ (เวลาคือเงิน) และ 2) รับรองว่าโพสต์ของคุณจะไม่แสดงผลที่ไม่เกี่ยวข้องบนลิงก์ที่ตายแล้ว
Demian Brecht

2

"f (x) ใหญ่มากโอ้ g (x)"

มันเป็นวิธีทางคณิตศาสตร์ในการทำนายการเติบโตของฟังก์ชั่น

ให้ f และ g เป็นฟังก์ชันจากชุดจำนวนเต็มหรือชุดหรือตัวเลขจริงถึงชุดตัวเลขจริง เราบอกว่า f (x) คือ O (g (x)) ถ้ามีค่าคงที่ C และ k เช่นนั้น | f (x) | <= C | g (x) | ทุกที่ที่ x> k

คุณจะอ่านสิ่งนี้ในฐานะ "f (x) ใหญ่มากโอ้ g (x)"

big-O บางครั้งเรียกว่าสัญลักษณ์ Landau หลังจากนักคณิตศาสตร์ชาวเยอรมัน Edmund Landau ฉันไม่คิดว่ามันจะหมายถึงอะไรนอกเหนือไปจากนั้น นอกจากนี้คุณยังมีสัญลักษณ์โอเมก้าและสัญลักษณ์ใหญ่ที่คล้ายกัน สัญลักษณ์ต่าง ๆ นั้นเป็นสิ่งที่ไม่เคยมีมาก่อนโดยการใช้ทีต้าเพื่อแสดงมุมในรูปสามเหลี่ยมของคุณในชั้นมัธยมปลายระนาบของคุณ

Correction @ back2dos ได้ให้คำอธิบายที่น่าพอใจสำหรับ O ตามคำสั่ง ผลงานยอดเยี่ยม ดูคำตอบของเขา

Donald Knuth นำไปใช้กับการศึกษาความซับซ้อนของโปรแกรมคอมพิวเตอร์

หากคุณต้องการค้นหาเหตุผลที่ใช้สัญลักษณ์คุณควรอ่าน

"Analytische Zahlentheorie" โดย Paul Bachmann จากปี 1892


2

แก้ไข: ปรากฎว่าฉันผิด อย่างไรก็ตามนี่อาจช่วยให้ใครบางคนรักษาสัญลักษณ์ของพวกเขาตรงดังนั้นฉันจะไม่ลบมัน


ที่จริงมันไม่ได้เป็นตัวอักษรภาษาละตินโอ้มันเป็นอักษรกรีกไมครอน แต่น่าเสียดายที่ทั้งสองมีสัญลักษณ์เดียวกันแน่นอนดังนั้นเมื่อเวลาผ่านไปรุ่นเดิมมีความเสียหายและตอนนี้ก็เป็นเพียงโอ้

ตัวเลือกของสัญลักษณ์ไม่มีความหมายใด ๆ จริง ๆ มันถูกเลือกให้เป็นอุปกรณ์ช่วยในการจำ :

  • Omicronมีตัวอักษร MICRO อยู่และความหมายของสัญลักษณ์ Omicron นั้นแปลว่า "เล็กกว่า"
  • โอเมก้ามีตัวอักษร MEGA อยู่ในนั้นและความหมายของสัญลักษณ์โอเมก้าคร่าว ๆ แปลว่า "ใหญ่กว่า"
  • Theta (Θ) มีลักษณะเหมือนเครื่องหมายเท่ากับและความหมายของสัญลักษณ์ Theta โดยประมาณหมายถึง "เท่ากับ"

แค่นั้นแหละ. ไม่มีความหมายที่แท้จริงมันเป็นเพียงการเล่นคำถ้าคุณต้องการที่จะช่วยให้คุณจำความหมายได้ง่ายขึ้น


2
ในขณะที่ฉันชอบที่จะเชื่อข้อเสนอช่วยจำของคุณ (มันเป็นความคิดที่เจ๋งจริง ๆ ) ฉันจะต้องเห็นหลักฐานว่านี่คือความตั้งใจดั้งเดิมของ Bachmann ให้และฉันจะ +1 คุณ
Jonathan Henson

2
@ Jonathan Henson: เห็นได้ชัดว่าฉันถูกเข้าใจผิดโดย Prof. Knuth :-)
Jörg W Mittag

-5

UPDATE: การพยายามล้างคำตอบของฉันและแม่นยำยิ่งขึ้น

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

คำตอบนี้ควรจะถูกต้องมากกว่าครั้งแรกของฉันเล็กน้อย :)


2
-1 เพราะนี่เป็นเพียงเก่าธรรมดาที่ไม่ถูกต้องและตอบคำถามแยกต่างหากจากที่ถูกถาม คำถามคือเหตุใดจึงใช้ตัวอักษร "O" ไม่ใช่ "สัญกรณ์ Big O ทำงานอย่างไร" คุณไม่ถูกต้องเกี่ยวกับวิธีการที่ Big-oh ทำงานได้เป็นอย่างดีแม้ว่า ... การวนลูปผ่านอาเรย์คือ O (n) โดยที่ n คือขนาดของอาเรย์ไม่ใช่ O (1) สัญกรณ์ไม่มีส่วนเกี่ยวข้องกับ "รอบ" ของอัลกอริธึม ... เป็นการวัดขอบเขตบนของเวลาทำงานของอัลกอริทึม
Casey Patton

ไม่เถียงกับคุณที่นี่ แต่นั่นคือสิ่งที่ฉันหมายถึง เวลาทำงานหมายถึงอะไรที่ถูกต้อง? เวลาในการทำงานจะพิจารณาจากสิ่งที่ต้องดำเนินการบนเครื่อง ฉันคิดว่าฉันใช้วงจรอย่างอิสระที่นี่ ตามรอบฉันคิดว่าฉันควรจะพูดซ้ำ ๆ หรืออะไรทำนองนั้น คุณถูกต้องเกี่ยวกับขอบเขตบนแม้ว่าจะไม่ได้กำหนดค่าเฉลี่ย ดังนั้นฉันยอมรับการปรับลดรุ่น
SoftwareSavant
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.