O และΩเกี่ยวข้องกับกรณีที่เลวร้ายที่สุดและดีที่สุดได้อย่างไร?


33

วันนี้เรามีการหารือในการบรรยายขั้นตอนวิธีการที่ง่ายมากสำหรับการหาองค์ประกอบในอาร์เรย์ที่เรียงลำดับการใช้ค้นหาแบบทวิภาค เราถูกขอให้ระบุความซับซ้อนเชิงซีมของมันสำหรับอาร์เรย์ขององค์ประกอบn

ความคิดของฉันคือว่าไม่ชัดแจ้งO(logn)หรือO(log2n)มีความเฉพาะเจาะจงมากขึ้นเนื่องจากlog2nเป็นจำนวนการดำเนินการในกรณีที่เลวร้ายที่สุด แต่ผมสามารถทำได้ดีกว่ายกตัวอย่างเช่นถ้าผมตีสืบค้นองค์ประกอบเป็นครั้งแรก - แล้วขอบเขตที่ต่ำเป็นΩ(1) )

ผู้บรรยายเสนอวิธีแก้ปัญหาเป็นΘ(logn)เนื่องจากเรามักจะพิจารณาเฉพาะกรณีที่แย่ที่สุดสำหรับอัลกอริทึม

แต่เมื่อพิจารณาเฉพาะกรณีที่เลวร้ายที่สุดประเด็นของการมีOและคืออะไรΩเมื่อกรณีที่เลวร้ายที่สุดของปัญหาที่กำหนดมีความซับซ้อนเดียวกัน ( Θจะเป็นสิ่งที่เราต้องการใช่ไหม?)

สิ่งที่ฉันหายไปที่นี่?


@Smaji: คุณหมายถึงอะไร "แต่เมื่อพิจารณาเฉพาะกรณีที่เลวร้ายที่สุดอะไรคือจุดของการมีเครื่องหมายโอใหญ่และโอเมก้าขนาดใหญ่เมื่อกรณีที่เลวร้ายที่สุดมี + - ความซับซ้อนเดียวกัน (Theta จะเป็นสิ่งที่เราต้องการใช่มั้ย?)" กรุณาชี้แจง
tanmoy

@Smajl: ฉันคิดว่าคำถามของคุณคือ: อะไรคือความจำเป็นของ Big O และ Big Omega สัญกรณ์ในการวิเคราะห์อัลกอริทึม? ฉันถูกไหม?
tanmoy

5
ไม่เฉพาะเจาะจงยิ่งกว่า O ( บันทึกn )แต่จะแสดงถึงคลาสเดียวกันของฟังก์ชัน O(log2n)O(logn)
Raphael

เป็นเช่นเดียวกับ l o g ( b ) / l o g ( 2 ) × l o g b ( n )ดังนั้น 2 เพียงแสดงถึงปัจจัยที่สามารถลบได้ (เช่นปัจจัยอื่น ๆ ที่มีขนาดใหญ่ -O.log2(n)log(b)/log(2)×logb(n)
ctrl-alt-delor

คำตอบ:


39

สัญกรณ์กุ๊บหมายถึงขอบเขต asymptotic ในฟังก์ชั่น ดูที่นี่สำหรับคำอธิบายความแตกต่างระหว่างที่ , ΩและΘOΩΘ

เวลาที่แย่ที่สุด - ดีที่สุด - เฉลี่ยหรือคุณ - ชื่อ - มัน - เคสอธิบายถึงฟังก์ชั่นรันไทม์ที่แตกต่าง: หนึ่งสำหรับลำดับของรันไทม์ที่สูงที่สุดของใด ๆ ที่ได้รับหนึ่งสำหรับที่ต่ำสุดและอื่น ๆ ..n

ทั้งสองไม่มีอะไรเกี่ยวข้องกัน คำจำกัดความเป็นอิสระ ตอนนี้เราสามารถไปข้างหน้าและกำหนดขอบเขตในการทำงานเชิงรันไทม์: บน ( ) ลดลง ( Ω ) หรือทั้งสอง ( Θ ) เราสามารถทำได้ทั้งในกรณีที่แย่ที่สุด - ดีที่สุด - หรืออื่น ๆOΩΘ

ยกตัวอย่างเช่นในการค้นหาไบนารีที่เราได้รับกรณีที่ดีที่สุด asymptotic รันไทม์ของและ asymptotic เลวร้ายที่สุดกรณีของΘ ( log n )Θ(1)Θ(logn)


สิ่งสำคัญสำหรับฉันคือเราสามารถทำการวิเคราะห์ที่แย่ที่สุดและดีที่สุดสำหรับฟังก์ชันที่มีขอบเขตแบบอะซิมโทติค สำหรับฉันนั่นแสดงให้เห็นถึงความเป็นอิสระของ Big O กับการวิเคราะห์กรณีที่เลวร้ายที่สุด ขอบคุณ!
Patrick

1
@ แพทริคไม่มาก ก่อนอื่นคุณต้องตัดสินใจว่าต้องการวิเคราะห์ที่แย่ที่สุด - ปานกลาง - ดีที่สุดหรือไม่ จากนั้นคุณจะได้รับฟังก์ชั่นค่าใช้จ่าย (หรือการประมาณที่ดีที่สุดเท่าที่จะทำได้) เท่านั้นแล้วคุณจะใช้ asymptotics ถ้าที่ทั้งหมด
Raphael

17

พิจารณาอัลกอริทึมต่อไปนี้ (หรือโพรซีเดอร์หรือส่วนของโค้ดหรืออะไรก็ตาม):

Contrive(n)
1. if n = 0 then do something Theta(n^3)
2. else if n is even then
3.    flip a coin
4.    if heads, do something Theta(n)
5.    else if tails, do something Theta(n^2)
6. else if n is odd then
7.    flip a coin
8.    if heads, do something Theta(n^4)
9.    else if tails, do something Theta(n^5)

ฟังก์ชั่น asymptotic ของฟังก์ชั่นนี้คืออะไร?

ในกรณีที่ดีที่สุด (โดยที่คือแม้) รันไทม์เป็นΩ ( n )และO ( n 2 )แต่ไม่ΘอะไรnΩ(n)O(n2)Θ

ในกรณีที่เลวร้ายที่สุด (ที่เป็นเลขคี่) รันไทม์เป็นΩ ( n 4 )และO ( n 5 )แต่ไม่ΘอะไรnΩ(n4)O(n5)Θ

ในกรณีที่รันไทม์คือΘ ( n 3 )n=0Θ(n3)

Θ


1
nmod4


1

OΘT(n)=n2+n+2T(n)=O(n2)T(n)=Θ(n2)OΘΩOΘ

OΘΘΘ(1)Θ(logn)OO(logn)ΘOในขณะที่การสนทนาไม่จำเป็นต้องเป็นจริง


O(logn)Θ(logn)

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