อาจมีบางครั้งที่คุณเจอเหตุการณ์ประหลาดเช่นนี้:
ถ้าคุณชอบฉันคุณจะรู้ว่าคุณไม่สามารถใช้ทฤษฎีบทหลักแล้วคุณอาจคิดว่า " อืม ... บางทีการวิเคราะห์ต้นไม้เกิดขึ้นอีกอาจทำงานได้ " จากนั้นคุณจะรู้ว่าต้นไม้เริ่มทำรายได้เร็วมาก หลังจากค้นหาบนอินเทอร์เน็ตคุณจะเห็นว่าวิธีAkra-Bazziจะใช้งานได้! จากนั้นคุณเริ่มมองเข้าไปในนั้นและตระหนักว่าคุณไม่ต้องการทำคณิตศาสตร์ทั้งหมด หากคุณเป็นเหมือนฉันจนถึงจุดนี้คุณจะตื่นเต้นที่ได้รู้ว่ามีวิธีที่ง่ายกว่าT(n)={c2T(n5)+4T(n7)+cnn<7n≥7
ทฤษฎีบทแบ่งที่ไม่สม่ำเสมอส่วนที่ 1
ให้และเป็นค่าคงที่บวกck
แล้วปล่อยให้เป็นค่าคงที่บวกดังกล่าวว่า<1{a1,a2,…,ak}∑k1ai<1
เราต้องมีการทำซ้ำของแบบฟอร์ม (เช่นตัวอย่างด้านบน):
T(n)T(n)≤c≤cn+T(a1n)+T(a2n)+…T(akn)0<n<max{a−11,a−12,…,a−1k}n≥max{a−11,a−12,…,a−1k}
ข้อเรียกร้อง
จากนั้นฉันอ้างว่าโดยที่คือค่าคงที่ (เช่นเชิงเส้นเชิงเส้นกำกับ) และ:T(n)≤bnb
b=c1−(∑k1ai)
พิสูจน์โดยการเหนี่ยวนำ
พื้นฐาน :n<max{a−11,a−12,…,a−1k}⟹T(n)≤c<b<bn
การเหนี่ยวนำ : สมมติว่าเป็นจริงสำหรับเราก็มีn′<n
T(n)≤cn+T(⌊a1n⌋)+T(⌊a2n⌋)+⋯+T(⌊akn⌋)≤cn+b⌊a1n⌋+b⌊a2n⌋+⋯+b⌊akn⌋≤cn+ba1n+ba2n+⋯+bakn=cn+bn∑1kai=cn−cn∑k1ai1−(∑k1ai)+cn∑k1ai1−(∑k1ai)=cn1−(∑k1ai)=bn□
แล้วเรามี(n)T(n)≤bn⟹T(n)=O(n)
ตัวอย่าง
T(n)={c2T(n5)+4T(n7)+cnn<7n≥7
ก่อนอื่นเราตรวจสอบค่าสัมประสิทธิ์ในผลรวมการโทรซ้ำเพื่อน้อยกว่าหนึ่ง:
1>∑1kai=15+15+17+17+17+17=25+47=3435
ต่อไปเราจะตรวจสอบว่ากรณีฐานน้อยกว่าค่าสูงสุดของค่าผกผัน:
n<max{a−11,a−12,…,a−1k}=max{5,5,7,7,7,7}=7
เมื่อพบกับเงื่อนไขเหล่านี้เรารู้ว่าโดยที่คือค่าคงที่เท่ากับ:
ดังนั้นเราจึงมี:
T(n)≤bnbb=c1−(∑k1ai)=c1−3435=35c
T(n)∧T(n)∴T(n)≤35cn≥cn=Θ(n)
ทฤษฎีบทแบ่งที่ไม่สม่ำเสมอส่วนที่ 2
ในทำนองเดียวกันเราสามารถพิสูจน์ที่ถูกผูกไว้สำหรับเมื่อ1 หลักฐานจะเป็นไปตามรูปแบบเดียวกันมาก:∑k1=1
ให้และเป็นค่าคงที่บวกดังกล่าวว่า1ckk>1
แล้วปล่อยให้เป็นค่าคงที่บวกดังกล่าวว่า1{a1,a2,…,ak}∑k1ai=1
เราต้องมีการทำซ้ำของแบบฟอร์ม (เช่นตัวอย่างด้านบน):
T(n)T(n)≤c≤cn+T(a1n)+T(a2n)+…T(akn)0<n<max{a−11,a−12,…,a−1k}n≥max{a−11,a−12,…,a−1k}
ข้อเรียกร้อง
จากนั้นฉันอ้างว่า (เราเลือกฐานเนื่องจากจะเป็นปัจจัยการแตกกิ่งก้านของต้นไม้เรียกซ้ำ) โดยที่และเป็นค่าคงที่ (เช่นเชิงเส้นตรงเชิงเส้นกำกับ ) ดังนั้น:T(n)≤αnlogkn+βnlogkkαβ
β=c
และ
α=c∑k1ailogka−1i
พิสูจน์โดยการเหนี่ยวนำ
พื้นฐาน :n<max{a−11,a−12,…,a−1k}⟹T(n)≤c=β<αnlogkn+βn
การเหนี่ยวนำ : สมมติว่าเป็นจริงสำหรับเราก็มีn′<n
T(n)≤cn+T(⌊a1n⌋)+T(⌊a2n⌋)+⋯+T(⌊akn⌋)≤cn+∑1k(αainlogkain+βain)=cn+αn∑1k(ailogkain)+βn∑1kai=cn+αn∑1k(ailogkna−1i)+βn=cn+αn∑1k(ai(logkn−logka−1i))+βn=cn+αn∑1kailogkn−αn∑1kailogka−1i+βn=αn∑1kailogkn+βn=αnlogkn+βn□
แล้วเรามีlog)T(n)≤αnlogkn+βn⟹T(n)=O(nlogn)
ตัวอย่าง
ลองปรับเปลี่ยนตัวอย่างก่อนหน้านี้ที่เราใช้เพียงเล็กน้อย:
T(n)={c2T(n5)+4T(n7)+T(n35)+cnn<35n≥35
ก่อนอื่นเราตรวจสอบค่าสัมประสิทธิ์ในการโทรซ้ำแบบเรียกซ้ำ
1=∑1kai=15+15+17+17+17+17+135=25+47+135=3535
ต่อไปเราจะตรวจสอบว่ากรณีฐานน้อยกว่าค่าสูงสุดของค่าผกผัน:
n<max{a−11,a−12,…,a−1k}=max{5,5,7,7,7,7,35}=35
เมื่อพบกับเงื่อนไขเหล่านี้เรารู้ว่าโดยที่และมีค่าคงที่เท่ากับ:
ดังนั้นเราจึงมี:
T(n)≤αnlogn+βnβ=cαb=c∑k1ailogka−1i=c2log755+4log777+log73535≈1.048c
T(n)∴T(n)≤1.048cnlog7n+cn=O(nlogn)