Giải quyết hoặc xấp xỉ quan hệ lặp lại cho chuỗi số


89

Trong khoa học máy tính, chúng ta thường phải giải quyết các mối quan hệ lặp lại , đó là tìm một dạng đóng cho một dãy số được xác định đệ quy. Khi xem xét thời gian chạy, chúng tôi thường quan tâm chủ yếu đến sự tăng trưởng tiệm cận của chuỗi .

Ví dụ là

  1. Thời gian chạy của hàm đệ quy đuôi bước xuống 0 từ n mà cơ thể mất thời gian :f(n)

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

  2. Các Fibonacci sequence :

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

  3. Số lượng từ Dyck với cặp ngoặc đơn:n

    C0=1Cn+1=i=0nCiCni

  4. Thời gian chạy hợp nhất lặp lại trên danh sách độ dài :n

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

Phương pháp để giải quyết quan hệ tái phát là gì? Chúng tôi đang tìm kiếm

  • phương pháp chung và
  • phương thức cho một lớp con quan trọng

cũng như

  • phương pháp mang lại giải pháp chính xác và
  • phương pháp cung cấp (giới hạn trên) tăng trưởng tiệm cận.

Điều này được cho là để trở thành một câu hỏi tham khảo. Vui lòng gửi một câu trả lời cho mỗi phương pháp và cung cấp một mô tả chung cũng như một ví dụ minh họa.


9
Những ghi chú có thể hữu ích. (Nhưng không, tôi sẽ không chuyển chúng thành câu trả lời.)
JeffE

Câu trả lời:


35

Chuyển đổi toàn bộ lịch sử sang lịch sử hạn chế

Đây là bước đầu tiên trong việc giải quyết các lần lặp lại trong đó giá trị tại bất kỳ số nguyên nào phụ thuộc vào các giá trị ở tất cả các số nguyên nhỏ hơn. Ví dụ, xem xét sự tái phát

T(n)=n+1nk=1n(T(k1)+T(nk))
phát sinh trong phân tíchquicksort ngẫu nhiên. (Ở đây,klà thứ hạng của trục được chọn ngẫu nhiên.) Với mọi số nguyênn, giá trị củaT(n)phụ thuộc vào tất cảT(k)vớik<n. Tái phát của hình thức này được gọi làtái phátlịch sử đầy đủ.

Để giải quyết sự tái phát này, chúng ta có thể chuyển đổi nó thành một đợt tái phát lịch sử hạn chế , trong đó T(n) phụ thuộc vào một số lượng không đổi các giá trị trước đó. Nhưng trước tiên, nó giúp đơn giản hóa việc tái phát một chút, để thu thập các thuật ngữ phổ biến và loại bỏ các phân số phiền phức.

nT(n)=n2+2k=1n1T(k)
Bây giờ chuyển sang một tái phát hạn chế lịch sử, chúng tôi ghi lại tái diễn choT(n1), trừ, và regather ngữ:
(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

Bây giờ nếu chúng ta xác định t(n)=T(n)/(n+1) và thay thế phân số2n1n(n+1) với dạng tiệm cận đơn giản hơnΘ(1/n), chúng ta thu được tái phát đơn giản hơn nhiều

t(n)=Θ(1/n)+t(n1).
Mở rộng sự tái phát này thành một tổng kết ngay lập tức cho chúng tat(n)=Θ(Hn)=Θ(logn), trong đóHnsố hàithứ . Chúng tôi kết luận rằng T ( n ) = Θ ( n log n ) .nT(n)=Θ(nlogn)

1
Nếu bạn muốn giải pháp chính xác cho T , điều đó cũng không khó (ở đây), nếu hơi tẻ nhạt; ta được T(n)=2(n+1)Hn+(T(0)3)n+T(0) . Trên thực tế, i=1nΘ(1/i)=Θ(Hn) bối rối cho tôi vì vậy tôi thích các biến thể chính xác. Phiên hatổng của các điều khoản Landau .
Raphael

Trên thực tế, nó đủ để quan sát (theo quy nạp) rằng T(n)/(n+1)=Θ(t(n)) , trong đó t(n)=1/n+t(n1) . Trong thực tế, tôi đã sử dụng thủ thuật đó ngay từ đầu, khi tôi thay thế thời gian Θ(n) để phân vùng một mảng bằng n đơn giản hơnn . Đây là một lạm dụng hoàn toàn tiêu chuẩn của ký hiệu.
JeffE

28

Tạo hàm

Mỗi dãy số tương ứng với một hàm tạo . Nó thường có thể được lấy một cách thoải mái từ sự tái phát để có các hệ số của nó - các phần tử của chuỗi - được gảy.

Câu trả lời này bao gồm ansatz chung với một ví dụ hoàn chỉnh, lối tắt cho trường hợp đặc biệt và một số lưu ý về việc sử dụng phương pháp này để thu được tiệm cận (ngay cả khi không thể có được kết quả chính xác).

Phương pháp

Đặt một dãy số. Sau đó, loạt quyền lực chính thức(an)nN

A(z)=n=0anzn

hàm tạo thông thường ¹ của . Các hệ số trong khai triển chuỗi của bằng chuỗi, tức là . Ví dụ, chức năng tạo thông thường của nổi tiếng A ( z ) [ z n ] A ( z ) = a n C n n(an)nNA(z)[zn]A(z)=an số CatalanCn

C(z)=114z2z .

Định nghĩa của A cũng là ansatz của chúng tôi để giải quyết sự tái phát. Điều này hoạt động tốt nhất cho các đợt tái phát tuyến tính, vì vậy, giả sử vì đơn giản là sự tái phát của biểu mẫu

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

đối với một số và một hàm độc lập với tất cả . Bây giờ chúng ta chỉ cần chèn cả neo và phần đệ quy vào ansatz, nghĩa là f ( n ) : NN một ib1,,bkRf(n):NNai

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

Sử dụng các cơ chế của thao tác tổng, các thuộc tính của chuỗi lũy thừa chính thức và các danh tính đã biết ², phía bên phải cuối cùng phải được đưa vào các dạng đóng, điển hình là theo . Phương trình kết quả có thể (thường) được giải choA ( z )A(z)A(z) . Việc mở rộng chuỗi kết quả (có thể dễ dàng thu được, được biết hoặc có thể tiếp cận được) về cơ bản là giải pháp.

Giới thiệu tốt có thể được tìm thấy trong cuốn sách của Wilf [3] và trong GKP [4]. Vật liệu tiên tiến đã được thu thập bởi Flajolet và Sedgewick [5].

Thí dụ

Xem xét

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

Chúng tôi tính toán:

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

Điều này giải quyết

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

Bây giờ chúng ta cuối cùng cũng có thể đọc được

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

Khi bạn đã quen với nó , bạn nhận thấy rằng đây là tất cả các máy móc. Trong thực tế, đại số máy tính có thể làm tất cả những thứ này cho bạn trong nhiều trường hợp. Điều tốt là nó vẫn còn (ít nhiều) cơ học đó ngay cả khi sự tái phát phức tạp hơn. Xem ở đây để có một ví dụ liên quan nhiều hơn, ít máy móc hơn.

Cũng lưu ý rằng các kỹ thuật chung cũng hoạt động nếu các đối tượng tìm kiếm là số phức, hoặc thậm chí là đa thức.

Một lối tắt

Đối với các đợt tái phát tuyến tính và đồng nhất, nghĩa là như vậy

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

ở trên đi qua chính xác theo cùng một cách, mọi lúc. Bằng cách thực hiện tính toán trên một cách tượng trưng, ​​chúng tôi tìm thấy bổ đề sau . Để cho

zk-b1zk-1-b2zk-2--bk

là đa thức đặc trưng (của sự tái phát). Ngoài ra, hãy thêm các số không (khác biệt theo cặp) của đa thức đã nói với bội số , tương ứng. Sau đó, hệ số mong muốn được đưa ra bởir iλ1,Giáo dục,λtôirTôi

mộtviết sai rồi= =ΣTôi= =1tôiΣj= =1rTôibTôi,jviết sai rồij-1λTôiviết sai rồi

không rõ . Vì đa thức đặc trưng có độ , nên có các số 0 (phức) chính xác , tức là tổng thành . Do đó, các hệ số bị thiếu có thể được xác định bằng cách giải hệ phương trình tuyến tính với phương trình thu được bằng cách đánh công thức trên với bất kỳ nào của (ví dụ: các neo). k k r i k k k a nbTôi,jkkrTôikkkmộtviết sai rồi

Tiệm cận

Đến dạng đóng cho thường là phần dễ dàng. Thể hiện nó trong việc tạo các hàm, chúng ta biết các hệ số của (như chúng ta đã làm trong ví dụ) nhanh chóng trở nên khó khăn. Ví dụ là từ phía trên và một từ cho số lượng từ Dyck được đề cập trong câu hỏi.C ( z )Một(z)C(z)

Người ta có thể sử dụng máy móc phân tích phức tạp, đặc biệt là phân tích đơn lẻ, để có được các tiệm cận cho các hệ số; buzzwords bao gồm phương pháp của Darboux và phương pháp điểm yên ngựa. Chúng dựa trên định lý dư lượngcông thức tích phân của Cauchy . Xem [6] để biết chi tiết.


  1. Bạn có thể làm những điều tương tự với hàm mũ , Dirichletmột số hàm tạo khác . Cái nào hoạt động tốt nhất phụ thuộc vào trình tự trong tay và đặc biệt là bạn có tìm thấy các hình thức đóng cần thiết hay không.
  2. Ví dụ từ Bảng Cheat TCS hoặc [3].
  3. tạo chức năng của H. Wilf (1994, tái bản lần thứ 2) - có sẵn để tải về miễn phí
  4. Toán học cụ thể của RL Graham, DE Knuth và O. Patashnik (1994, tái bản lần thứ 2).
  5. Giới thiệu Phân tích thuật toán của R. Sedgewick và P. Flajolet (ấn bản 2, 2013) - có sẵn để tải về miễn phí
  6. Công cụ phân tích kết hợp của P. Flajolet và R. Sedgewick (2009) - có sẵn để tải về miễn phí

21

Định lý chủ

Các định lý tổng thể cho asymptotics cho các giải pháp của cái gọi là chia & chinh phục tái phát, đó là như vậy mà chia tham số của họ thành những phần tương ứng (thay vì cắt đi hằng). Chúng thường xảy ra khi phân tích (đệ quy) thuật toán phân chia & chinh phục, do đó có tên. Định lý này là phổ biến vì nó thường rất dễ áp ​​dụng. Mặt khác, nó chỉ có thể được áp dụng cho các đợt tái phát dưới dạng sau:

T(viết sai rồi)= =mộtT(viết sai rồib)+đụ(viết sai rồi)

với . Có ba trường hợpmột1,b>1

  1. đụÔi(viết sai rồiđăng nhậpb(một)-ε)

    đối với một số ;ε>0

  2. đụΘ(viết sai rồiđăng nhậpbmộtđăng nhậpkviết sai rồi) ,

    đối với một số ;k0

  3. đụΩ(viết sai rồiđăng nhậpb(một)+ε)

    đối với một sốε>0

    mộtđụ(viết sai rồib)cđụ(viết sai rồi)

    đối với một số và .n c<1viết sai rồi

trong đó ngụ ý sự tiệm cận

  1. TΘ(viết sai rồiđăng nhậpbmột) ,
  2. TΘ(viết sai rồiđăng nhậpbmộtđăng nhậpk+1viết sai rồi)
  3. TΘ(đụ) ,

tương ứng. Lưu ý rằng các trường hợp cơ sở không được nêu hoặc sử dụng ở đây; điều đó có ý nghĩa, xem xét chúng tôi chỉ đang điều tra hành vi tiệm cận . Chúng tôi âm thầm cho rằng chúng là một số hằng số (chúng có thể là gì khác. Những hằng số chúng tôi không thấy là không liên quan, tất cả đều biến mất trong .Θ

Ví dụ

  1. Xem xét sự tái phát

    T(viết sai rồi)= =4T(viết sai rồi3)+viết sai rồi .

    Với và - lưu ý rằng chúng ta thấy trường hợp đó áp dụng với . Do đó, .b = 3 log b một 1,26 ε = 0.25 T Θ ( n log 3 4 ) = Θ ( n 1,261 ... )đụ(viết sai rồi)= =viết sai rồi,một= =4b= =3đăng nhậpbmột1,26ε= =0,25TΘ(viết sai rồiđăng nhập34)= =Θ(viết sai rồi1.261Giáo dục)

  2. Xem xét sự tái phát

    T(viết sai rồi)= =2T(viết sai rồi/2)+viết sai rồi .

    Với và - lưu ý rằng chúng ta thấy trường hợp hai áp dụng với . Do đó, .b = 2 log b một = 1 k = 0 T q ( n log n )đụ(viết sai rồi)= =viết sai rồi,một= =2b= =2đăng nhậpbmột= =1k= =0TΘ(viết sai rồiđăng nhậpviết sai rồi)

  3. Xem xét sự tái phát

    T(viết sai rồi)= =3T(viết sai rồi4)+viết sai rồi .

    Với và - lưu ý rằng chúng ta thấy trường hợp ba áp dụng với và . Do đó, .b = 4 log b một 0,79 ε = 0,2 c = 1 T q ( n )đụ(viết sai rồi)= =viết sai rồi,một= =3b= =4đăng nhậpbmột0,79ε= =0,2c= =1TΘ(viết sai rồi)

  4. Xem xét sự tái phát

    T(viết sai rồi)= =16T(viết sai rồi4)+viết sai rồi!

    Ở đây ta có , và- nhiều ví dụ tiêu chuẩn sẽ có đa thức , nhưng đây không phải là quy tắc. Chúng tôi có và trường hợp ba áp dụng lại. Trong trường hợp này, chúng ta có thể chọn bất kỳ và là cho tất cả . Do đó .một= =16b= =4đụ(viết sai rồi)= =viết sai rồi!đụđăng nhậpbmột= =2εc>0viết sai rồi!Ω(viết sai rồik)kTΘ(viết sai rồi!)

đọc thêm

  • Rất có thể không có trường hợp nào của định lý Master được áp dụng. Ví dụ, các bài toán con có thể không có kích thước bằng nhau hoặc có dạng phức tạp hơn. Có một số phần mở rộng cho định lý Master, ví dụ Akra-Bazzi [1] hoặc Roura [2]. Thậm chí còn có một phiên bản hoạt động cho các đợt tái phát riêng biệt (ví dụ: sàn và trần được sử dụng trên các tham số đệ quy) cung cấp kết quả sắc nét hơn [3].

  • Thông thường, bạn phải xoa bóp mối quan hệ tái phát thực tế mà bạn có thành hình trước khi bạn có thể áp dụng định lý Master. Các biến đổi phổ biến bảo tồn tiệm cận bao gồm thả sàn và trần cũng như giả sử . Cẩn thận đừng phá vỡ mọi thứ ở đây; tham khảo [4] phần 4.6 và câu hỏi này để biết chi tiết.viết sai rồi= =bk


  1. Về giải pháp phương trình tái phát tuyến tính của M. Akra và L. Bazzi (1998)
  2. Một định lý tổng thể được cải tiến cho các lần tái phân chia và chinh phục của S. Roura (1997)
    Đề cập đến các định lý tổng thể cải tiến khác.
  3. Một định lý tổng thể cho sự phân chia và chinh phục rời rạc của M. Drmota và W. Szpankowski (2011)
  4. Giới thiệu về thuật toán của Cormen et al. (2009, tái bản lần thứ 3)

Đây có thể là câu hỏi ngu ngốc nhưng tôi thường không giữ được mô hình tinh thần khi a không bằng b, tôi không biết tại sao nhưng bằng trực giác tôi luôn cảm thấy rằng cả hai phải luôn giống nhau, giống như khi hợp nhất chúng ta chia vấn đề hai nửa bằng nhau (gần như) và với n / 2 trường hợp mỗi. Hơn nữa nếu chúng ta chia thuật toán thành ba phần bằng nhau thì các đầu vào cũng nên được chia thành ba phần bằng nhau, một lần nữa làm cho a và b bằng nhau. Làm thế nào tôi có thể phá vỡ trực giác sai lầm này?
CodeYogi

17

Đoán và chứng minh

Hoặc làm thế nào tôi muốn gọi nó, " kỹ thuật". Nó có thể được áp dụng cho tất cả các loại danh tính. Ý tưởng rất đơn giản:Giáo dục

Đoán giải pháp và chứng minh tính đúng đắn của nó.

Đây là một phương pháp phổ biến, được cho là bởi vì nó thường đòi hỏi một số sáng tạo và / hoặc kinh nghiệm (tốt để thể hiện) nhưng ít cơ học (trông thanh lịch). Nghệ thuật ở đây là để đưa ra những phỏng đoán tốt, có giáo dục; bằng chứng là (trong trường hợp của chúng tôi) thường là một cảm ứng đơn giản ít nhiều.

Khi áp dụng cho các lần tái phát, "đoán" thường được thực hiện bởi

  • mở rộng sự tái phát một vài lần,
  • tìm ra mỏ neo
  • đoán mô hình cho các trung gian (các ).Giáo dục

Ví dụ đơn giản

S0= =S1= =S2= =1Sviết sai rồi= =5Sviết sai rồi-3+6viết sai rồi2

Hãy để chúng tôi mở rộng định nghĩa của một vài lần:Sviết sai rồi

Sviết sai rồi= =5Sviết sai rồi-3+6= =5(5Sviết sai rồi-6+6)+6= =5(5(5Sviết sai rồi-9+6)+6)+6 = =5(5(5(Giáo dục51viết sai rồi÷3 lần+6Giáo dục)+6)+6)+6viết sai rồi÷3 lần

Ở đây, mô hình rất dễ phát hiện và nó dẫn chúng ta đến yêu cầu:

Sviết sai rồi= =5viết sai rồi3+6ΣTôi= =0viết sai rồi3-15Tôi= =525viết sai rồi3-64

Bây giờ chúng tôi chứng minh danh tính bằng cảm ứng. Với , chúng ta có thể thiết lập tính chính xác bằng cách cắm vào giá trị tương ứng. Giả sử giữ danh tính cho tất cả n n cho một tùy ý nhưng cố định n 3 , chúng tôi tính toánviết sai rồi{0,1,2}viết sai rồi'viết sai rồiviết sai rồi3

Sviết sai rồi+3= =5Sviết sai rồi+6= =5(525viết sai rồi3-64)+6= =525viết sai rồi3+1-64= =525viết sai rồi+33-64

trong đó chứng minh bản sắc bằng sức mạnh của cảm ứng.

Nếu bạn cố gắng sử dụng điều này cho các đợt tái phát liên quan nhiều hơn, bạn sẽ nhanh chóng gặp phải nhược điểm chính của phương pháp này: có thể khó nhìn thấy mô hình hoặc ngưng tụ nó thành một dạng đóng đẹp.

Tiệm cận

Cũng có thể sử dụng phương pháp này cho tiệm cận. Tuy nhiên, hãy lưu ý rằng bạn phải đoán các hằng số cho các biểu tượng Landau vì phải có một hằng số thiết lập giới hạn cho tất cả viết sai rồi , tức là hệ số không đổi không thể thay đổi trong quá trình cảm ứng.

Ví dụ, xem xét sự tái phát thời gian chạy Mergesort, được đơn giản hóa cho trường hợp :viết sai rồi= =2k

T(1)= =T(0)= =0T(viết sai rồi)= =2T(viết sai rồi/2)+viết sai rồi-1viết sai rồi1

Chúng tôi đoán rằng với hằng số c = 1 , nghĩa là T ( n ) n log n . Chúng tôi chứng minh điều này bằng cách cảm ứng trên k ; Bước quy nạp trông như thế này:T(viết sai rồi)Ôi(viết sai rồiđăng nhậpviết sai rồi)c= =1T(viết sai rồi)viết sai rồiđăng nhậpviết sai rồik

T(viết sai rồi)= =2T(viết sai rồi/2)+viết sai rồi-12viết sai rồi2đăng nhậpviết sai rồi2+viết sai rồi-1= =viết sai rồiđăng nhậpviết sai rồi-viết sai rồiđăng nhập2+viết sai rồi-1<viết sai rồiđăng nhậpviết sai rồi


  1. Đối với các chuỗi không giảm của naturals, mọi chuỗi con vô hạn đều có cùng mức tăng trưởng tiệm cận như chuỗi ban đầu.

15

Phương pháp Akra-Bazzi

Các phương pháp Akra-Bazzi cho asymptotics cho tái phát có dạng: Điều này bao gồm các lần tái phân chia và chinh phục thông thường, nhưng cũng có trường hợp sự phân chia không bằng nhau. Chẳng hạn, "thuật ngữ fudge" h i ( x ) có thể phục vụ cho các bộ phận không chính xác, chẳng hạn. Các điều kiện để áp dụng là:

T(x)= =Σ1TôikmộtTôiT(bTôix+hTôi(x))+g(x)cho xx0
hTôi(x)
  • Có đủ các trường hợp cơ bản để tái phát
  • Các b i là tất cả các hằng sốmộtTôibTôi
  • Với tất cả , a i > 0TôimộtTôi>0
  • Với tất cả , 0 < b i < 1Tôi0<bTôi<1
  • đối với một số liên tục c như x |g(x)|= =Ôi(xc)cx
  • Đối với tất cả , | h i ( x ) | = O ( x / ( log x ) 2 )Tôi|hTôi(x)|= =Ôi(x/(đăng nhậpx)2)
  • là hằng sốx0

Lưu ý rằng , và như chức năng răng cưa { u } = u - u luôn là giữa 0 và 1, thay thế b i x (hoặc b i x như chiếm đoạt) thỏa mãn các điều kiện trên h i .bTôix= =bTôix-{bTôix}{bạn}= =bạn-bạnbTôixbTôixhTôi

Tìm sao cho: Σ 1 i k một i b p i = 1 Sau đó, các hành vi tiệm cận của T ( x )x được cho bởi: T ( x ) = Θ ( x p ( 1 + x x 1 g ( u )p

Σ1TôikmộtTôibTôip= =1
T(x)x vớix1"đủ lớn", tức là cók1>0sao cho g(x/2)k1g(x) với mọix>x1.
T(x)= =Θ(xp(1+x1xg(bạn)bạnp+1Cười mở miệngbạn))
x1k1>0
(2)g(x/2)k1g(x)
x>x1

Ví dụ A

Như một ví dụ, lấy đệ quy cho , nơi mà T ( 0 ) = T ( 1 ) = T ( 2 ) = T ( 3 ) = T ( 4 ) = 17 : T ( n ) = 9 T ( n / 5 ) + T ( 4 n / 5 ) + 3viết sai rồi5T(0)= =T(1)= =T(2)= =T(3)= =T(4)= =17 Các điều kiện được thỏa mãn, chúng ta cần p : 9 ( 1

T(n)=9T(n/5)+T(4n/5)+3nlogn
p Vì may mắn sẽ có nó,p=2. Do đó ta có: T(n)=Θ(n2(1+ n 3 3ulogu
9(15)p+(45)p=1
p=2
T(n)=Θ(n2(1+3n3uloguu3du))=Θ(n2)

kể từ khi có chúng tôi hoàn thành(2)cho tất cả cácx3. Lưu ý rằng vì tích phân hội tụ ngay cả khi chúng ta sử dụng các hằng số khác, chẳng hạn như1, như ràng buộc thấp hơn,việc sử dụng các hằng sốđó là hợp pháp; sự khác biệt biến mất trongΘ.k112(1log2log3)(2)x31Θ

Ví dụ B

Một ví dụ khác là sau cho : T ( n ) = 4 T ( n / 2 ) + n 2 / lg n Chúng tôi có g ( n ) = n 2 / ln n = O ( n 2 ) , kiểm tra. Chúng tôi có rằng có một đơn một 1 = 4 , b 1 = 1 / 2n2

T(n)=4T(n/2)+n2/lgn
g(n)=n2/lnn=O(n2)a1=4b1=1/2, mà kiểm tra ra. Giả sử rằng thực sự là n / 2 và / hoặc n / 2 , những ngụ ý h i ( n ) cũng kiểm tra. Vì vậy, chúng ta cần: một 1 b p 1 = 4 ( 1 / 2 ) p = 1 Do đó p = 2 , và: T ( n ) = Θ ( n 2n/2viết sai rồi/2viết sai rồi/2hTôi(viết sai rồi)
một1b1p= =4(1/2)p= =1
p= =2 Chúng tôi áp dụng một mẹo tương tự như trên cho giới hạn dưới của tích phân, chỉ có điều chúng tôi sử dụng2vì tích phân không hội tụ cho1.
T(n)=Θ(n2(1+2nu2duu3lnu))=Θ(n2(1+2nduulnu))=Θ(n2lnlnn)
21

(Sự giúp đỡ của cực đại với đại số được ghi nhận một cách biết ơn)


1
Tôi đã kiểm tra giấy gốc. Họ có một hạn chế kỹ thuật ở giới hạn dưới của tích phân; phiên bản của bạn (trích dẫn khảo sát của Mehlhorn?) yêu cầu rõ ràng rằng hội tụ tích phân. Vì tôi nghĩ rằng điều kiện ban đầu dễ kiểm tra hơn, tôi đã thay đổi tuyên bố và các ví dụ tương ứng, vui lòng kiểm tra.
Raphael

1
Hơn nữa, giấy gốc không cung cấp phiên bản với ; cái này được lấy từ bản thảo của Leighton phải không? Bạn có một tài liệu tham khảo đánh giá ngang hàng cho điều đó? Chúng ta có nên chuyển sang phiên bản được đưa ra trong bài báo năm 1998 của Akra & Bazzi không? hi
Raphael

1
Tôi đã tình cờ thấy những gì dường như là một sự không nhất quán trong định lý . Có lẽ bạn biết câu trả lời?
Raphael

11

Tổng kết

Thông thường người ta gặp một sự tái phát có dạng trong đó f ( n ) là đơn điệu. Trong trường hợp này, chúng ta có thể mở rộng T ( n ) = T ( c ) + n Σ m = c + 1 f ( m ) , và do đó được đưa ra một giá trị khởi đầu T ( c )

T(n)=T(n1)+f(n),
f(n)
T(n)=T(c)+m=c+1nf(m),
T(c), Để ước tính chúng ta cần phải ước tính tổng f ( c + 1 ) + + f ( m ) .T(n)f(c+1)++f(m)

Không giảm f(n)

Khi không đơn điệu, chúng ta có giới hạn rõ ràng f ( n ) n m = c + 1 f ( m ) ( n - c ) f ( n ) . Những giới hạn là tốt nhất có thể theo nghĩa rằng họ là chặt chẽ đối với một số chức năng: các giới hạn trên cho các chức năng liên tục, và thấp hơn giới hạn cho các chức năng bước ( f ( m ) = 1 cho m nf(n)

f(n)m=c+1nf(m)(nc)f(n).
f(m)=1mn với m < n ). Tuy nhiên, trong nhiều trường hợp những ước tính này không hữu ích lắm. Ví dụ: khi f ( m ) = m , giới hạn dưới là n và giới hạn trên là ( n - c ) n , do đó chúng cách nhau khá xa.f(m)=0m<nf(m)=mn(nc)n

Hội nhập

Một ước tính tốt hơn được đưa ra bởi tích hợp: Với f ( m ) = m , điều này cho giá trị chính xác của tổng cho đến các điều khoản bậc thấp hơn: 1

cnf(x)dxm=c+1nf(m)c+1n+1f(x)dx.
f(m)=m Khif(m)=mchúng ta có thể tính tổng một cách rõ ràng, nhưng trong nhiều trường hợp tính toán rõ ràng là khó khăn. Ví dụ, khif(m)=mlogmcác -nguyênf(1/2)x2logx-(1/4)x2, và do đó n Σ m=c+
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).

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)

9

Sedgewick và Flajolet đã thực hiện nhiều công việc trong tổ hợp phân tích , cho phép các đợt tái phát được giải quyết một cách không có triệu chứng bằng cách sử dụng kết hợp các hàm tạo và phân tích phức tạp. Công việc của họ cho phép nhiều đợt tái phát được giải quyết tự động và đã được thực hiện trong một số hệ thống đại số máy tính.

Cuốn sách giáo khoa về chủ đề này được viết bởi Flajolet và Sedgewick và là một tài liệu tham khảo tuyệt vời. Một giải trình có phần đơn giản hơn, hướng đến các ứng dụng để phân tích thuật toán, là văn bản này của Sedgewick và Flajolet.

Hi vọng điêu nay co ich!


4
Đây là một tài liệu tham khảo tốt, nhưng chúng tôi muốn thu thập các phương thức một cách dễ tiếp cận. Bạn có thể trình bày một phương pháp cụ thể chi tiết?
Raphael

9

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


Định lý chia không đồng đều Phần 1

ck

{a1,a2,,ak}1kai<1

Chúng tôi cũng phải có biểu mẫu lặp lại (như ví dụ của chúng tôi ở trên):

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

Yêu cầu

T(n)bnb

b=c1(1kai)

Chứng minh bằng cảm ứng

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

T(n)bnT(n)=O(n)

Thí dụ

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)


Định lý chia không đồng đều Phần 2

1k=1

ckk>1

{a1,a2,,ak}1kai=1

Chúng tôi cũng phải có biểu mẫu lặp lại (như ví dụ của chúng tôi ở trên):

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

Yêu cầu

T(n)αnlogkn+βnlogkkαβ

β=c
α=c1kailogkai1

Chứng minh bằng cảm ứng

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

T(n)αnlogkn+βnT(n)=O(nlogn)

Thí dụ

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

Sau khi kiểm tra bài đăng này một lần nữa, tôi ngạc nhiên rằng điều này chưa có ở đây.

Chuyển đổi tên miền / Thay đổi biến

Khi xử lý các đợt lặp lại, đôi khi có thể thay đổi tên miền của bạn nếu không rõ ràng ngăn xếp đệ quy sẽ đi sâu đến đâu.

Chẳng hạn, hãy thực hiện các đợt tái phát sau:

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

Làm thế nào chúng ta có thể giải quyết điều này? Chúng tôi có thể mở rộng loạt phim, nhưng tôi hứa điều này sẽ thu được rất nhanh. Thay vào đó, hãy xem xét cách thay đổi đầu vào của chúng tôi với mỗi cuộc gọi.

Trước tiên chúng ta có:

  1. n
  2. 22loglogn
  3. 22loglog(22loglogn)

S(k)k,k1,k2,

viết sai rồi= =2222k

T(2222k)= =T(22đăng nhậpđăng nhập2222k)+đăng nhậpđăng nhậpđăng nhập(2222k)= =T(2222k-1)+2k
T(k)= =T(k-1)+2k= =ΣTôi= =1k2k= =2k+1-1
kviết sai rồi
T(viết sai rồi)= =2(đăng nhậpđăng nhậpđăng nhậpđăng nhậpviết sai rồi)+1-1= =Ôi(đăng nhậpđăng nhậpđăng nhậpviết sai rồi)


Với ví dụ này, bây giờ chúng ta có thể thấy mục tiêu của chúng tôi.

T(viết sai rồi)= ={h(1)viết sai rồi= =1mộtT(đụ(viết sai rồi))+h(viết sai rồi)otherwTôiSe
mộtđụ(viết sai rồi)h(viết sai rồi)

g(k)= =viết sai rồiđụ(g(k))= =g(k-1)

T(g(k))= =mộtT(đụ(g(k)))+h(g(k))= =mộtT(g(k-1))+h(g(k))

đụ(Tôi)(viết sai rồi)= =g(k-Tôi)đụ(Tôi)(viết sai rồi)đụviết sai rồiTôiđụ(2)(viết sai rồi)= =đụ(đụ(viết sai rồi))g(k)Tôih(g(k-Tôi))

S(k)= =T(g(k))

S(k)= =mộtS(k-1)+h(g(k))
h(g(k))k
S(k)= =ΣTôi= =g-1(1)kmộtk-Tôih(g(Tôi))

S(k)= =γ(k)γT(viết sai rồi)

T(viết sai rồi)= =γ(g-1(viết sai rồi))

T(viết sai rồi)g(k)T(viết sai rồi)

g(k)g(k)


1
đụghγg-1

đụ(g(k))= =g(k-1)g(k)= =viết sai rồig(k)= =viết sai rồih(g(k))= =h(viết sai rồi)T(viết sai rồi)ΣTôi= =ckh(g(Tôi))γ(k)γ(g-1(viết sai rồi))

S(k)= =γ(k)ΘT(viết sai rồi)= =γ(g-1(viết sai rồi))

β(viết sai rồi)mộtmộtk-Tôiβ(g(Tôi))

5

Có một cách tiếp cận khác phù hợp với các mối quan hệ tái phát đơn giản: yêu cầu Wolfram Alpha giải quyết sự tái phát cho bạn.

Chẳng hạn, hãy thử gõ f(0)=0, f(1)=1, f(n)=f(n-1)+f(n-2)vào Wolfram Alpha. Bạn sẽ nhận được một giải pháp, với một liên kết đến các số Fibonacci. Hoặc thử f(1)=1, f(n)=f(n-1)+nhay f(1)=1, f(n)=2*f(n-1)+3*nhay f(n)=f(n-1) + 2 f(n-2), f(1)=1, f(2)=3cho ví dụ khác. Tuy nhiên, hãy cảnh báo: Wolfram Alpha có thể giải quyết một số đợt tái phát rất đơn giản, nhưng nó lại sụp đổ đối với những trường hợp phức tạp hơn.

Cách tiếp cận này tránh sự cần thiết cho bất kỳ suy nghĩ, có thể được xem là một lỗi hoặc một tính năng.


3
Tôi làm nghĩ rằng mục đích của trang web này sẽ được giải thích như thế nào đại số máy tính làm những việc như thế này, không ủng hộ sử dụng mù của nó. Nhưng các công cụ này rất hữu ích, thực tế hữu ích đến nỗi người ta có thể phải luôn thử chúng trước khi "lãng phí" thời gian (trong "thực hành").
Raphael

Từ kinh nghiệm của riêng tôi, cố gắng sử dụng đại số máy tính mà không có bất kỳ ý nghĩa nào về "khó" hay "dễ" không giúp bạn tiến xa. Đặc biệt trong phân tích thuật toán, một số xoa bóp có thể cần thiết. Tôi không biết làm thế nào bạn làm điều đó mà không biết cách giải quyết tái phát. (Đối với mục đích của trang web này, có nhiều quan điểm. Sự thật: cho đến nay, "điều này hữu ích cho ai đó " không đủ để biện minh cho một bài đăng.)
Raphael

5

T(viết sai rồi)= =mộtT(viết sai rồi/b)+đụ(viết sai rồi)đụ(viết sai rồi)= =Θ(viết sai rồiđăng nhậpmộtbđăng nhậpkviết sai rồi)k0k

T(viết sai rồi)= =mộtT(viết sai rồi/b)+đụ(viết sai rồi)

  1. đụ(viết sai rồi)= =Ôi(viết sai rồiđăng nhậpbmộtđăng nhậpc-1viết sai rồi)c<0T(viết sai rồi)= =Θ(viết sai rồiđăng nhậpbmột)

  2. đụ(viết sai rồi)= =Θ(viết sai rồiđăng nhậpbmộtđăng nhậpc-1viết sai rồi)c= =0T(viết sai rồi)= =Θ(viết sai rồiđăng nhậpbmộtđăng nhậpđăng nhậpviết sai rồi)

  3. đụ(viết sai rồi)= =Θ(viết sai rồiđăng nhậpbmộtđăng nhậpc-1viết sai rồi)c>0T(viết sai rồi)= =Θ(viết sai rồiđăng nhậpbmộtđăng nhậpcviết sai rồi

đụ(viết sai rồi)= =viết sai rồiđăng nhậpbmộtđăng nhậpbc-1viết sai rồiT(1)= =0viết sai rồib

T(viết sai rồi)= =ΣTôi= =0đăng nhậpbviết sai rồi-1mộtTôi(viết sai rồib-Tôi)đăng nhậpbmộtđăng nhậpbc-1(viết sai rồib-Tôi)= =ΣTôi= =0đăng nhậpbviết sai rồi-1viết sai rồiđăng nhậpbmột(đăng nhậpbviết sai rồi-Tôi)c-1= =viết sai rồiđăng nhậpbmộtΣj= =1đăng nhậpbviết sai rồijc-1.
c<0Σj= =0jc-1T(viết sai rồi)= =Θ(viết sai rồiđăng nhậpbmột)c= =0Hđăng nhậpbviết sai rồi= =đăng nhập(đăng nhậpbviết sai rồi)+Ôi(1)T(viết sai rồi)= =Θ(viết sai rồiđăng nhậpbmộtđăng nhậpđăng nhậpviết sai rồi)c>0
Σj= =1đăng nhậpbviết sai rồi0đăng nhậpbviết sai rồixc-1Cười mở miệngx= =xcc|0đăng nhậpbviết sai rồi= =đăng nhậpbcviết sai rồic,
và như vậy T(viết sai rồi)= =Θ(viết sai rồiđăng nhậpbmộtđăng nhậpcviết sai rồi).
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.