Big และ O ในสัญลักษณ์ Big O คืออะไร ฉันอ่านคำจำกัดความแล้วและไม่ได้บอกว่าOออกเสียงว่า 'oh' อย่างไร ตัวอย่างเช่น - ฉันเข้าใจว่าO (n) เป็นความซับซ้อนของอัลกอริทึมเชิงเส้นโดยที่ n อาจเป็นจำนวนการดำเนินการ แต่Oคืออะไร
Big และ O ในสัญลักษณ์ Big O คืออะไร ฉันอ่านคำจำกัดความแล้วและไม่ได้บอกว่าOออกเสียงว่า 'oh' อย่างไร ตัวอย่างเช่น - ฉันเข้าใจว่าO (n) เป็นความซับซ้อนของอัลกอริทึมเชิงเส้นโดยที่ n อาจเป็นจำนวนการดำเนินการ แต่Oคืออะไร
คำตอบ:
ดีเดาของฉันจะเป็นคำสั่งที่เกิดขึ้นพร้อมกับวิกิพีเดีย
แก้ไข: (ของฉันเอง (การปรับปรุงใด ๆ ชื่นชม)) แปลจากบทความวิกิพีเดียภาษาเยอรมัน
อักษรตัวใหญ่ O (อันที่จริงเป็นเมืองหลวง omicron ในเวลานั้น) เป็นสัญลักษณ์สำหรับคำสั่งของ (เยอรมัน: "Ordnung von") ถูกใช้ครั้งแรกโดยนักทฤษฎีจำนวนเยอรมัน Paul Bachman ในหนังสือเล่มที่สองของเขาเกี่ยวกับทฤษฎีการวิเคราะห์เชิงตัวเลขปรากฏ 2437 ในสัญกรณ์ที่ได้รับความนิยมเนืองจากการทำงานของเอ๊ดมันด์กุ๊บนักทฤษฎีจำนวนเยอรมันซึ่งเป็นศัพท์ที่เกี่ยวข้องกับวันนี้โดยเฉพาะในศัพท์เยอรมัน
"ใหญ่" หมายถึง "ทุน" และ "O" หมายถึงคำสั่งเช่นเดียวกับ "ลำดับความซับซ้อน" ดังนั้นชื่อเนื่องจากการประชุมของการเขียน "คำสั่งของความซับซ้อน" เป็น O (f (x)) เช่นด้วยอักษรตัวใหญ่ 'O' หรือ 'Big O' ไม่มีใครพูดถึงมันมากนักเพราะ 'ทุกคน' เข้าใจความหมายของมันและการทำความเข้าใจมันไม่ได้ช่วยให้คุณเข้าใจการวิเคราะห์ที่ซับซ้อน
เพื่อความเข้าใจในการวิเคราะห์ความซับซ้อนฉันคิดว่าลิงค์ที่โพสต์โดย topgun_ivard เป็นจุดเริ่มต้นที่ดี ตำราเรียนเบื้องต้นที่ดีซึ่งครอบคลุมโครงสร้างข้อมูลหรืออัลกอริทึมอาจช่วยได้เช่นกัน
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ที่ แนะนำสัญลักษณ์โอเมก้าก่อนหน้านี้
ฉันชอบบทความนี้หวังว่าคุณจะพบว่ามีประโยชน์เช่นกัน!
การอ้างอิงหัวข้อจากบทความ:
ตัวอักษรกรีกตัวใหญ่
บิ๊กโอมักใช้ในทางที่ผิด 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 ไม่ใช่การทดสอบประสิทธิภาพของอัลกอริทึม นอกจากนี้ยังเป็นเชิงทฤษฎีหรือเชิงนามธรรมที่มีแนวโน้มที่จะไม่สนใจปัจจัยอื่น ๆ โดยทั่วไปการเรียงลำดับความซับซ้อนของอัลกอริทึมจะลดลงตามจำนวนองค์ประกอบที่จัดเรียงว่าเป็นปัจจัยสำคัญ สิ่งนี้ใช้ได้ แต่ไม่คำนึงถึงปัญหาบัญชีเช่น:
การใช้หน่วยความจำ: อัลกอริทึมหนึ่งอาจใช้หน่วยความจำมากกว่าอีกอัลกอริทึม ขึ้นอยู่กับสถานการณ์สิ่งนี้อาจเป็นอะไรก็ได้ตั้งแต่เรื่องที่ไม่เกี่ยวข้องไปจนถึงเรื่องวิกฤติ ราคาของการเปรียบเทียบ: อาจเป็นได้ว่าองค์ประกอบการเปรียบเทียบมีราคาแพงมากซึ่งอาจเปลี่ยนแปลงการเปรียบเทียบระหว่างโลกแห่งอัลกอริทึมจริง ๆ ค่าใช้จ่ายในการย้ายองค์ประกอบ: องค์ประกอบการคัดลอกมักจะราคาถูก แต่ไม่จำเป็นต้องเป็นกรณี; เป็นต้น
"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
แก้ไข: ปรากฎว่าฉันผิด อย่างไรก็ตามนี่อาจช่วยให้ใครบางคนรักษาสัญลักษณ์ของพวกเขาตรงดังนั้นฉันจะไม่ลบมัน
ที่จริงมันไม่ได้เป็นตัวอักษรภาษาละตินโอ้มันเป็นอักษรกรีกไมครอน แต่น่าเสียดายที่ทั้งสองมีสัญลักษณ์เดียวกันแน่นอนดังนั้นเมื่อเวลาผ่านไปรุ่นเดิมมีความเสียหายและตอนนี้ก็เป็นเพียงโอ้
ตัวเลือกของสัญลักษณ์ไม่มีความหมายใด ๆ จริง ๆ มันถูกเลือกให้เป็นอุปกรณ์ช่วยในการจำ :
แค่นั้นแหละ. ไม่มีความหมายที่แท้จริงมันเป็นเพียงการเล่นคำถ้าคุณต้องการที่จะช่วยให้คุณจำความหมายได้ง่ายขึ้น
UPDATE: การพยายามล้างคำตอบของฉันและแม่นยำยิ่งขึ้น
สัญกรณ์ Big O เป็นวิธีการจำแนกลักษณะการทำงานตามอัตราการเติบโต O หมายถึงคำสั่งซื้อ (คำสั่งแรกคือ n ลำดับที่สองเป็น n-squared ฯลฯ ) และถ้าฉันไม่เข้าใจผิดนี่จะเป็นสถานการณ์กรณีที่เลวร้ายที่สุดสำหรับวิธีการรันไทม์ (หรือพื้นที่เก็บข้อมูล) ที่ระบุองค์ประกอบ N ลำดับที่ใหญ่กว่าวิธีที่แย่ที่สุดที่ทำ
ตัวอย่างเช่นการค้นหาระเบียนในอาเรย์คือ O (1) (ฉันเชื่อในการใช้งานตารางแฮชที่เป็นกรณีนี้เช่นกัน) การเพิ่มค่าในส่วนท้ายของรายการลิงก์จะเป็น O (N) เนื่องจากคุณต้องไปที่จุดสิ้นสุดของรายการก่อนที่คุณจะสามารถเพิ่มองค์ประกอบเป็นต้น
คำตอบนี้ควรจะถูกต้องมากกว่าครั้งแรกของฉันเล็กน้อย :)