คำจำกัดความ "ถูกต้อง" ของขอบเขตบนและล่างคืออะไร?


19

ให้เป็นกรณีที่เลวร้ายที่สุดที่ใช้เวลาที่มีปัญหากับการป้อนข้อมูลของขนาดnขอให้เราทำให้ปัญหาแปลกสักหน่อยโดยการแก้ไขสำหรับแต่สำหรับ 1n f ( n ) = n 2 n = 2 k f ( n ) = n n = 2 k + 1(n)n(n)=n2n=2k(n)=nn=2k+1

  1. ดังนั้นขอบล่างของปัญหาคืออะไร? วิธีที่ผมเข้าใจมันเป็นเพียงที่ต่ำกว่าผูกพันของ(n) แต่เรารู้ว่าแสดงว่ามีค่าคงที่ ,เช่นนั้นสำหรับ ,ซึ่งไม่เป็นความจริง ดังนั้นมันจึงดูเหมือนว่าเราจะสามารถพูดได้(n) แต่โดยปกติแล้วเราจะเรียกว่าปัญหามีขอบเขตน้อยกว่าใช่ไหม?f ( n ) = Ω ( n 2 ) k n 0 n > n 0 f ( n ) > k n 2 f ( n ) = Ω ( n ) Ω ( n 2 )(n)(n)=Ω(n2)kn0n>n0(n)>kn2(n)=Ω(n)Ω(n2)

  2. สมมติว่าซึ่งหมายความว่ามีอยู่อย่างต่อเนื่อง ,เช่นว่าทุก , 2 และสมมติว่าปัญหาได้เวลาทำงาน(n) ถ้าเราสามารถลดปัญหานี้สำหรับช่วงเวลาทั้งหมดที่ในการแก้ไขปัญหาอื่น (การป้อนข้อมูลที่มีขนาดเดียวกัน) เราสามารถพูดได้เวลาทำงานของปัญหาอื่น ๆ ที่มีความผูกพันของต่ำ ?k n 0 n > n 0 g ( n ) > k n 2 g ( n ) n Ω ( n 2 )ก.(n)=Ω(n2)kn0n>n0ก.(n)>kn2ก.(n)nΩ(n2)


12
นี่คือเหตุผลที่นักคณิตศาสตร์ใช้ lim sup และ lim inf
Peter Shor

1
ดังนั้นฉันคิดว่าฉันเข้าใจความแตกต่าง ฉันคิดว่าคนโพสต์จะเข้าใจโอเมก้าบ่อยครั้งอย่างไม่สิ้นสุด แต่ในกรณีที่ฉันต้องการแยกความแตกต่างอย่างชัดเจนมีสัญลักษณ์อะไรบ้างที่ฉันสามารถใช้นอกเหนือจากการขยายได้
Wei Yu

3
@Wei Yu: ลิม sup และลิม inf คุณพูดว่าสำหรับค่าคงที่kหากคุณต้องการพูดว่าg (n) \ geq kn ^ 2ไม่สิ้นสุดบ่อยครั้งและ \ liminf \ frac {g ( n)} {n ^ 2} \ geq kถ้าคุณต้องการที่จะพูดกรัม (n) \ geq kn ^ 2สำหรับทุกขนาดใหญ่พอn \โดยเฉพาะอย่างยิ่งถ้าคุณกำลังพูดคุยกับนักคณิตศาสตร์ kg(n)kn2 ลิมinf infg(n)
Lim supก.(n)n2k
kก.(n)kn2g(n)kn2n
ลิม infก.(n)n2k
ก.(n)kn2n
 
Peter Shor

12
@Wei: สำหรับนักทฤษฎีที่ซับซ้อนที่สุด (ดูแลนซ์ด้านล่าง) ฟังก์ชั่นของคุณคือθ (n ^ 2); สำหรับอัลกอริทึมส่วนใหญ่ (ดู Knuth หรือ CLRS) ฟังก์ชันของคุณคือΟ (n ^ 2) และΩ (n) ทั้งสองสัญกรณ์เกือบจะเป็นมาตรฐานในชุมชนย่อย แต่ไม่สมบูรณ์ เพื่อทำให้สิ่งเลวร้ายยิ่งขึ้นชุมชนย่อยทั้งสองนี้ซ้อนทับกันอย่างหนัก! ดังนั้นถ้ามันเป็นเรื่องสำคัญที่คุณต้องใช้สัญกรณ์คุณต้องพูดอย่างชัดเจนว่าคุณกำลังใช้สัญกรณ์ (โชคดีที่มันไม่ค่อยสำคัญ)
Jeffε

2
@Jeffe ฉันเชื่อว่าคุณควรโพสต์ความคิดเห็นของคุณเป็นคำตอบ
chazisop

คำตอบ:


13

ความหมายทางขวาของคือว่ามีอยู่บางเช่นว่าหลายอย่างมากมาย , 2 คำจำกัดความที่ไม่สิ้นสุดสำหรับขอบเขตที่ต่ำมักจะจัดการกับปัญหาของคุณและเป็นวิธีที่เราใช้ในการปฏิบัติk > 0 n f ( n ) k n 2f(n)=Ω(n2)k>0nf(n)kn2

ฉันได้โพสต์ข้อความนี้ในปี 2005

หนังสือบางเล่มทำให้คำจำกัดความนี้ถูกต้อง


14
Knuth ไม่เห็นด้วยกับคุณ: portal.acm.org/citation.cfm?id=1008329
Jeffε

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

ฉันคิดว่าคำจำกัดความเหล่านี้ทั้งหมดเห็นด้วยเมื่อชุดของข้อยกเว้นคือการวัด 0
Carter Tazio Schonwald

2
ปัญหาเกี่ยวกับคำจำกัดความ "มักจะไม่สิ้นสุด" ก็คือพวกเขามักจะไม่ยกเว้นว่า "มักจะไม่สิ้นสุด" ดังนั้นเราจึงมีผลลัพธ์ที่น่ากลัวด้วยคำจำกัดความนี้แต่ยังโดยที่และหมายถึงคำสั่งที่เข้มงวดในบางอย่าง ความรู้สึก ฉันไม่ชอบสิ่งนี้จริงๆ อย่างน้อยข้อเสนอแนะของ @ Carter ในการวัดข้อยกเว้น 0 นั้นน่ากลัวน้อยกว่าเล็กน้อยในขณะที่ยังคงอนุญาตให้สั่งซื้อได้ดีกว่าแบบปกติ f ( n ) = o ( n + 1 ) Ω of(n)=Ω(n2) f(n)=o(n+1)Ωo
András Salamon

2
@Jukka: ไม่ฉัน misusingที่นี่ ในขณะที่คุณแบะท่าฉันมีเพื่อแก้ไขข้อโต้แย้งของฉันที่จะใช้แทนoดังนั้นผมขอย้ำคัดค้านที่เกิดขึ้นจริงโดยไม่ต้องใช้หรือOด้วย "อนันต์มักจะ" หนึ่งมีความผิดปกติที่ ,ยัง2) ดังนั้นไม่ได้สั่งจองล่วงหน้า O o o O n = Ω ( F ( n ) ) ( n ) = Ω ( n 2 ) n Ω ( n 2 ) ΩoOooOn=Ω(f(n))f(n)=Ω(n2)nΩ(n2)Ω
András Salamon

4

ด้วยKnuthนิยามของคุณสามารถยืนยันเท่านั้น ) ในขณะที่คุณสังเกตเห็นสิ่งนี้ไม่ง่ายและเกิดขึ้นกับฟังก์ชันVitányiและ Meertensเรียกว่า "wild" พวกเขาเสนอให้นิยาม(n)Ω(n)

Ω((n))={ก.|δ>0:n0>0:n>n0:ก.(n)δ(n)}.

(ซึ่งเป็นเช่นเดียวกับความหมายของแลนซ์.) ด้วยเหตุนี้ความหมาย )(n)Ω(n2)


2

ฉันไม่รู้เกี่ยวกับการใช้กันอย่างแพร่หลาย แต่ฉันเชื่อว่าฉันรู้จักการใช้งานที่เก่าแก่ที่สุด (สำหรับวิทยาศาสตร์คอมพิวเตอร์แล้ว)

ในปี 1965 รายงานโดย Hartmanis & Stearns "ในความซับซ้อนของการคำนวณของอัลกอริทึม" Corollary 2.1 คือ:

ถ้าและTเป็นฟังก์ชันเวลาเช่นinf n T ( n )ยูTจากนั้นSUSTINFnT(n)ยู(n)0SยูST

ที่เป็นชั้นความซับซ้อนของปัญหาทั้งหมดคำนวณในO ( K ( n ) ) T (n) ต้องเชื่อฟังT ( n ) n / kสำหรับจำนวนเต็มkและnและT ( n ) T ( n + 1 )แต่มันไม่จำเป็นต้องใช้เวลาSKO(K(n))T(n)n/kknT(n)T(n+1)

ฟังก์ชั่นของคุณเป็นไปตามกฎข้อแรกสำหรับแต่ไม่ปฏิบัติตามกฎข้อที่สองk=1

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


2

ฉันคิดว่าเราควรแยกแยะระหว่างสองสิ่ง:

  • ขอบเขตล่างสำหรับฟังก์ชัน
  • ขอบเขตล่างของปัญหา (อัลกอริทึม)

สำหรับฟังก์ชั่นเมื่อเราแก้ไขคำสั่งนิยามของคำว่าLowerbound / Upperbound จะเป็นดังนี้ ถ้าความสัมพันธ์เพื่อเป็น asymptotic majorization (ไม่สนใจปัจจัยคงที่)

ก.:,nม.>n. (x)ก.(x)

แล้วความหมายเป็นคำนิยามตามปกติของและΩ ทั้งสองมีการใช้อย่างกว้างขวางในพื้นที่อื่น ๆ เช่น combinatoricsOΩ

แต่เมื่อเราพูดถึงสิ่งที่ต่ำกว่าสำหรับปัญหา (อัลกอริทึม) สิ่งที่เราต้องการพูดจริงๆก็คือปัญหานั้นต้องการทรัพยากรจำนวนหนึ่ง บ่อยครั้งที่ความซับซ้อนของคลาสนั้นถูก parametrized โดยฟังก์ชันเช่นและเราพูดง่าย ๆ ว่าปัญหานั้นถูก จำกัด ขอบเขตด้วยฟังก์ชัน เสียงเดียว ฯลฯ ) สิ่งที่เราต้องการจะพูดในกรณีนี้คือเราต้องการเวลาในการรันn 2เพื่อแก้ปัญหานั่นคือน้อยกว่าn 2Tผมม.อี(เสื้อ(n))n2n2เวลาทำงานไม่เพียงพออย่างเป็นทางการซึ่งจะกลายเป็นความหมายของแลนซ์ที่เวลาทำงานของอัลกอริทึมไม่ได้อยู่ใน )โอ(เสื้อ(n))

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