Độ phức tạp thời gian của thuật toán Bellman-Held-Karp cho TSP, mất 2


16

Một câu hỏi gần đây đã thảo luận về thuật toán lập trình động hiện đại cho TSP, do độc lập với BellmanHeld-Karp . Thuật toán được báo cáo phổ biến để chạy trong thời gian . Tuy nhiên, như một trong những học sinh của tôi gần đây đã chỉ ra, thời gian hoạt động này có thể đòi hỏi một mô hình tính toán mạnh mẽ vô lý.O(2nn2)

Dưới đây là một mô tả ngắn gọn về thuật toán. Đầu vào bao gồm một đồ thị có hướng với n đỉnh và hàm độ dài không âm : E R + . Đối với bất kỳ đỉnh st và bất kỳ tập hợp con X nào của các đỉnh loại trừ st , hãy để L ( s , X , t ) biểu thị độ dài của đường Hamilton ngắn nhất từ s đến tG=(V,E)n:ER+stXstL(s,X,t)sttrong biểu đồ con cảm ứng . Thuật toán Bellman-Held-Karp dựa trên sự tái phát sau đây (hoặc như các nhà kinh tế và lý thuyết điều khiển muốn gọi nó, phương trình của Bell Bellman):G[X{s,t}]

L(s,X,t)={(s,t)if X=minvX (L(s,X{v},v)+(v,t))otherwise

Đối với bất kỳ đỉnh , chiều dài của tối ưu đi du lịch tour du lịch nhân viên bán hàng là . Bởi vì tham số đầu tiên là hằng số trong tất cả các cuộc gọi đệ quy, có các bài toán con khác nhau và mỗi bài toán con phụ thuộc vào tối đa khác. Do đó, thuật toán lập trình động chạy trong thời gian .sL(s,V{s},s)sΘ(2nn)nO(2nn2)

Hay là?!

Mô hình RAM số nguyên tiêu chuẩn cho phép thao tác liên tục các số nguyên với các bit , nhưng ít nhất là đối với các phép toán số họclogic , các số nguyên lớn hơn phải được chia thành các khối có kích thước từ. (Nếu không, những điều kỳ lạ có thể xảy ra.) Điều này cũng không đúng khi truy cập vào các địa chỉ bộ nhớ dài hơn? Nếu một thuật toán sử dụng không gian siêu đa thức, có hợp lý không khi cho rằng truy cập bộ nhớ chỉ yêu cầu thời gian không đổi?O(logn)

Đối với thuật toán Bellman-Held-Karp nói riêng, thuật toán phải chuyển đổi mô tả của tập hợp con thành mô tả của tập hợp con , cho mỗi , để truy cập vào bảng ghi nhớ. Nếu các tập hợp con được biểu diễn bằng số nguyên, các số nguyên này yêu cầu bit và do đó không thể được thao tác trong thời gian không đổi; nếu chúng không được biểu diễn bằng số nguyên, thì biểu diễn của chúng không thể được sử dụng trực tiếp như một chỉ mục vào bảng ghi nhớ.XX{v}vn

Vậy: thời gian chạy tiệm cận thực tế của thuật toán Bellman-Held-Karp là gì?


Liên kết "những điều kỳ lạ" của bạn bị hỏng.
Tyson Williams

Tôi đã sửa liên kết.
Jeffε

Câu trả lời:


12

Đây không phải là một câu trả lời toán học hơn câu trả lời triết học, nhưng tôi thích nghĩ về một mô hình RAM cho phép thao tác liên tục các số nguyên với một số bit B không xác định nhưng ít nhất là lớn như , trong đó S là dung lượng mà thuật toán yêu cầu. Bởi vì, nếu số nguyên không lớn như vậy, làm sao bạn có thể giải quyết bộ nhớ của mình? Đối với các thuật toán không gian và thời gian đa thức, nó giống như các bit O (log n), nhưng đối với các thuật toán không gian theo cấp số nhân, nó tránh được vấn đề.log2S

Tất nhiên, nếu S vượt quá dung lượng bộ nhớ bạn thực sự có, thuật toán của bạn sẽ hoàn toàn không chạy. Hoặc, nó sẽ chạy bằng cách phân trang thông tin vào và ra khỏi bộ nhớ và bạn nên sử dụng mô hình phân cấp bộ nhớ thay vì mô hình RAM.


Tôi đã quen với ý tưởng rằng mô hình máy nên phụ thuộc vào kích thước đầu vào , nhưng có một chút gì đó hơi khó khăn khi để mô hình máy phụ thuộc vào thuật toán. Bạn có thực sự muốn để máy của mình giải quyết bất kỳ vấn đề nào trong PSPACE trong thời gian không đổi, miễn là bạn đang sử dụng không gian theo cấp số nhân? n
Jeffε

3
Đối với tôi, đó không phải là một câu hỏi làm cho mô hình thay đổi tùy thuộc vào thuật toán, và nhiều câu hỏi hơn về việc có một mô hình cố định nhưng không có khả năng chạy tất cả các thuật toán (vì nó hết dung lượng). Điều đó không có vẻ quá khác biệt so với máy tính thật, với tôi.
David Eppstein

1
Tôi không bị thuyết phục bởi câu trả lời của David. Có hai vấn đề ở đây. Một là lý thuyết, thực tế khác. Trong cài đặt lý thuyết, chính xác hơn về mô hình và phân tích thời gian chạy một cách thích hợp. Trong cài đặt thực tế, không dễ để biết liệu người ta có thực sự hết bộ nhớ trong bất kỳ trường hợp cụ thể nào hay không vì những tối ưu hóa khác nhau mà người ta có thể làm (và thực hiện ghi nhớ một phần, v.v.), tuy nhiên, khi thực hiện thuật toán, chúng ta sẽ phải xử lý làm thế nào chúng ta lưu trữ các bộ và chỉ mục vào chúng. Các mô hình trên không giúp đỡ trong vấn đề này.
Chandra Chekuri

8

Có một cuộc thảo luận về vấn đề này trong cuốn sách gần đây của Fedor V. Fomin và Dieter Kratsch " Thuật toán hàm mũ chính xác " trong đó họ chỉ định thời gian chạy trong mô hình RAM chi phí đơn vị và mô hình RAM chi phí log ( - khoảng cách tối đa giữa các thành phố và nếu ):Wf(n)=O(g(n))f(n)=O(g(n)poly(n))

O(2n) và (lưu ý, ), tương ứng.2nlogWnO(1)2nlogWnO(1)O(2n)


1
Vì vậy, họ né tránh vấn đề bằng cách che giấu yếu tố đa thức. Tôi muốn biết yếu tố đa thức là gì!
Jeffε

3
Họ cho rằng yếu tố đa thức là (xem liên kết trong bình luận của tôi). n2
Oleksandr Bondarenko
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.