Với một dag có trọng số, có thuật toán O (V + E) để thay thế từng trọng số bằng tổng trọng số tổ tiên của nó không?


34

Vấn đề, tất nhiên, là tính hai lần. Nó đủ dễ để thực hiện đối với một số lớp DAG nhất định = một cây hoặc thậm chí là một cây song song nối tiếp. Thuật toán duy nhất tôi đã tìm thấy hoạt động trên các DAG chung trong thời gian hợp lý là một thuật toán gần đúng (khuếch tán tóm tắt), nhưng việc tăng độ chính xác của nó là theo số mũ (và tôi cần rất nhiều bit).

Bối cảnh: nhiệm vụ này được thực hiện (nhiều lần với các 'trọng số' khác nhau) như là một phần của tính toán xác suất trong BBChop (http://github.com/ealdwulf/bbchop) một chương trình để tìm các lỗi không liên tục (ví dụ: phiên bản bayes của ' git bisect '). Do đó, DAG trong câu hỏi là một lịch sử sửa đổi. Điều đó có nghĩa là số cạnh không có khả năng tiếp cận bình phương của số nút, nó có thể ít hơn k lần số nút đối với một số k nhỏ. Thật không may, tôi không tìm thấy bất kỳ tính chất hữu ích nào khác của DAG sửa đổi. Ví dụ, tôi đã hy vọng rằng thành phần ba hình lớn nhất sẽ chỉ phát triển dưới dạng căn bậc hai của số nút, nhưng thật đáng buồn (ít nhất là trong lịch sử của nhân linux) nó phát triển tuyến tính.


Chỉ cần làm rõ: đó chỉ là các nút có trọng lượng, không phải các cạnh?
Apfelmus Heinrich

Vâng, chỉ là các nút.
Ealdwulf

4
Đây dường như là một bản sao gần như của cstheory.stackexchange.com/questions/553/ Lần ?
Jukka Suomela

điều này thực sự có vẻ tổng quát hơn, vì việc gán trọng số đơn vị cho tất cả các đỉnh làm giảm vấn đề này thành vấn đề khả năng tiếp cận.
Suresh Venkat

Xấp xỉ dường như không khó thực hiện với một số yếu tố polylog bổ sung ...
Sariel Har-Peled

Câu trả lời:


17

Chúng tôi giả định rằng trọng số đỉnh có thể là số nguyên dương tùy ý, hay chính xác hơn, chúng có thể là số nguyên dương tối đa 2 n . Sau đó, tác vụ hiện tại không thể được thực hiện ngay cả trong thời gian O ( n 2 ) yếu hơn một chút , trừ khi việc đóng tạm thời của đồ thị có hướng tùy ý có thể được tính trong thời gian O ( n 2 ), trong đó n biểu thị số đỉnh. (Lưu ý rằng thuật toán thời gian O ( n 2 ) cho đóng cửa bắc cầu sẽ là một bước đột phá.) Đây là điểm mấu chốt của yêu cầu sau:

Yêu cầu . Nếu tác vụ hiện tại có thể được thực hiện trong thời gian O ( n 2 ), thì việc đóng tạm thời của đồ thị có hướng tùy ý được đưa ra dưới dạng ma trận kề của nó có thể được tính trong thời gian O ( n 2 ) (giả sử một số mô hình tính toán hợp lý).

Bằng chứng . Là một tiền xử lý, chúng tôi tính toán sự phân hủy thành phần kết nối mạnh mẽ của cho đạo diễn đồ thị G trong thời gian O ( n 2 ) để có được một DAG G '. Lưu ý rằng nếu chúng ta có thể tính toán đóng bắc cầu của G ', chúng ta có thể tái tạo lại đóng bắc cầu của G .

Bây giờ gán trọng số 2 i cho mỗi đỉnh i của DAG G và sử dụng thuật toán cho bài toán hiện tại. Sau đó, biểu diễn nhị phân của số tiền được gán cho mỗi đỉnh i mô tả chính xác các thiết lập của tổ tiên của tôi , nói cách khác, chúng tôi đã tính toán thời điểm đóng bắc cầu của G '. QED .

Điều ngược lại của yêu cầu cũng đúng: nếu bạn có thể tính toán mức đóng tạm thời của một DAG nhất định, có thể dễ dàng tính các khoản tiền cần thiết bằng công việc bổ sung trong thời gian O ( n 2 ). Do đó, về lý thuyết, bạn có thể đạt được nhiệm vụ hiện tại trong thời gian O ( n 2.376 ) bằng cách sử dụng thuật toán cho phép đóng bắc cầu dựa trên thuật toán nhân ma trận Coppersmith-Winograd .

Chỉnh sửa : Bản sửa đổi 2 và trước đó không nêu rõ giả định về phạm vi trọng số đỉnh một cách rõ ràng. Per Vognsen đã chỉ ra trong một bình luận rằng giả định ngầm này có thể không hợp lý (cảm ơn!), Và tôi đồng ý. Ngay cả khi các trọng số tùy ý không cần thiết trong các ứng dụng, tôi đoán rằng câu trả lời này có thể loại trừ một số cách tiếp cận theo dòng lý luận sau: Hồi Nếu cách tiếp cận này có hiệu quả, nó sẽ đưa ra một thuật toán cho các trọng số tùy ý, loại trừ đóng cửa có thể được tính trong thời gian O ( n 2 ).

Chỉnh sửa : Bản sửa đổi 4 và trước đó đã nêu hướng của các cạnh không chính xác.


4
Tôi đã suy nghĩ về điều này tối qua vì một giải pháp thực tế sử dụng vectơ bit để thực hiện đếm loại trừ. Tôi đoán câu hỏi duy nhất là liệu có hợp lý không khi cho rằng các trọng số có thể có độ dài bit tỷ lệ với n. Trong thực tế, tôi có thể tưởng tượng các trọng số được giới hạn bởi một số k sao cho tổng tối đa có thể là kn, không đủ bit để thực hiện thủ thuật này.
Per Vognsen

@Per: Tôi đồng ý rằng giả định rằng trọng số đỉnh có thể là số nguyên n-bit có thể gây nghi ngờ. Tôi chỉnh sửa câu trả lời để làm cho giả định này rõ ràng. Cảm ơn!
Tsuyoshi Ito

1
@Per: Tôi nhận ra rằng nếu các trọng số đỉnh là các số nguyên giới hạn bởi O (1), thì vấn đề sẽ giảm xuống trong trường hợp tất cả các đỉnh có trọng số 1 bằng cách nhân đôi các đỉnh theo cách phù hợp.
Tsuyoshi Ito

Thật không may, tôi không thấy một câu trả lời trong chủ đề đó cho vấn đề đếm. Tổng số chứa thông tin ít logarit hơn so với danh sách đóng cửa bắc cầu, O (n log n) so với O (n ^ 2), vì vậy tôi không thấy cách giảm đơn giản có thể hoạt động.
Per Vognsen

Nhân tiện, một phiên bản thú vị của vấn đề này là khi chúng ta bị ràng buộc về yếu tố chi nhánh và thông tin về sự tăng trưởng về kích thước của các thế hệ (một loại cấu trúc liên kết) của DAG. Nếu sự tăng trưởng theo cấp số nhân, mô hình về cơ bản giống như cây. Điều gì nếu nó tuyến tính, log-linear, bậc hai, vv?
Per Vognsen

2

Đây là một bản mở rộng nhận xét của tôi về câu trả lời của Tsuyoshi. Tôi nghĩ rằng câu trả lời tiêu cực cho câu hỏi có thể được thực hiện vô điều kiện.

Vấn đề này dường như yêu cầu các thao tác bổ sung trong trường hợp xấu nhất, ngay cả đối với các biểu đồ có cạnh . Do đó dường như không thể đạt được ràng buộc cần thiết.ω(n)O(n)

Xét một đồ thị bao gồm các đỉnh , được sắp xếp trong một lưới. Các đỉnh trong mỗi hàng phụ thuộc vào chính xác hai đỉnh trong hàng trên. Họ này bao gồm các biểu đồ như thế này, để kết hợp các giá trị và phù hợp và sắp xếp các cạnh phù hợp.Gr,cr×crrc

Cụ thể, hãy để và . Ngoài ra, hãy để các trọng số của các đỉnh hàng trên cùng là các lũy thừa riêng biệt của 2.r=(log n)/2c=2n/log n

Mỗi đỉnh trong hàng dưới cùng sau đó sẽ phụ thuộc vào các đỉnh ở hàng trên cùng. Theo như tôi có thể nói, sau đó tồn tại một DAG cụ thể với các giá trị khác nhau cho mỗi trọng số hàng dưới cùng, như vậy trung bình không thể tái sử dụng được yêu cầu cho mỗi khoản tiền này.nω(log n)

Nhìn chung, điều này mang lại một giới hạn thấp hơn cho số lượng bổ sung, trong khi số cạnh là .ω(n)2c(r1)=O(n)

Điểm có vẻ là thứ tự một phần cơ bản là dày đặc, nhưng DAG đại diện cho sự giảm quá độ của nó, có thể thưa thớt.


Lập luận này rất thú vị, nhưng tôi không chắc liệu nó có thể được đưa ra thành một bằng chứng cho bất kỳ tuyên bố thú vị nào không. Xem xét các khó khăn phổ biến của việc chứng minh các giới hạn thấp hơn của các vấn đề, lập luận này có vẻ như là vấn đề đối với tôi.
Tsuyoshi Ito

@Tsuyoshi: Tôi nghĩ rằng sự tồn tại nên hoạt động thông qua một đối số xác suất và giới hạn dưới là yếu nên dường như có đủ không gian cho nó hoạt động. Nhưng bạn đã đúng, đó là chữ viết tay, cụm từ "trung bình không thể tái sử dụng" cần một nền tảng tốt hơn.
András Salamon

-2

Điều này là sai và dựa trên sự hiểu lầm về câu hỏi. Cảm ơn Tsuyoshi đã kiên nhẫn chỉ ra lỗi của tôi. Bỏ đi trong trường hợp người khác mắc lỗi tương tự.

Nếu số lượng tiền thân trực tiếp của một nút được giới hạn bởi , thì thuật toán đầu tiên thực hiện sắp xếp theo cấu trúc liên kết, sau đó xử lý các nút theo thứ tự này sẽ thực hiện công việc. Đo lường số lượng người tiền nhiệm ngay lập tức được đề xuất bằng cách xem DAG dưới dạng một phần. Một mô hình với số lượng người tiền nhiệm bị ràng buộc có thể phù hợp với lịch sử sửa đổi, trong đó chỉ có một vài tệp được thay đổi bởi hầu hết các phiên bản.k

Vấn đề là trong trường hợp đặc biệt này , đối với mỗi nút có nhiều nhất tiền thân theo thứ tự tuyến tính cần xem xét, vì vậy điều này có thể được thực hiện với các bổ sung .kO(k|V|)

Loại sắp xếp theo yêu cầu thời gian , cung cấp cho bạn giới hạn tiệm cận mà bạn đang tìm kiếm. Nhưng trong ứng dụng bạn mô tả, số lượng bổ sung tuyến tính có khả năng chiếm ưu thế.O(|V|+|E|)

Cách tiếp cận này cũng sẽ hoạt động tốt nếu có một số nút có nhiều tiền thân ngay lập tức, miễn là chúng tương đối không thường xuyên.


4
Tôi không hiểu. Làm thế nào để bạn tránh đếm kép khi DAG không phải là cây? Trong thực tế, nếu tôi không nhầm, trường hợp chung có thể được giảm xuống thành trường hợp mỗi đỉnh có nhiều nhất hai tiền thân và bất kỳ thuật toán thời gian tuyến tính nào cho trường hợp sau đều đưa ra thuật toán dòng thời gian cho trường hợp chung.
Tsuyoshi Ito

Giới hạn được yêu cầu là và nhận xét về đếm kép dường như bên cạnh điểm. Số lượng giới hạn của người tiền nhiệm ngay lập tức dường như là đủ; mỗi giá trị được sử dụng trong tối đa tổng một phần. kO(|V|+|E|)k
András Salamon

Tôi sợ rằng bạn hiểu nhầm ý kiến ​​của tôi. Tôi đang đặt câu hỏi về tính chính xác của thuật toán của bạn, không phải thời gian chạy. Giả sử một DAG có bốn đỉnh A, B, C, D với các cạnh A → B → D và A → C → D với mỗi đỉnh cho một số trọng lượng. Sau khi tính tổng một phần cho B và C, bạn không thể chỉ cần cộng tổng một phần cho B và C để tính tổng cho D vì làm như vậy sẽ thêm trọng số của đỉnh A hai lần.
Tsuyoshi Ito

@Tsuyoshi: vậy ngữ nghĩa có nghĩa là "tính toán "? Sau đó tôi đã hiểu nhầm câu hỏi, tóm tắt tất cả các con đường tiền nhiệm. u<vw(u)
András Salamon

1
Vâng. Và bây giờ tôi nhớ rằng lần đầu tiên tôi thấy câu hỏi này, tôi đã đọc sai câu hỏi theo cách tương tự và nghĩ rằng nó sẽ rõ ràng. Nhưng không, câu hỏi thực sự khó hơn thế. Thời gian để suy nghĩ….
Tsuyoshi Ito
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.