การแก้ไขหรือการประมาณความสัมพันธ์ที่เกิดซ้ำสำหรับลำดับของตัวเลข


89

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

ตัวอย่างคือ

  1. รันไทม์ของฟังก์ชั่น tail-recursive ลดลงเหลือจากซึ่งร่างกายใช้เวลา :0nf(n)

    T(0)=0T(n+1)=T(n)+f(n)

  2. ลำดับฟีโบนักชี :

    F0=0F1=1Fn+2=Fn+Fn+1

  3. จำนวนคำ Dyckกับคู่วงเล็บ:n

    C0=1Cn+1=i=0nCiCni

  4. การเกิดซ้ำรันไทม์การผสานบนรายการความยาว :n

    T(1)=T(0)=0T(n)=T(n/2)+T(n/2)+n1

วิธีใดในการแก้ปัญหาความสัมพันธ์ที่เกิดซ้ำ เรากำลังมองหา

  • วิธีการทั่วไปและ
  • วิธีการสำหรับคลาสย่อยที่สำคัญ

เช่นกัน

  • วิธีการที่ให้ทางออกที่แม่นยำและ
  • วิธีการที่ให้ (ขอบเขตบน) การเจริญเติบโตแบบซีมโทติค

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


9
หมายเหตุเหล่านี้อาจเป็นประโยชน์ (แต่ไม่ฉันจะไม่คัดลอกมันเป็นคำตอบ)
JeffE

คำตอบ:


35

การแปลงประวัติเต็มเป็นประวัติ จำกัด

นี่คือขั้นตอนแรกในการแก้ซ้ำที่มีค่าที่จำนวนเต็มใด ๆ ขึ้นอยู่กับค่าที่ทุกจำนวนเต็มขนาดเล็ก พิจารณาตัวอย่างเช่นการเกิดซ้ำ ที่เกิดขึ้น ในการวิเคราะห์ของquicksort แบบสุ่ม (ที่นี่เป็นยศเดือยสุ่มเลือก.) สำหรับจำนวนเต็มใด ๆค่าของขึ้นอยู่กับทุกกับ<n การเกิดซ้ำของแบบฟอร์มนี้เรียกว่าการเกิดซ้ำแบบเต็มประวัติknT(n)T(k)k<n

T(n)=n+1nk=1n(T(k1)+T(nk))
knT(n)T(k)k<n

ในการแก้ปัญหาการเกิดซ้ำเราสามารถแปลงให้เป็นการเกิดซ้ำแบบจำกัดโดยที่ขึ้นอยู่กับค่าก่อนหน้าจำนวนคงที่เท่านั้น แต่ก่อนอื่นจะช่วยให้การเกิดซ้ำง่ายขึ้นเล็กน้อยเพื่อรวบรวมคำศัพท์ทั่วไปและกำจัดเศษส่วนที่น่ารำคาญ ตอนนี้เพื่อแปลงเป็นการเกิดซ้ำแบบ จำกัด ประวัติ เราเขียนการเกิดซ้ำของลบและรวบรวมคำศัพท์ใหม่: start n T ( n )T(n) T(n-1) ( n - 1 ) T ( n - 1 )

nT(n)=n2+2k=1n1T(k)
T(n1)
(n1)T(n1)=(n1)2+2k=1n2T(k)nT(n)(n1)T(n1)=(2n1)+2T(n1)nT(n)=(2n1)+(n+1)T(n1)T(n)n+1=2n1n(n+1)+T(n1)n

ตอนนี้ถ้าเรากำหนดและแทนที่เศษส่วนด้วยรูปแบบ asymptotic ที่ง่ายกว่าเราได้รับการเกิดซ้ำง่ายกว่า ขยายการกำเริบนี้ลงบวกทันทีจะช่วยให้เราที่เป็น TH จำนวนฮาร์โมนิ เราสรุปได้ว่าn)}2 n - 1t(n)=T(n)/(n+1) Θ(1/n)T(n)=Θ(1/n)+T(n-1) t(n)=Θ(Hn)=Θ(บันทึกn)2n1n(n+1)Θ(1/n)

t(n)=Θ(1/n)+t(n1).
t(n)=Θ(Hn)=Θ(logn) nHnnT(n)=Θ(nlogn)

1
ถ้าคุณต้องการคำตอบที่แม่นยำสำหรับนั่นก็ไม่ใช่เรื่องยาก (ที่นี่) ถ้าเป็นเรื่องน่าเบื่อ เราได้รับ(0) ที่จริงแล้วทำให้ฉันสับสนดังนั้นฉันจึงชอบตัวแปรที่แม่นยำ น่าชังผลรวมของคำกุ๊บ T ( n ) = 2 ( n + 1 ) H n + ( T ( 0 ) - 3 ) n + T ( 0 ) n i = 1 Θ ( 1 / i ) = Θ ( H n )TT(n)=2(n+1)Hn+(T(0)3)n+T(0)i=1nΘ(1/i)=Θ(Hn)
กราฟิลส์

ที่จริงแล้วมันพอเพียงที่จะสังเกต (inductively) ว่า , โดยที่1) ในความเป็นจริงผมใช้อยู่แล้วเคล็ดลับว่าในช่วงเริ่มต้นมากเมื่อฉันแทนที่เวลาในการแบ่งพาร์ติชันอาร์เรย์กับง่ายnนี่คือการใช้สัญลักษณ์ในทางที่ผิดมาตรฐานอย่างเต็มที่ t ( n ) = 1 / n + t ( n - 1 ) Θ ( n ) nT(n)/(n+1)=Θ(t(n))t(n)=1/n+t(n1)Θ(n)n
JeffE

28

การสร้างฟังก์ชั่น

ชุดของตัวเลขทุกสอดคล้องกับฟังก์ชั่นการสร้าง บ่อยครั้งที่มันสามารถได้รับอย่างสะดวกสบายจากการเกิดซ้ำเพื่อให้ได้ค่าสัมประสิทธิ์ - องค์ประกอบของซีรีส์ - ดึงออกมา

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

วิธีการ

ให้ชุดตัวเลข จากนั้นชุดพลังอย่างเป็นทางการ(an)nN

A(z)=n=0anzn

เป็นธรรมดาสร้างฟังก์ชัน ¹ของ NATS} ค่าสัมประสิทธิ์การขยายตัวในชุดของเท่ากับลำดับเช่นa_n ตัวอย่างเช่นฟังก์ชันสร้างสามัญของหมายเลขคาตาลันที่มีชื่อเสียงคือ A ( z ) [ z n ] A ( z ) = a n C n(an)nNA(z)[zn]A(z)=an Cn

C(z)=114z2z4z}}}

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

a0=c0ak1=ck1an=f(n)+i=1kbiani,nk

สำหรับบางคนคงและอิสระการทำงานของทุกÄ_iตอนนี้เราเพียงแค่ใส่จุดยึดและส่วนที่เรียกซ้ำเข้าไปใน ansatz นั่นก็คือ f ( n ) : NN a ib1,,bkRf(n):NNai

A(z)=n=0anzn=c0z0+c1z1++ck1zk1+n=k[f(n)+(i=1kbiani)]zn

โดยใช้กลไกของการจัดการผลรวมคุณสมบัติของชุดไฟอย่างเป็นทางการและเป็นที่รู้จักในตัวตน ², ด้านขวามือสุดท้ายจะต้องมีการนำเข้ามาในรูปแบบปิดโดยทั่วไปในแง่ของ(z) สมผลให้สามารถ (มัก) ได้รับการแก้ไขสำหรับ(z) การขยายผลแบบอนุกรม (ซึ่งอาจหาได้ง่ายรู้หรือเข้าถึงได้) เป็นวิธีแก้ปัญหาA ( z )A(z)A(z)

คำนำที่ดีสามารถพบได้ในหนังสือของ Wilf [3] และใน GKP [4] วัสดุขั้นสูงได้รับการรวบรวมโดย Flajolet และ Sedgewick [5]

ตัวอย่าง

พิจารณา

a0=1a1=2an=5n+3an12an2,n>1

เราคำนวณ:

A(z)=n=0anzn=1+2z+n=2[3an12an2+5n]zn=1+2z+3n=2an1zn2n=2an2zn+5n=2nzn=1+2z+3zn=1anzn2z2n=0anzn+5n=2nzn=1+2z+3z(A(z)a0)2z2A(z)+5(z(1z)2z)=16z+(3z2z2)A(z)+5z(1z)2

วิธีนี้แก้ได้

A(z)=13z+13z26z3(12z)(1z)3=1612z51z5(1z)25(1z)3=16n=02nzn5n=0zn5n=0(n+1)zn5n=0(n+1)(n+2)2zn

ตอนนี้เราสามารถอ่านออกได้ในที่สุด

an=162n55(n+1)52(n+1)(n+2)=2n+452n2252n15

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

โปรดทราบด้วยว่าเทคนิคทั่วไปยังใช้งานได้หากวัตถุที่ค้นหานั้นเป็นจำนวนเชิงซ้อน

ทางลัด

สำหรับการเกิดซ้ำเชิงเส้นและเป็นเนื้อเดียวกันเช่นรูปแบบ

a0=c0ak1=ck1an=i=1kbiani,nk

ข้างต้นจะผ่านในลักษณะเดียวกันทุกครั้ง โดยดำเนินการคำนวณข้างต้นสัญลักษณ์เราพบต่อไปนี้แทรก ปล่อย

zkb1zk1b2zk2bk

เป็นพหุนามลักษณะ (ของการเกิดซ้ำ) ให้อีกเลขศูนย์ ( ) ของพหุนามที่กล่าวด้วยตามลำดับ จากนั้นค่าสัมประสิทธิ์ที่ต้องการจะได้รับจากR ฉันλ1,,λlri

an=i=1lj=1ribi,jnj1λin

กับที่ไม่รู้จักj} ในฐานะที่เป็นพหุนามลักษณะมีปริญญามีตรง (ซับซ้อน) ศูนย์คือรวมไปkดังนั้นค่าสัมประสิทธิ์ที่ขาดหายไปสามารถถูกกำหนดได้โดยการแก้ระบบสมการเชิงเส้นด้วยสมการได้รับโดยการเทียบสูตรข้างต้นกับใด ๆของ (เช่นจุดยึด) k k r ฉัน k k k a nbi,jkkrikkkan

asymptotics

การไปยังแบบฟอร์มปิดสำหรับมักเป็นส่วนที่ง่าย การแสดงมันในการสร้างฟังก์ชั่นเรารู้ว่าสัมประสิทธิ์ของ (อย่างที่เราทำในตัวอย่าง) กลายเป็นเรื่องยากอย่างรวดเร็ว ตัวอย่างคือจากด้านบนและอีกอันสำหรับจำนวนของคำ Dyck ที่กล่าวถึงในคำถามC ( z )A(z)C(z)

เราสามารถใช้เครื่องมือวิเคราะห์ที่ซับซ้อนโดยเฉพาะการวิเคราะห์ภาวะเอกฐานเพื่อให้ได้ค่าสัมประสิทธิ์สำหรับค่าสัมประสิทธิ์ buzzwords รวมถึงวิธีการของ Darboux และวิธี saddle-point เหล่านี้จะขึ้นอยู่กับทฤษฎีบทสารตกค้างและสูตรหนึ่งของ Cauchy ดูรายละเอียด [6]


  1. คุณสามารถทำสิ่งที่คล้ายกันกับชี้แจง , Dirichletและฟังก์ชั่นการสร้างอื่น ๆ ซึ่งทำงานได้ดีที่สุดขึ้นอยู่กับลำดับที่อยู่ในมือและโดยเฉพาะอย่างยิ่งไม่ว่าคุณจะพบรูปแบบปิดที่จำเป็น
  2. ตัวอย่างเช่นจากTCS Cheat Sheetหรือ [3]
  3. การสร้างฟังก์ชั่นโดย H. Wilf (1994, 2nd ed.) - สามารถดาวน์โหลดได้ฟรี
  4. คณิตศาสตร์คอนกรีตโดย RL Graham, DE Knuth และ O. Patashnik (1994, 2nd ed.)
  5. รู้เบื้องต้นเกี่ยวกับการวิเคราะห์อัลกอริทึมโดย R. Sedgewick และ P. Flajolet (รุ่นที่ 2, 2013) - สามารถดาวน์โหลดได้ฟรี
  6. เครื่องวิเคราะห์เชิงเลขโดย P. Flajolet และ R. Sedgewick (2009) - สามารถดาวน์โหลดได้ฟรี

21

ทฤษฎีมหาบัณฑิต

ทฤษฎีบทโทให้ asymptotics สำหรับการแก้ปัญหาของสิ่งที่เรียกว่าการแบ่งและพิชิตซ้ำว่าเป็นเช่นนั้นแบ่งพารามิเตอร์ของพวกเขาเป็นชิ้นตามสัดส่วน (แทนการตัดค่าคงที่) โดยทั่วไปแล้วจะเกิดขึ้นเมื่อทำการวิเคราะห์ (เรียกซ้ำ) หารและเอาชนะอัลกอริธึมดังนั้นชื่อ ทฤษฎีบทดังกล่าวเป็นที่นิยมเพราะมักจะใช้งานง่ายอย่างไม่น่าเชื่อ ในทางกลับกันมันสามารถใช้ได้กับการเกิดซ้ำของแบบฟอร์มต่อไปนี้:

T(n)=aT(nb)+f(n)

กับ1 มีสามกรณีa1,b>1

  1. fO(nlogb(a)ε)

    สำหรับบาง ;ε>0

  2. fΘ(nlogbalogkn) ,

    สำหรับบาง ;k0

  3. fΩ(nlogb(a)+ε)

    สำหรับและε>0

    af(nb)cf(n)

    สำหรับบางและ\n c<1n

ซึ่งบ่งบอกถึง asymptotics

  1. TΘ(nlogba) ,
  2. TΘ(nlogbalogk+1n)และ
  3. TΘ(f) ,

ตามลำดับ โปรดทราบว่ากรณีฐานไม่ได้ระบุหรือใช้ที่นี่; มันสมเหตุสมผลแล้วเมื่อพิจารณาว่าเรากำลังศึกษาพฤติกรรมเชิงซีมโทติคเท่านั้น เราเงียบ ๆ คิดว่าพวกเขามีค่าคงที่บางคน (อะไรที่พวกเขาสามารถ. ซึ่งคงที่เราไม่เห็นไม่เกี่ยวข้องพวกเขาทั้งหมดหายไปใน\Θ

ตัวอย่าง

  1. พิจารณาการเกิดซ้ำ

    T(n)=4T(n3)+nn

    ด้วยและ - ทราบว่าเราเห็นกรณีที่หนึ่งนำไปใช้กับ0.25 ดังนั้นdots})B = 3 บันทึก1.26 ε = 0.25 T Θ ( n เข้าสู่ระบบ3 4 ) = Θ ( n 1.261 ... )f(n)=n,a=4b=3logba1.26ε=0.25TΘ(nlog34)=Θ(n1.261)

  2. พิจารณาการเกิดซ้ำ

    T(n)=2T(n/2)+nn

    ด้วยและ - ทราบว่าเราเห็นสองที่ใช้ในกรณีที่มี 0 ดังนั้นn)= 2 บันทึก = 1 k = 0 T Θ ( n log n )f(n)=n,a=2b=2logba=1k=0TΘ(nlogn)

  3. พิจารณาการเกิดซ้ำ

    T(n)=3T(n4)+nn

    ด้วยและ - ทราบว่าเราเห็นกรณีที่สามนำไปใช้กับและ 1 ดังนั้น(N)= 4 บันทึก0.79 ε = 0.2 C = 1 T Θ ( n )f(n)=n,a=3b=4logba0.79ε=0.2c=1TΘ(n)

  4. พิจารณาการเกิดซ้ำ

    T(n)=16T(n4)+n!

    ที่นี่เรามี ,และ- ตัวอย่างมาตรฐานจำนวนมากจะมีพหุนามแต่นี่ไม่ใช่กฎ เรามีและกรณีที่สามใช้อีกครั้ง ในกรณีนี้เราสามารถเลือกและเป็นสำหรับทุกkดังนั้น(n!)b = 4 f ( n ) = n ! f log b a = 2 ε c > 0 n ! โอห์ม( n k ) k T Θ ( n ! )a=16b=4f(n)=n!flogba=2εc>0n!Ω(nk)kTΘ(n!)

อ่านเพิ่มเติม

  • เป็นไปได้ว่าไม่มีกรณีของทฤษฎีบทต้นแบบที่ใช้ ตัวอย่างเช่นปัญหาย่อยอาจมีขนาดไม่เท่ากันหรือมีรูปแบบที่ซับซ้อนมากขึ้น มีการต่อเติมทฤษฎีบทหลักบางอย่างเช่นAkra-Bazzi [1] หรือ Roura [2] มีแม้กระทั่งรุ่นที่ใช้งานได้สำหรับการเกิดซ้ำแบบไม่ต่อเนื่อง (เช่นการใช้พื้นและเพดานบนพารามิเตอร์แบบเรียกซ้ำ) และให้ผลลัพธ์ที่คมชัดกว่า [3]

  • โดยปกติแล้วคุณต้องนวดความสัมพันธ์ที่เกิดขึ้นจริงที่คุณมีเป็นรูปร่างก่อนที่จะสามารถใช้ทฤษฎีบทโท แปลงทั่วไปที่รักษา asymptotics รวมถึงการวางชั้นและ ceils เช่นเดียวกับสมมติ k ระวังอย่าทำลายสิ่งต่าง ๆ ที่นี่; อ้างถึง [4] ส่วน 4.6 และคำถามนี้สำหรับรายละเอียดn=bk


  1. ในการแก้ปัญหาของสมการซ้ำเชิงเส้นโดย M. Akra และ L. Bazzi (1998)
  2. ทฤษฎีต้นแบบที่ได้รับการปรับปรุงสำหรับการเกิดซ้ำแบบแบ่งและพิชิตโดย S. Roura (1997)
    หมายถึงทฤษฎีบทต้นแบบที่ปรับปรุงใหม่อื่น ๆ
  3. ทฤษฎีบทหลักสำหรับการแบ่งแยกแบบแยกและพิชิตซ้ำโดย M. Drmota และ W. Szpankowski (2011)
  4. รู้เบื้องต้นเกี่ยวกับอัลกอริทึมโดย Cormen และคณะ (2009, รุ่นที่ 3)

นี่อาจเป็นคำถามที่โง่ แต่บ่อยครั้งที่ฉันล้มเหลวที่จะถือแบบจำลองทางจิตเมื่อ a ไม่เท่ากับ b ฉันไม่รู้ว่าทำไม แต่ด้วยสัญชาตญาณฉันมักจะรู้สึกว่าทั้งคู่ต้องเหมือนกันเสมอเหมือนในการรวมที่เราแบ่งปัญหา แบ่งเท่า ๆ กัน (เกือบ) สองเท่าและมีอินสแตนซ์ n / 2 แต่ละอัน ยิ่งกว่านั้นถ้าเราแบ่งอัลกอริทึมในสามส่วนเท่า ๆ กันแล้วอินพุทก็ควรถูกแบ่งออกเป็นสามส่วนเท่า ๆ กันซึ่งทำให้ a และ b เท่ากันอีกครั้ง ฉันจะทำลายสัญชาตญาณผิดนี้ได้อย่างไร
CodeYogi

17

เดาและพิสูจน์

หรือวิธีที่ฉันชอบเรียกว่า " เทคนิค " มันสามารถนำไปใช้กับตัวตนทุกชนิด ความคิดง่าย ๆ :

เดาวิธีแก้ปัญหาและพิสูจน์ความถูกต้อง

นี่เป็นวิธีที่นิยมเนื่องจากอาจต้องใช้ความคิดสร้างสรรค์และ / หรือประสบการณ์ (ดีสำหรับการแสดง) แต่กลไกบางอย่าง (ดูสง่างาม) ศิลปะที่นี่คือการคาดเดาความรู้ หลักฐานคือ (ในกรณีของเรา) มักจะเป็นอุปนัยแบบง่าย ๆ ไม่มากก็น้อย

เมื่อนำไปใช้กับการเกิดซ้ำโดยทั่วไปการคาดเดาจะกระทำโดย

  • การขยายการเกิดซ้ำสองครั้ง
  • หาจุดยึดและ
  • คาดเดารูปแบบสำหรับระดับกลาง ( )

ตัวอย่างง่ายๆ

s0=s1=s2=1sn=5sn3+6n2

ให้เราขยายคำจำกัดความของสองสามครั้ง:sn

sn=5sn3+6=5(5sn6+6)+6=5(5(5sn9+6)+6)+6 =5(5(5(51n÷3 times+6)+6)+6)+6n÷3 times

ที่นี่รูปแบบง่ายต่อการมองเห็นและมันนำเราไปสู่การเรียกร้อง:

sn=5n3+6i=0n315i=525n364

ตอนนี้เราพิสูจน์ตัวตนโดยอุปนัย สำหรับเราสามารถสร้างความถูกต้องได้โดยการเสียบค่าที่เกี่ยวข้อง สมมติว่าตัวตนถือสำหรับสำหรับการสุ่ม แต่คงที่เราคำนวณn n n 3n{0,1,2}nnn3

sn+3=5sn+6=5(525n364)+6=525n3+164=525n+3364

ซึ่งพิสูจน์ตัวตนด้วยพลังของการเหนี่ยวนำ

หากคุณพยายามที่จะใช้สิ่งนี้ในการเกิดซ้ำที่เกี่ยวข้องคุณจะพบกับข้อเสียที่สำคัญของวิธีนี้อย่างรวดเร็ว: มันยากที่จะเห็นรูปแบบหรือบีบให้เป็นรูปแบบปิดที่ดี

asymptotics

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

พิจารณาตัวอย่างเช่นการเกิดซ้ำรันไทม์ Mergesort ทำให้ง่ายขึ้นสำหรับกรณีของ ¹:n=2k

T(1)=T(0)=0T(n)=2T(n/2)+n1n1

เราเดาว่ามีค่าคงที่นั่นคือn เราพิสูจน์สิ่งนี้โดยอุปนัยมากกว่า ; ขั้นตอนอุปนัยมีลักษณะเช่นนี้:c = 1 T ( n ) n บันทึกn kT(n)O(nlogn)c=1T(n)nlognk

T(n)=2T(n/2)+n12n2logn2+n1=nlognnlog2+n1<nlogn


  1. สำหรับลำดับที่ไม่ลดลงของ naturals ทุกลำดับอนันต์มีการเติบโต asymptotic เช่นเดียวกับลำดับเดิม

15

วิธี Akra-Bazzi

วิธีAkra-Bazziให้ asymptotics สำหรับการเกิดซ้ำของแบบฟอร์ม: สิ่งนี้ครอบคลุมการเกิดซ้ำแบบหารและชนะแบบปกติ แต่ยังมีกรณีที่การแบ่งไม่เท่ากัน คำว่า "เหลวไหล"สามารถรองรับหน่วยงานที่ไม่ออกมาอย่างแน่นอน เงื่อนไขสำหรับการบังคับใช้คือ: h ฉัน ( x )

T(x)=1ikaiT(bix+hi(x))+g(x)for xx0
hi(x)
  • มีคดีพื้นฐานเพียงพอที่จะทำให้การกลับเป็นซ้ำเป็นไปได้
  • และมีค่าคงที่ทั้งหมดฉันaibi
  • สำหรับทั้งหมด,เป็นฉัน > 0iai>0
  • สำหรับทั้งหมดที่ ,0 < b ฉัน < 1i0<bi<1
  • c x |g(x)|=O(xc)สำหรับค่าคงที่เป็นcx
  • สำหรับทั้งหมดที่ ,| h i ( x ) | = O ( x / ( บันทึกx ) 2 )i|hi(x)|=O(x/(logx)2)
  • x0เป็นค่าคงที่

โปรดทราบว่าและในฐานะที่เป็นฟังก์ชั่นฟันเลื่อยอยู่ระหว่าง 0 และ 1 เสมอแทนที่ (หรือ เป็นที่เหมาะสม) ตอบสนองเงื่อนไขในการที่h_i{ U } = U - ยูฉัน x ฉัน x ชั่วโมงฉันbix=bix{bix}{u}=uubixbixhi

ค้นหาเช่นนั้น: จากนั้นพฤติกรรมเชิงของเป็นมอบให้โดย: ด้วย "ใหญ่พอ" นั่นคือเพื่อให้ สำหรับทุกx>1 ฉันk a ฉันb p i = 1 T ( x ) x T ( x ) = Θ ( x p ( 1 + x x 1 g ( u )p

1ikaibip=1
T(x)xx1k1>0g(x/2)k1g(x)x>x1
T(x)=Θ(xp(1+x1xg(u)up+1du))
x1k1>0
(2)g(x/2)k1g(x)
x>x1

ตัวอย่างก

เป็นตัวอย่างใช้การสอบถามซ้ำสำหรับโดยที่ : เงื่อนไขเป็นที่พอใจเราต้องการ : เป็นโชคดีจะได้มัน2 ดังนั้นเราจึงมี: n5T(0)=T(1)=T(2)=T(3)=T(4)=17

T(n)=9T(n/5)+T(4n/5)+3nlogn
p
9(15)p+(45)p=1
p=2
T(n)=Θ(n2(1+3n3uloguu3du))=Θ(n2)

ตั้งแต่เราปฏิบัติตามสำหรับทั้งหมด โปรดทราบว่าเนื่องจากอินทิกรัลรวมกันแม้ว่าเราจะใช้ค่าคงที่อื่นเช่นซึ่งเป็นขอบเขตล่าง ความแตกต่างในการหายตัวไป\k112(1log2log3)(2)x31Θ

ตัวอย่าง B

อีกตัวอย่างหนึ่งคือ : เรามีตรวจสอบ เรามีว่ามี ,ซึ่งเช็คเอาท์ สมมติว่าเป็นและ / หรือ ,โดยนัยก็เช่นกัน ดังนั้นเราต้องการ: ดังนั้นและ: n2

T(n)=4T(n/2)+n2/lgn
g(n)=n2/lnn=O(n2)a1=4b1=1/2n/2n/2n/2hi(n)
a1b1p=4(1/2)p=1
p=2
T(n)=Θ(n2(1+2nu2duu3lnu))=Θ(n2(1+2nduulnu))=Θ(n2lnlnn)
เราใช้เคล็ดลับที่คล้ายกับข้างบน ผูกพันล่างของหนึ่งเท่านั้นที่เราใช้เพราะหนึ่งไม่ได้มาบรรจบกันสำหรับ121

(ความช่วยเหลือของmaximaกับพีชคณิตได้รับการยอมรับอย่างสุดซึ้ง)


1
ฉันตรวจสอบกระดาษต้นฉบับ พวกเขามีข้อ จำกัด ทางเทคนิคในขอบเขตล่างของอินทิกรัล รุ่นของคุณ (อ้างถึงการสำรวจโดย Mehlhorn?) กำหนดไว้อย่างชัดเจนว่าอินทิกรัลรวมกัน เนื่องจากฉันคิดว่าสภาพดั้งเดิมนั้นง่ายต่อการตรวจสอบฉันจึงเปลี่ยนคำสั่งและตัวอย่างตามโปรดตรวจสอบ
Raphael

1
นอกจากนี้กระดาษต้นฉบับไม่ได้ให้รุ่นกับ ; นี้นำมาจากต้นฉบับของ Leighton หรือไม่ คุณมีการอ้างอิงแบบ peer-reviewed สำหรับสิ่งนั้นหรือไม่? เราควรย้ายไปใช้รุ่นที่ให้ไว้ในบทความปี 1998 โดย Akra & Bazzi หรือไม่? hi
Raphael

1
ฉันได้เจอสิ่งที่ดูเหมือนจะไม่สอดคล้องกันในทฤษฎีบท บางทีคุณอาจรู้คำตอบ?
กราฟิลส์

11

summations

บ่อยครั้งที่หนึ่งพบการเกิดซ้ำของแบบฟอร์ม ที่เป็นเสียงเดียว ในกรณีนี้เราสามารถขยาย และได้รับค่าเริ่มต้นเพื่อประเมินเราต้องประเมินผลรวม(เมตร)

T(n)=T(n1)+f(n),
f(n)
T(n)=T(c)+m=c+1nf(m),
T(c)T(n)f(c+1)++f(m)

ไม่ลดf(n)

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

f(n)m=c+1nf(m)(nc)f(n).
f(m)=1mnf(m)=0m<nf(m)=mn(nc)n

บูรณาการ

การประมาณที่ดีขึ้นจะได้รับจากการรวม: สำหรับสิ่งนี้จะให้ค่าที่ถูกต้องของผลรวมถึงเงื่อนไขการสั่งซื้อที่ต่ำ: เมื่อเราสามารถคำนวณผลรวมได้อย่างชัดเจน แต่ในหลายกรณีการคำนวณอย่างชัดเจนนั้นยาก ตัวอย่างเช่นเมื่อ antiderivative ของคือและดังนั้น

cnf(x)dxm=c+1nf(m)c+1n+1f(x)dx.
f(m)=m
12n212c2m=c+1nm12(n+1)212(c+1)2.
f(m)=mf(m)=mlogmf(1/2)x2logx(1/4)x2
m=c+1nmlogm=12n2logn±Θ(n2).

สูตรออยเลอร์-Maclaurinให้ประมาณการที่ดีขึ้น ตัวอย่างเช่นสูตรนี้สามารถใช้เพื่อพิสูจน์รูปแบบที่แข็งแกร่งของสูตรของสเตอร์ลิงโดยการประมาณผลรวมบันทึกเมตรlogn!=m=1nlogm

ที่ไม่ใช่การเพิ่มf(n)

ในบางกรณีเป็นเสียงเดียวที่ไม่เพิ่มขึ้น การประมาณค่าเล็กน้อยกลายเป็น และการประมาณค่าอินทิกรัล ตัวอย่างเช่นสำหรับโดยใช้เราได้รับ f(n)

f(1)m=c+1nf(m)(nc)f(1),
c+1n+1f(x)dxm=c+1nf(m)cnf(x)dx.
f(m)=1/mf(m)=logm
m=c+1n1m=logn±Θ(1).

คำตอบนี้เกี่ยวข้องน้อยลงกับการแก้ปัญหาซ้ำ แต่เป็นการประเมินผลรวม (ซึ่งอาจเป็นประโยชน์ในการแก้ปัญหาซ้ำ) เทคนิคการเป็นที่สองของผลรวมรีมันน์ ควรทำงานกับรูปแบบอื่นเช่นสำหรับค่าคงที่ ? T(nd)d
ราฟาเอล

ถูกต้องสามารถแก้ไขได้ด้วยวิธีนี้ T(n)=cT(nd)+f(n)
Yuval Filmus

9

Sedgewick และ Flajolet ได้ทำงานอย่างกว้างขวางในการวิเคราะห์เชิง combinatoricsซึ่งช่วยให้การกำเริบของโรคสามารถแก้ไขได้โดยการรวมฟังก์ชั่นการสร้างและการวิเคราะห์ที่ซับซ้อน งานของพวกเขาอนุญาตให้แก้ไขซ้ำหลายครั้งโดยอัตโนมัติและถูกนำไปใช้ในระบบพีชคณิตของคอมพิวเตอร์

หนังสือเรียนเรื่องนี้เขียนโดย Flajolet และ Sedgewick และเป็นหนังสืออ้างอิงที่ยอดเยี่ยม การแสดงออกที่ค่อนข้างง่ายกว่านั้นมุ่งเน้นไปที่แอพพลิเคชั่นเพื่อการวิเคราะห์อัลกอริทึมคือข้อความนี้โดย Sedgewick และ Flajolet

หวังว่านี่จะช่วยได้!


4
นี่เป็นการอ้างอิงที่ดี แต่เราต้องการรวบรวมวิธีการในวิธีที่เข้าถึงได้ คุณสามารถแสดงรายละเอียดวิธีการหนึ่งโดยเฉพาะได้หรือไม่?
กราฟิลส์

9

อาจมีบางครั้งที่คุณเจอเหตุการณ์ประหลาดเช่นนี้: ถ้าคุณชอบฉันคุณจะรู้ว่าคุณไม่สามารถใช้ทฤษฎีบทหลักแล้วคุณอาจคิดว่า " อืม ... บางทีการวิเคราะห์ต้นไม้เกิดขึ้นอีกอาจทำงานได้ " จากนั้นคุณจะรู้ว่าต้นไม้เริ่มทำรายได้เร็วมาก หลังจากค้นหาบนอินเทอร์เน็ตคุณจะเห็นว่าวิธีAkra-Bazziจะใช้งานได้! จากนั้นคุณเริ่มมองเข้าไปในนั้นและตระหนักว่าคุณไม่ต้องการทำคณิตศาสตร์ทั้งหมด หากคุณเป็นเหมือนฉันจนถึงจุดนี้คุณจะตื่นเต้นที่ได้รู้ว่ามีวิธีที่ง่ายกว่า

T(n)={cn<72T(n5)+4T(n7)+cnn7


ทฤษฎีบทแบ่งที่ไม่สม่ำเสมอส่วนที่ 1

ให้และเป็นค่าคงที่บวกck

แล้วปล่อยให้เป็นค่าคงที่บวกดังกล่าวว่า<1{a1,a2,,ak}1kai<1

เราต้องมีการทำซ้ำของแบบฟอร์ม (เช่นตัวอย่างด้านบน):

T(n)c0<n<max{a11,a21,,ak1}T(n)cn+T(a1n)+T(a2n)+T(akn)nmax{a11,a21,,ak1}

ข้อเรียกร้อง

จากนั้นฉันอ้างว่าโดยที่คือค่าคงที่ (เช่นเชิงเส้นเชิงเส้นกำกับ) และ:T(n)bnb

b=c1(1kai)

พิสูจน์โดยการเหนี่ยวนำ

พื้นฐาน :n<max{a11,a21,,ak1}T(n)c<b<bn

การเหนี่ยวนำ : สมมติว่าเป็นจริงสำหรับเราก็มีn<n

T(n)cn+T(a1n)+T(a2n)++T(akn)cn+ba1n+ba2n++bakncn+ba1n+ba2n++bakn=cn+bn1kai=cncn1kai1(1kai)+cn1kai1(1kai)=cn1(1kai)=bn

แล้วเรามี(n)T(n)bnT(n)=O(n)

ตัวอย่าง

T(n)={cn<72T(n5)+4T(n7)+cnn7
ก่อนอื่นเราตรวจสอบค่าสัมประสิทธิ์ในผลรวมการโทรซ้ำเพื่อน้อยกว่าหนึ่ง:
1>1kai=15+15+17+17+17+17=25+47=3435

ต่อไปเราจะตรวจสอบว่ากรณีฐานน้อยกว่าค่าสูงสุดของค่าผกผัน:

n<max{a11,a21,,ak1}=max{5,5,7,7,7,7}=7

เมื่อพบกับเงื่อนไขเหล่านี้เรารู้ว่าโดยที่คือค่าคงที่เท่ากับ: ดังนั้นเราจึงมี: T(n)bnb

b=c1(1kai)=c13435=35c
T(n)35cnT(n)cnT(n)=Θ(n)


ทฤษฎีบทแบ่งที่ไม่สม่ำเสมอส่วนที่ 2

ในทำนองเดียวกันเราสามารถพิสูจน์ที่ถูกผูกไว้สำหรับเมื่อ1 หลักฐานจะเป็นไปตามรูปแบบเดียวกันมาก:1k=1

ให้และเป็นค่าคงที่บวกดังกล่าวว่า1ckk>1

แล้วปล่อยให้เป็นค่าคงที่บวกดังกล่าวว่า1{a1,a2,,ak}1kai=1

เราต้องมีการทำซ้ำของแบบฟอร์ม (เช่นตัวอย่างด้านบน):

T(n)c0<n<max{a11,a21,,ak1}T(n)cn+T(a1n)+T(a2n)+T(akn)nmax{a11,a21,,ak1}

ข้อเรียกร้อง

จากนั้นฉันอ้างว่า (เราเลือกฐานเนื่องจากจะเป็นปัจจัยการแตกกิ่งก้านของต้นไม้เรียกซ้ำ) โดยที่และเป็นค่าคงที่ (เช่นเชิงเส้นตรงเชิงเส้นกำกับ ) ดังนั้น:T(n)αnlogkn+βnlogkkαβ

β=c
และ
α=c1kailogkai1

พิสูจน์โดยการเหนี่ยวนำ

พื้นฐาน :n<max{a11,a21,,ak1}T(n)c=β<αnlogkn+βn

การเหนี่ยวนำ : สมมติว่าเป็นจริงสำหรับเราก็มีn<n

T(n)cn+T(a1n)+T(a2n)++T(akn)cn+1k(αainlogkain+βain)=cn+αn1k(ailogkain)+βn1kai=cn+αn1k(ailogknai1)+βn=cn+αn1k(ai(logknlogkai1))+βn=cn+αn1kailogknαn1kailogkai1+βn=αn1kailogkn+βn=αnlogkn+βn

แล้วเรามีlog)T(n)αnlogkn+βnT(n)=O(nlogn)

ตัวอย่าง

ลองปรับเปลี่ยนตัวอย่างก่อนหน้านี้ที่เราใช้เพียงเล็กน้อย:

T(n)={cn<352T(n5)+4T(n7)+T(n35)+cnn35

ก่อนอื่นเราตรวจสอบค่าสัมประสิทธิ์ในการโทรซ้ำแบบเรียกซ้ำ

1=1kai=15+15+17+17+17+17+135=25+47+135=3535

ต่อไปเราจะตรวจสอบว่ากรณีฐานน้อยกว่าค่าสูงสุดของค่าผกผัน:

n<max{a11,a21,,ak1}=max{5,5,7,7,7,7,35}=35

เมื่อพบกับเงื่อนไขเหล่านี้เรารู้ว่าโดยที่และมีค่าคงที่เท่ากับ: ดังนั้นเราจึงมี: T(n)αnlogn+βnβ=cα

b=c1kailogkai1=c2log755+4log777+log735351.048c
T(n)1.048cnlog7n+cnT(n)=O(nlogn)


6

หลังจากตรวจสอบโพสต์นี้อีกครั้งฉันประหลาดใจที่นี่ยังไม่ได้อยู่ที่นี่

การแปลงโดเมน / การเปลี่ยนแปลงตัวแปร

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

ตัวอย่างเช่นให้ทำซ้ำต่อไปนี้:

T(n)=T(22loglogn)+logloglogn

เราจะแก้ปัญหานี้ได้อย่างไร? เราสามารถขยายซีรี่ส์ออกไปได้ แต่ฉันสัญญาว่านี่จะทำให้ยอดขายเร็วขึ้นจริงๆ ลองพิจารณาว่าการป้อนข้อมูลของเราเปลี่ยนแปลงอย่างไรกับการโทรแต่ละครั้ง

เรามี:

  1. nจากนั้น
  2. 22loglognจากนั้น
  3. 22loglog(22loglogn)และอื่น ๆ

เป้าหมายของการเปลี่ยนแปลงโดเมนในขณะนี้จะมีการเปลี่ยนแปลงเกิดขึ้นอีกเราเป็นเทียบเท่าเช่นว่าแทนที่จะเปลี่ยนข้างต้นเราก็ต้อง\S(k)k,k1,k2,

ตัวอย่างเช่นถ้าเราปล่อยให้นี่คือสิ่งที่เราได้รับจากการเกิดซ้ำข้างต้นของเรา: จากนั้นเราสามารถเขียนใหม่ได้อย่างง่ายดาย: จากนั้นสิ่งที่คุณต้องทำคือแปลงกลับเป็นเพื่อรับ: n=2222k

T(2222k)=T(22loglog2222k)+logloglog(2222k)=T(2222k1)+2k
T(k)=T(k1)+2k=i=1k2k=2k+11
kn
T(n)=2(loglogloglogn)+11=O(logloglogn)


จากตัวอย่างนี้เราสามารถเห็นเป้าหมายของเรา

สมมติว่า สำหรับค่าคงที่และฟังก์ชั่นและ(n)

T(n)={h(1)n=1aT(f(n))+h(n)otherwise
af(n)h(n)

ตอนนี้เรากำลังพยายามหาฟังก์ชั่นและเช่นนั้น g(k)=nf(g(k))=g(k1)

T(g(k))=aT(f(g(k)))+h(g(k))=aT(g(k1))+h(g(k))

โดยทั่วไปเราต้องการโดยที่เป็นแอปพลิเคชันซ้ำ ๆ ของบน ,คูณ (เช่น ) สิ่งนี้จะทำให้ทำหน้าที่เป็นฟังก์ชัน "วนซ้ำ" ที่ระดับความลึกของการเรียกซ้ำงานที่ทำก็คือ(ki))f(i)(n)=g(ki)f(i)(n)fnif(2)(n)=f(f(n))g(k)ih(g(ki))

จากนั้นเราสามารถแปลงเป็นอย่างง่ายดายเพื่อให้ เท่านั้น ข้อสรุปสำหรับทั้งหมดจนถึงกรณีฐานที่กำหนด นั่นคือ S(k)=T(g(k))

S(k)=aS(k1)+h(g(k))
h(g(k))k
S(k)=i=g1(1)kakih(g(i))

หากเราสามารถกำหนดสำหรับรูปแบบปิดบางฟังก์ชั่นจากนั้นเราสามารถกำหนดเป็น S(k)=γ(k)γT(n)

T(n)=γ(g1(n))

จากนั้นเราใช้สิ่งนี้เพื่อให้ได้ขอบเขตบนผ่านหนึ่งในวิธีอื่นข้างต้น เห็นได้ชัดว่าคุณสามารถปรับเปลี่ยนวิธีนี้ได้เล็กน้อยตามข้อกำหนดของคุณ แต่โดยทั่วไปคุณกำลังพยายามหาฟังก์ชั่นซ้ำเพื่อเปลี่ยนให้กลายเป็นการเรียกซ้ำง่าย ๆT(n)g(k)T(n)

ฉันไม่รู้วิธีที่แน่นอนในการกำหนดณ จุดนี้ แต่ฉันจะคิดต่อไปและอัปเดตถ้ามันชัดเจนขึ้น (หรือหากผู้วิจารณ์มีเคล็ดลับ!) ฉันได้พบส่วนใหญ่ของฉันฟังก์ชั่นผ่านการทดลองและข้อผิดพลาดในอดีตที่ผ่านมา (ดูที่นี่ , ที่นี่ , ที่นี่และที่นี่เป็นตัวอย่าง)g(k)g(k)


1
มีข้อ จำกัด ใด ๆ เกี่ยวกับ ,และ / หรือหรือไม่? ฉันขอเฉพาะเพราะชาวบ้านที่คล้ายกันเทคนิคเปลี่ยนตัวบางครั้งล้มเหลวเมื่อสัญกรณ์รถม้าที่มีส่วนเกี่ยวข้องที่ทำให้ฉันกังวลถ้าแท้จริงเสมอคำตอบที่ถูกต้อง fghγg1
กราฟิลส์

@ ราฟาเอลนี่เป็นส่วนที่ฉันไม่แน่ใจทั้งหมด มีบางสิ่งที่ฉันคิดว่าเราจำเป็นต้องสร้างความเท่าเทียมกัน 1) ความลึกของการเรียกซ้ำเดียวกันนี้สามารถมั่นใจโดยและn 2) งานที่ทำในแต่ละระดับของการเรียกซ้ำจะเหมือนกันซึ่งผมเชื่อว่าจะถูกบังคับใช้โดยแล้ว(n) แนวคิดพื้นฐานของการนี้ก็คือการเปิดลงไปในผลรวมคือ(i)) การแปลงจากถึงฉันก็ไม่แน่ใจเหมือนกัน 100% (ฉันไม่มีหลักฐาน) แต่ฉันไม่เห็นสาเหตุที่จะเป็น ไม่ถูกต้อง คิด? f(g(k))=g(k1)g(k)=ng(k)=nh(g(k))=h(n)T(n)i=ckh(g(i))γ(k)γ(g1(n))
ไรอัน

@ ราฟาเอลคุณสามารถพิจารณากรณีที่แทนแล้วแปลงเป็นควรจะตรงมากขึ้น ข้างหน้า ง่ายต่อการพิสูจน์ฉันคิดว่าถ้าคุณเพียงแสดงความเท่าเทียมกันในการรวม คุณอาจจะเจอกับปัญหาตลก ๆ กับสัญญลักษณ์ Landau ที่นี่ แต่ถ้าคุณทิ้ง Landau จากมันและติดกับความเท่าเทียมที่แม่นยำเท่านั้นฉันคิดว่ามันน่าจะดี S(k)=γ(k)ΘT(n)=γ(g1(n))
ไรอัน

@ ราฟาเอลฉันแก้ไขให้ใช้ความเท่าเทียมเท่านั้นดังนั้นสัญกรณ์รถม้าสี่ล้อจึงไม่ควรทำให้เกิดความวุ่นวาย วางนัยทั่วไปอีกเล็กน้อย ซึ่งคุณยังสามารถพูดคุยอีกเล็กน้อยที่จะใช้ฟังก์ชั่นแทนคง จากนั้นแทนในผลรวมเพียงแค่มีแอพลิเคชันของ(i)) β(n)aakiβ(g(i))
ไรอัน

5

มีวิธีการอีกวิธีหนึ่งที่ใช้งานได้สำหรับความสัมพันธ์การเกิดซ้ำง่าย ๆ : ขอให้Wolfram Alphaทำการแก้ปัญหาการกำเริบซ้ำสำหรับคุณ

ตัวอย่างเช่นลองพิมพ์f(0)=0, f(1)=1, f(n)=f(n-1)+f(n-2)ใน Wolfram Alpha คุณจะได้คำตอบพร้อมลิงก์ไปยังหมายเลขฟีโบนักชี หรือลองf(1)=1, f(n)=f(n-1)+nหรือf(1)=1, f(n)=2*f(n-1)+3*nหรือf(n)=f(n-1) + 2 f(n-2), f(1)=1, f(2)=3สำหรับตัวอย่างอื่น ๆ อย่างไรก็ตามได้รับการเตือน: Wolfram Alpha สามารถแก้ปัญหาการเกิดซ้ำได้ง่าย ๆ

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


3
ฉันไม่คิดว่าจุดประสงค์ของเว็บไซต์นี้จะอธิบายวิธีพีชคณิตคอมพิวเตอร์ไม่สิ่งเช่นนี้จะไม่สนับสนุนการใช้ของคนตาบอด แต่เครื่องมือมีประโยชน์ดังนั้นมีประโยชน์ในความเป็นจริงที่ควรลองก่อนที่จะ "เสีย" เวลา (ใน "ฝึก")
Raphael

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

5

กรณีที่ 2 ของทฤษฎีบทหลักตามที่ระบุไว้ปกติจัดการเฉพาะการเกิดซ้ำของแบบฟอร์มซึ่งสำหรับ0 ทฤษฎีบทต่อไปนี้ซึ่งนำมาจากเอกสารของ Jeffrey Leon ให้คำตอบสำหรับลบ :T(n)=aT(n/b)+f(n)f(n)=Θ(nlogablogkn)k0k

พิจารณาการเกิดซ้ำด้วยตัวพิมพ์เล็กที่เหมาะสมT(n)=aT(n/b)+f(n)

  1. ถ้าสำหรับแล้วA})f(n)=O(nlogbalogc1n)c<0T(n)=Θ(nlogba)

  2. ถ้าสำหรับดังนั้นn)f(n)=Θ(nlogbalogc1n)c=0T(n)=Θ(nlogbaloglogn)

  3. ถ้าสำหรับดังนั้น )f(n)=Θ(nlogbalogc1n)c>0T(n)=Θ(nlogbalogcn

หลักฐานใช้วิธีการทดแทนซ้ำตามที่เราร่าง สมมติว่าและ0 จากนั้นสำหรับพลังของ , ตอนนี้ให้เราพิจารณากรณีหนึ่ง ๆ เมื่อชุดลู่และอื่น ๆA}) เมื่อผลรวมคือผลรวมฮาร์มอนิกและอื่น ๆf(n)=nlogbalogbc1nT(1)=0nb

T(n)=i=0logbn1ai(nbi)logbalogbc1(nbi)=i=0logbn1nlogba(logbni)c1=nlogbaj=1logbnjc1.
c<0j=0jc1T(n)=Θ(nlogba)c=0Hlogbn=log(logbn)+O(1)T(n)=Θ(nlogbaloglogn)n) เมื่อเราสามารถประมาณผลรวมโดยใช้อินทิกรัล: และCN)c>0
j=1logbn0logbnxc1dx=xcc|0logbn=logbcnc,
T(n)=Θ(nlogbalogcn)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.