โปรดอธิบายข้อความที่ฟังก์ชั่น + b เป็นของ O (n ^ 2) และΘ (n)?


12

สมมติว่าฉันมีฟังก์ชั่นเชิงเส้นf(n)= an+bวิธีที่ดีที่สุดที่จะพิสูจน์ว่าฟังก์ชันนี้เป็นของ O (n 2 ) และΘ(n)อะไร

ฉันไม่ต้องการความแม่นยำทางคณิตศาสตร์ที่นี่ ฉันต้องการโปรแกรมเมอร์ตอบ บางวิธีตรรกะในการอธิบาย

นี่คือเหตุผลที่ฉันไม่ได้โพสต์คำถามในวิชาถาม - ตอบทางคณิตศาสตร์และแทนที่ในคำถามคำตอบโปรแกรมเมอร์


2
@EmmadKareem ในวรรณคดีบ่อยครั้งที่สัญกรณ์บิ๊กโอมักจะใช้อย่างไม่เป็นทางการเพื่อแสดงขอบเขตที่แน่นซึ่งโดยทั่วไปΘ (n) Big O เป็นขอบเขตบนจริง ๆ
Geek

1
@EmmadKareem "ขอบเขตบนของ O (n) ไม่ใช่ n * n." ,, ไม่มีขอบเขตบนของ O (n) O (n) กำหนดขอบเขตบนเอง มันสามารถมีชุดของฟังก์ชั่นที่ตอบสนองเงื่อนไข: f (x) ∈ O (g (x)) เนื่องจากมี c> 0 (เช่น c = 1) และ x0 (เช่น x0 = 5) เช่นนั้น f (x ) <cg (x) เมื่อใดก็ตามที่ x> x0
Geek

2
@EmmadKareem ที่จริงแล้ว O (n) \ subset O (n ^ 2) \ subset O (n ^ 3) และต่อไปดังนั้น f \ in O (n ^ 2) โดยความไวของ \ subset โปรดทราบว่า \ subset ไม่ใช่ \ subseteq
Scarfridge

6
"ฉันต้องการคำตอบจากโปรแกรมเมอร์บางวิธีอธิบายอย่างมีเหตุผล" - คุณจะนิยาม "ตรรกะ" ได้อย่างไร? คณิตศาสตร์เป็นตรรกะ อะไรที่น้อยกว่าการคิดอย่างเข้มงวดเป็นสิ่งที่ผิดที่นี่ คุณสามารถลองอธิบายหัวข้อ แต่โดยไม่แยกย่อยคณิตศาสตร์ (ไม่ยาก) ด้านหลังคุณจะไม่ได้รับจริง ๆ - คุณจะมีความรู้สึกที่เต็มไปด้วยหมอกในความหมาย
Tamás Szelei

2
@Geek: ฉันเดาว่าคุณหมายถึงคณิตศาสตร์ ? cs.SEจะเป็นที่อยู่ที่ดีเช่นกัน
กราฟิลส์

คำตอบ:


20

สัญลักษณ์ Big Oh (O, Theta, Omega) เป็นเรื่องเกี่ยวกับอัตราการเติบโตของฟังก์ชั่น

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

สัญกรณ์กุ๊บย่อปัจจัยเหล่านี้ออกไป ไม่สนใจว่าอัลกอริทึมfจะเร็วเป็นสองเท่าของอัลกอริธึมอื่นหรือไม่g: gสามารถปรับให้ทำงานเร็วขึ้น 4 เท่าหรือคุณอาจซื้อฮาร์ดแวร์ที่เร็วกว่าแทนก็ได้ หากคุณมองจากมุมมองนี้คุณอาจบอกว่ามันเป็น "เหมือนเดิม" (ไม่ได้บอกว่าคุณทำได้ (เสมอ) ละเว้นปัจจัยคงที่ในทางปฏิบัติ)

บิ๊กโอระบุขอบเขตบนมันคล้ายกับ<=ความสัมพันธ์

คุณจะยอมรับว่า1 < 2เป็นจริง นั่นหมายความว่า1จะต้องไม่น้อยกว่าหมายเลขอื่นหรือไม่? ไม่แน่นอน 1มีจำนวนอนันต์ของตัวเลขที่มีขนาดใหญ่กว่าคือ

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

นี่คือเหตุผลที่ฟังก์ชันสามารถอยู่ในคลาส "บิ๊กโอ" มากกว่าหนึ่งคลาส

นี่คือการเปรียบเทียบฟังก์ชันที่แตกต่างกับข้อ จำกัด: (จากคณิตศาสตร์คณิตศาสตร์ของ Knuth)

การเปรียบเทียบอัตราการเติบโต

จากซ้ายไปขวาฟังก์ชั่นจะเติบโตเร็วขึ้น

นอกจากนี้ป้อนคำอธิบายรูปภาพที่นี่ความหมาย n ^ 2 เติบโตเร็วกว่า n ^ 1 เพราะ 2> 1

คำนิยาม

นิยามโอเมก้า

"f เติบโตเร็วกว่าหรือเร็วกว่า g"

นิยามใหญ่โอ้

"f เติบโตช้าลงหรือเร็วพอ ๆ กับ g"

คำจำกัดความ Theta

การรวมกันของทั้งสองข้างต้น มันบอกว่าฟังก์ชั่นfเติบโตขึ้น "อย่างเท่าเทียมกันอย่างรวดเร็ว" gเป็น มันคือความสัมพันธ์ที่เท่าเทียมกัน

การตีความ

สมมติว่าคุณมีสองขั้นตอนวิธีการและfg

อวสาน

สมมติว่าf ไม่อยู่ใน Theta of g, f ใน Omega of gหมายถึงว่าไม่ว่างบประมาณของคุณไม่มีจำนวนคงที่ของพลังในการคำนวณที่คุณสามารถเพิ่มไปยังระบบของคุณเช่นที่มักจะทำงานให้เร็วที่สุดเท่าfg

ใหญ่มาก

สมมติf ไม่อยู่ใน Theta of g, f ใน Big Oh of gหมายความว่าถ้าคุณมีข้อมูลมากพอที่fจะทำงานได้เร็วกว่าเสมอgไม่ว่าอำนาจการใช้คอมพิวเตอร์มากคุณเพิ่มไปยังระบบของคุณ

พิสูจน์

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

ดังนั้นคุณต้องไปหาค่าc, d, n_0เช่นว่าสภาพถือ

นี่คือวิธีที่คุณสามารถทำได้สำหรับขอบเขตล่างด้วยc:

พิสูจน์

สิ่งสำคัญคือต้องตระหนักว่าฉันกำหนดโดยพลการcว่าเล็กกว่าa-1ดีอย่างสมบูรณ์ คำจำกัดความของ Theta (g) กล่าวว่า "มีc" มันอาจเป็นค่าใดก็ได้ตราบใดที่มันใหญ่กว่า 0 (ถ้าaเป็นจำนวนจริงบวกคุณจะต้องเปลี่ยนการพิสูจน์เล็กน้อยอย่างไรก็ตามเพราะa - 1อาจเป็นค่าลบ)

(ฉันสมมติว่าaเป็นค่าบวกมิฉะนั้นฟังก์ชันจะเป็นค่าลบเสมอสำหรับค่าขนาดใหญ่nซึ่งไม่สมเหตุสมผลสำหรับฟังก์ชันที่แสดงถึงรันไทม์)

คุณสามารถลองทำเพื่อขอบเขตบนมันค่อนข้างคล้ายกัน หากคุณไม่ทราบวิธีฉันสามารถให้หลักฐานกับคุณ

คำแนะนำ: เริ่มต้นด้วย d > a + 1

ความสนใจ

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


2
แค่นั้นแหละ. คนเลวเกินไปก็บ้าเพราะคณิตศาสตร์มันง่ายมากจริง ๆ
Tamás Szelei

สถานะคำถาม: "ฉันไม่ต้องการความแม่นยำทางคณิตศาสตร์ที่นี่ฉันต้องการโปรแกรมเมอร์คำตอบ ... " สัญกรณ์ที่ใช้ในคำตอบนี้ดูเหมือนจะไม่เหมาะสำหรับคำถาม
gnat

1
@gnat อืมฉันคิดว่าคำถามที่ว่า "พิสูจน์" ณ จุดหนึ่ง อย่างไรก็ตามฉันได้เพิ่มการตีความสำหรับคำจำกัดความทางคณิตศาสตร์
phant0m

@ phant0m คำตอบที่ดี สิ่งที่ฉันกำลังมองหา คณิตศาสตร์ในคำตอบทำให้มันแข็งขึ้นแม้ว่า "maths" ไม่ได้ถูกถามเป็นพิเศษในคำถามดั้งเดิม ขอบคุณมาก
Geek

@ Geek ฉันดีใจที่คุณชอบมัน หากคุณมีคำถามใด ๆ เพิ่มเติมอย่าลังเลที่จะถามและฉันสามารถชี้แจง / ขยายคำตอบของฉัน
phant0m

5

เมื่อคุณจัดการกับพหุนามคุณจะสนใจเฉพาะระดับพหุนามเท่านั้น นั่นคือสำหรับคุณเท่านั้นที่ดูแลเกี่ยวกับan + b nถ้ามันเป็นคุณเท่านั้นที่จะดูแลเกี่ยวกับan^3 + bn^2 + cn + dn^3

ดังนั้นพหุนามที่มีระดับdΘ(n^d)จะเป็นใน ง่าย

ตอนนี้เราต้องพูดถึงความแตกต่างระหว่างΘและ O. เป็นหลักมันแตกต่างกันระหว่าง==และ<=ตามลำดับ ดังนั้นΘ(n)หมายความว่ามันอยู่ในปัจจัยคงที่nเสมอ O(n)หมายถึงว่ามันอยู่เสมอทั้งในปัจจัยคงที่หรือน้อยกว่าnn

ซึ่งหมายความว่าการทำงานใด ๆ ในΘ(s)สำหรับการใด ๆจะยังอยู่ในs O(s)นอกจากนี้ถ้าฟังก์ชั่นที่อยู่ในΘ(s)และsอยู่เสมอน้อยกว่าฟังก์ชั่นอื่น ๆ บางอย่างtที่ฟังก์ชั่นในแต่ไม่O(t)Θ(t)

Ω(n)เพื่อประโยชน์ของความสมบูรณ์นอกจากนี้ยังมี ถ้าΘหมายถึง==และOแสดงให้เห็นถึง<=, แสดงให้เห็นถึงΩ >=ดังนั้นan + bอยู่ในΩ(1), และΘ(n)O(n^2)

อย่างที่ฉันพูดไปก่อนหน้านี้มันง่ายมากที่จะเข้าใจว่าชื่อพหุนามมีอะไรอยู่ในนั้น - คุณแค่ดูที่ระดับ มีฟังก์ชั่นอื่น ๆ ที่ใช้งานง่ายเช่นกัน

ฟังก์ชั่นใด ๆ ในรูปแบบของa^bnสำหรับพลaและอยู่ในb Θ(a^n)สำหรับค่าใด ๆพวกเขาอยู่ในc >= a ทุกคนอยู่ในพหุนามO(c^n) O(2^n)โดยพื้นฐานแล้วนี่แค่บอกว่าฟังก์ชันเลขชี้กำลังมีจำนวนพหุนามเสมอและฐานฟังก์ชันเลขชี้กำลังมีความสำคัญ

ลอการิทึมเป็นสิ่งที่ตรงกันข้าม สำหรับหนึ่งlog_b nอยู่ในสำหรับการใด ๆΘ(log n) bหมายความว่าฐานไม่สำคัญสำหรับลอการิทึม สิ่งนี้สมเหตุสมผลเนื่องจากการสลับระหว่างฐานต่าง ๆ ในลอการิทึมนั้นเพียงแค่คูณด้วยค่าคงที่ ฟังก์ชันลอการิทึมยังO(n)มี - นั่นคือฟังก์ชันลอการิทึมมีขนาดเล็กกว่าพหุนามใด ๆ (อย่างน้อยระดับ 1)

เมื่อพิจารณาถึงผลรวมของฟังก์ชั่นเหล่านี้สิ่งที่ยิ่งใหญ่ที่สุด "ชนะ" ดังนั้นn + log nเป็นΘ(n)เพราะในnระยะที่มีอำนาจเหนือlog nคำ การคูณมีความซับซ้อนมากขึ้น สำหรับการบริการลูกค้าเป็นสิ่งเดียวที่คุณต้องทราบว่าเป็นที่nlog nอยู่ระหว่างและnn^2


1
ใช้ได้ดีทีเดียว. ตามความทรงจำของฉันข้างต้นคำอธิบายก็ใกล้เคียงกับคู่มือการออกแบบอัลกอริทึมแบบดั้งเดิมที่ได้รับ
ริ้น

1
@Tikhlon เขียนดีมากดังนั้น +1 แต่สิ่งที่ฉันยอมรับก็ดีกว่า
Geek

-2

คุณไม่ต้องใช้ฟังก์ชัน f (n) = an + b และปล่อยค่าคงที่ทั้งหมดดังนั้นมันจึงดูเหมือนว่า f (n) = n แล้วคุณใช้ "n" ที่มีระดับสูงสุดเป็นคำตอบของคุณ QED Θ (n)

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