ข้อผิดพลาดในการใช้สัญลักษณ์ asymptotic


10

ฉันพยายามที่จะเข้าใจสิ่งที่ผิดกับหลักฐานต่อไปนี้ของการเกิดซ้ำต่อไปนี้

T(n)≤2(c⌊n

T(n)=2T(⌊n2⌋)+n
T(n)≤2(c⌊n2⌋)+n≤cn+n=n(c+1)=O(n)

เอกสารบอกว่ามันผิดเพราะสมมติฐานอุปนัยที่ ฉันหายไปไหน?

T(n)≤cn

2
เกิดซ้ำในรูปแบบนี้จะสามารถแก้ไขได้โดยใช้ทฤษฎีบทโท
— Juho

2
@ รัน: ฉันไม่คิดว่าทฤษฎีบทหลักเป็นแท็กที่เหมาะสมสำหรับคำถามนี้ คำถามไม่ได้เกี่ยวกับวิธีการแก้ปัญหา แต่เพื่อชี้ให้เห็นถึงการเข้าใจผิดในการโต้แย้งโดยเฉพาะ นอกจากนี้ทฤษฎีบทหลักอาจมีลักษณะเฉพาะเจาะจงเกินไปและอาจไม่สมควรมีแท็กของตนเอง โดยทั่วไปเราควรติดแท็กตามคำถามไม่ใช่คำตอบที่เป็นไปได้ ตัวอย่างเช่นคุณจะแท็ก akra-bazzi นี้หรือไม่
— Aryabhata

"เกิดอะไรขึ้นกับข้อพิสูจน์ต่อไปนี้" - ฉันไม่เห็นข้อพิสูจน์ มันมักจะเป็นประโยชน์ในการเขียนหลักฐานที่สมบูรณ์ (เช่นทำให้การเหนี่ยวนำชัดเจน) เพื่อจุดผิดพลาด
— Raphael

คำถามทั่วไปที่เกี่ยวข้องเพิ่มเติมคือ แก้หรือใกล้เคียงกับความสัมพันธ์ที่เกิดขึ้นอีกสำหรับลำดับของตัวเลข
— Juho

คำตอบ:


12

สมมติว่าเป้าหมายสุดท้ายคือการพิสูจน์ ) คุณเริ่มต้นด้วยสมมติฐานการเหนี่ยวนำ:T(n)=O(n)

ทั้งหมดของฉัน< nT(i)≤cii<n

และเพื่อให้การพิสูจน์สมบูรณ์คุณต้องแสดงให้เห็นว่าเช่นกันT(n)≤cn

อย่างไรก็ตามสิ่งที่คุณสามารถอนุมานได้คือซึ่งไม่มีประโยชน์ในการพิสูจน์ให้สมบูรณ์ คุณต้องการหนึ่งคงคสำหรับ (เกือบ) ทุกn ดังนั้นเราไม่สามารถสรุปอะไรได้เลยและT ( n ) = O ( n )ไม่ได้รับการพิสูจน์T(n)≤(c+1)ncnT(n)=O(n)

ขอให้สังเกตว่าคุณสับสนระหว่างผลลัพธ์และกระบวนการพิสูจน์ และอีกจุดหนึ่งเป็นจริงΘ ( n log n )ในกรณีนี้ดังนั้นคุณอาจพิจารณาสมมุติฐานอุปนัยที่เหมาะสมเพื่อให้สามารถพิสูจน์ได้T(n)Θ(nlog⁡n)


ถ้าเราแทนที่ c '= c + 1 มันจะทำการเปลี่ยนแปลงหรือไม่?
— Erb

@erb: ไม่มันจะไม่ คุณต้องพิสูจน์ค่าคงที่ที่เลือก หากแทนที่ในที่สุดคุณก็มี T ( n ) ≤ ( c ′ + 1 ) n (หรือT ( n ) ≤ ( c + 2 ) n ) ดังนั้นผลลัพธ์จะเหมือนกัน c′=c+1T(n)≤(c′+1)nT(n)≤(c+2)n
— pad

8

คุณข้ามไปไม่กี่ขั้นตอน ดูเหมือนว่าคุณกำลังพยายามพิสูจน์โดยอุปนัยที่T(n)=O(n)และหลักฐานของคุณไปที่:

สมมติว่าสำหรับk < n หมายความว่าT ( k )T(k)=O(k)k<nสำหรับบางค จากนั้น T ( n ) = 2 T ( ⌊ n / 2 ⌋ ) + n ≤ 2 c ⌊ n / 2 ⌋ + n ≤ ( c +T(k)≤คkค , ดังนั้น T ( n ) = O ( n )T(n)=2T(⌊n/2⌋)+n≤2c⌊n/2⌋+n≤(c+1)nT(n)=O(n) )

การพิสูจน์นี้ผิดไปตั้งแต่เริ่มต้น:“ สำหรับk < n ” ไม่สมเหตุสมผล บิ๊กโอ้เป็นความคิดเชิงความหมาย: T ( k ) = O ( k )หมายความว่ามีค่าคงที่cและขีด จำกัด Nเช่นนั้น∀ k ≥ N , T ( k ) ≤ cT(k)=O(k)k<nT(k)=O(k)c . และอีกครั้งในตอนท้ายคุณไม่สามารถสรุปได้ว่า“ T ( n ) = O ( n ) ” เพราะมันบอกอะไรบางอย่างเกี่ยวกับฟังก์ชั่น Tโดยรวมและคุณได้พิสูจน์บางอย่างเกี่ยวกับค่าเฉพาะ T ( n ) .∀k≥N,T(k)≤ckT(n)=O(n)TT(n)

คุณต้องมีความชัดเจนเกี่ยวกับความหมายของดังนั้นอาจเป็นข้อพิสูจน์ของคุณ:O

สมมติว่าสำหรับทุก k < n จากนั้น T ( n ) = 2 T ( ⌊ n / 2 ⌋ ) + n ≤ 2 c ⌊ n / 2 ⌋ + n ≤ ( c + 1 )T(k)≤ckk<n .T(n)=2T(⌊n/2⌋)+n≤2c⌊n/2⌋+n≤(c+1)n

สิ่งนี้ไม่ได้พิสูจน์ขั้นตอนอุปนัย: คุณเริ่มต้นจากและคุณพิสูจน์ว่าสำหรับ k = n , T ( k ) ≤ ( c + 1 )T(k)≤ckk=n . นี่เป็นข้อ จำกัด ที่อ่อนแอกว่า ดูความหมายของสิ่งนี้: T ( k ) ≤ cT(k)≤(c+1)kหมายความว่าคจะมุ่งอัตราการเจริญเติบโตของT แต่คุณมีอัตราคที่เพิ่มขึ้นเมื่อ kเพิ่มขึ้น นั่นไม่ใช่การเติบโตเชิงเส้น!T(k)≤ckcTck

ถ้าคุณมองอย่างใกล้ชิดคุณจะสังเกตเห็นว่าอัตราดอกเบี้ยที่เติบโตโดย1เมื่อใดก็ตามที่kคู่ผสม ดังนั้นอย่างไม่เป็นทางการถ้าm = 2 p kดังนั้นc m = c k + p ; กล่าวอีกนัยหนึ่งc k = c 0 log 2 kc1km=2pkcm=ck+pck=c0log2⁡k k

สิ่งนี้สามารถทำได้อย่างแม่นยำ พิสูจน์โดยอุปนัยว่าสำหรับ , T ( k ) ≤ c log 2 ( k )k≥1T(k)≤clog2⁡(k) )

ความสัมพันธ์ที่เกิดซ้ำเป็นเรื่องปกติสำหรับอัลกอริทึมการหารและการพิชิตที่แยกข้อมูลออกเป็นสองส่วนเท่า ๆ กันในเวลาเชิงเส้น อัลกอริทึมดังกล่าวทำงานในเวลา (ไม่ใช่ O ( n ) )Θ(nlog(n))O(n)

หากต้องการดูว่าผลที่คาดหวังคือคุณสามารถตรวจสอบความสัมพันธ์เวียนเกิดกับทฤษฎีบทหลัก การแบ่งเป็นและงานพิเศษที่ทำคือn ; log 2 ( 2 ) = 1ดังนั้นนี่เป็นกรณีที่สองซึ่งการเติบโตคือΘ ( n2T(n/2)nlog2⁡(2)=1 )Θ(nlog⁡(n))


7

ฉันกำลังขยายคำตอบที่ได้รับไปแล้วอาจจะอธิบายความคิดเห็นของฉันในรายละเอียดเพิ่มเติมเท่านั้น

เนื่องจากการเดาได้ยากและน่าเบื่อบางครั้งก็มีวิธีที่ดีกว่า วิธีการหนึ่งที่ดังกล่าวเป็นโททฤษฎีบท การเกิดซ้ำของเราอยู่ในขณะนี้ในรูปแบบที่≥ 1และข> 1มีค่าคงที่และF ( n )ฟังก์ชั่น โปรดทราบว่าในกรณีของเรา⌊ n / 2 ⌋สามารถตีความได้ว่าหมายถึงn / 2T(n)=aT(n/b)+f(n)a≥1b>1f(n)⌊n/2⌋n/2. เพื่อความถูกต้องทางเทคนิคการเกิดซ้ำของเราอาจไม่ชัดเจนเนื่องจากอาจไม่ใช่จำนวนเต็ม อย่างไรก็ตามสิ่งนี้ได้รับอนุญาตเพราะมันจะไม่ส่งผลกระทบต่อพฤติกรรม asymptotic ของการเกิดซ้ำ ดังนั้นเรามักพบว่าสะดวกในการปูพื้นและเพดาน การพิสูจน์อย่างเป็นทางการของเรื่องนี้ค่อนข้างน่าเบื่อ แต่ผู้อ่านที่สนใจสามารถค้นหาได้จากCormen et al หนังสือn/2

ในกรณีของเราเรามี= 2 , B = 2 , F ( n ) = Θ ( n ) ซึ่งหมายความว่าเราได้n เข้าสู่ระบบข = n เข้าสู่ระบบ2 2 = n กรณีที่สองของนายทฤษฎีบทใช้ตั้งแต่ฉ( n ) = Θ ( n )และเรามีวิธีการแก้T ( n ) = Θ ( n บันทึกa=2b=2f(n)=Θ(n)nlogb⁡a=nlog2⁡2=nf(n)=Θ(n) )T(n)=Θ(nlog⁡n)


ขอบคุณ! อาจสังเกตได้ว่า "การวางพื้นและเพดาน" สอดคล้องกับการสมมติว่าซึ่งเป็นเรื่องปกติ ข้อสังเกตพื้นฐานคือสำหรับฟังก์ชั่นที่ไม่ลดลงการเติบโตของซีมโทติคเท่ากับการเติบโตของซีมโทติคของลำดับทั้งหมด n=2k
— Raphael
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.