Cách hiệu quả nhất để chuyển đổi mạch


18

EDIT (ngày 22 tháng 8 năm 2011):

Tôi tiếp tục đơn giản hóa câu hỏi và đặt tiền thưởng cho câu hỏi. Có lẽ câu hỏi đơn giản hơn này sẽ có một câu trả lời dễ dàng. Tôi cũng sẽ vượt qua tất cả các phần của câu hỏi ban đầu không còn phù hợp. (Cảm ơn Stasys Jukna và Ryan O'Donnell đã trả lời một phần câu hỏi ban đầu!)


Lý lịch:

Cho một mạch AC 0 có độ sâu k và kích thước S, tồn tại một mạch AC 0 khác có cùng chức năng với độ sâu k và kích thước sao cho mạch mới có fanout = 1 cho tất cả các cổng. Nói cách khác, mạch trông giống như một cái cây (ngoại trừ tại các đầu vào, vì các đầu vào có thể mở ra nhiều hơn một cổng). Một cách để làm điều này là nhân đôi tất cả các cổng có fanout> 1 cho đến khi tất cả các cổng có fanout = 1.O(Sk)

Nhưng đây là cách hiệu quả nhất để chuyển đổi AC 0 mạch để AC 0 mạch với fanout 1? Tôi đã đọc những điều sau đây trong Bài giảng 14 của ghi chú khóa học của Ryan O'Donnell :

Giả sử C là bất kỳ mạch độ sâu k nào có kích thước S tính toán chẵn lẻ. Đây là một bài tập để chỉ ra rằng C có thể được chuyển đổi thành mạch độ sâu k được phân cấp, trong đó các mức xen kẽ cổng AND và OR, dây đầu vào là 2n chữ và mỗi cổng có quạt 1 (nghĩa là cây ) - và kích thước tăng lên tối đa .(2kS)2O(S4)

Lưu ý: Trên thực tế, đây là một bài tập hơi khó. Sẽ dễ dàng hơn nếu bạn chỉ phải lấy kích thước , điều này gần như giống nhau cho các mục đích của chúng tôi nếu bạn nghĩ về k như một hằng số liên tục.O(Sk)

Điều này có nghĩa là có một cách để lấy bất kỳ độ sâu k AC 0 có kích thước S và chuyển đổi nó thành một mạch AC 0 với fanout 1, độ sâu k và kích thước ? Nếu vậy, làm thế nào được thực hiện và đây có phải là phương pháp được biết đến nhiều nhất? (2kS)2

Câu hỏi gốc:

Với mạch AC 0 có độ sâu k và kích thước S, phương pháp nào được biết đến nhiều nhất (về việc giảm thiểu kích thước mạch của mạch kết quả) để chuyển đổi mạch này thành mạch AC 0 có độ sâu k và quạt cổng 1? Có bất kỳ giới hạn thấp hơn được biết đến cho điều này?


Câu hỏi mới hơn, đơn giản hơn:

Câu hỏi này là một sự thư giãn của câu hỏi gốc mà tôi không nhấn mạnh rằng mạch kết quả là độ sâu không đổi. Như đã giải thích ở trên, có một cách để chuyển đổi mạch AC 0 có độ sâu k, kích thước S thành mạch có kích thước sao cho mạch mới có quạt = 1 cho tất cả các cổng. Có xây dựng tốt hơn?O(Sk)

Với mạch AC 0 có độ sâu k và kích thước S, phương pháp nào được biết đến nhiều nhất (về mặt tối thiểu hóa kích thước mạch của mạch kết quả) để chuyển đổi mạch này thành mạch có độ sâu bất kỳ với cổng ra 1?


5
Giới hạn là ok Nhưng nếu ràng buộc sẽ giữ cho các mạch tùy ý (không chỉ các máy tính có chức năng Parity), thì người ta có thể mô phỏng mọi mạch fanin-2 có kích thước bởi một fanin- 2 công thức có kích thước : Cổng -2 là đủ để mô phỏng một cổng của fanin không giới hạn. Sau đó, công thức có thể được chuyển thành một trong độ sâu (một kết quả nổi tiếng, được gán sai cho Spira). Do đó, chúng ta sẽ có được độ sâu mạch là hầu hết . Nhưng điều này là quá tốt để trở thành sự thật: giới hạn trên được biết đến nhiều nhất cho độ sâu mạch chỉ là( 2 k S ) 2 S O ( S 5 ) S O ( log S ) O ( log S ) O ( S / log S )O(Sk)(2kS)2SO(S5)SO(logS)O(logS)O(S/logS).
Stasys

2
Btw thực sự cũng giữ các mạch tùy ý , nhưng chỉ khi chúng ta cho phép các cổng của fanin-2 (xem, ví dụ, Thm. 4.1 trong cuốn sách của Wegener); sau đó mạch vẫn có thể nhớ kết quả trung gian. Tình huống với fanin-1 rất khác nhau: ở đây các mạch không có bộ nhớ nào cả. Nhưng câu hỏi của Robin rất thú vị. Sẽ rất thú vị khi chỉ ra rằng các mạch độ sâu 3 có kích thước có thể được mô phỏng bằng các công thức độ sâu 3 có kích thước nhỏ hơn . S S 2O(kS)2)SS2
Stasys

4
Tôi sẽ tin tưởng bất cứ điều gì Stas nói ở trên; Tôi đã không cẩn thận trong những ghi chú đó (xin lỗi). Mặt khác, tôi nhớ khi viết chúng khá thất vọng về việc tìm nguồn cung ứng thực tế - được đề cập trong nhiều bài báo nhưng hầu như không bao giờ trích dẫn - rằng người ta có thể chuyển đổi các mạch tùy ý thành các lớp mà không làm nổ tung kích thước "nhiều" . Tôi rất thích nhìn thấy một con trỏ đến kết quả được biết đến nhiều nhất về chủ đề này. AC0
Ryan O'Dellell

2
@Ryan O'Donnell: thực sự, người ta có thể dễ dàng tạo ra một mạch được xếp lớp với . Chúng tôi sử dụng tính kết hợp để đạt được rằng mọi cổng AND chỉ có các cổng OR làm đầu vào và ngược lại; độ sâu vẫn không thay đổi. Sau đó sắp xếp các cổng theo độ sâu của chúng và thêm các cổng fanin-1 OR và AND tầm thường để có được mạch phân lớp; độ sâu vẫn giữ nguyên và kích thước chỉ tăng theo hệ số k. Nhưng tôi hiểu rằng Robin muốn một mạch được chuyển đổi thành một công thức (một mạch giống như cây, ngoại trừ những chữ đầu vào có thể có fanout lớn). O(kS)
Stasys

2
@Ryan O'Donnell: Cảm ơn bạn đã phản hồi và đưa lên các bài giảng của bạn trực tuyến! Đặc biệt, các bài giảng của bạn về phân tích các hàm Boolean là rất hữu ích.
Robin Kothari

Câu trả lời:


11

Tôi sẽ cố gắng tóm tắt ý kiến ​​trước đây của tôi.

kSASFO(SA)A=O(S/log2S)S=O(n)exp(n/logn)

FFM=O(S2A)DFD=O(logM)=O(AlogS)D1.73log2MDepth=O(Size/logSize)AS/log2S

kA=kA=k1k=3SS2? Tôi đoán câu trả lời là "không" (có thể là một bài tập thú vị cho học sinh). Công thức độ sâu 3 chỉ là một OR lớn của CNF. Câu hỏi đặt ra là tìm một OR của CNF có chung nhiều mệnh đề, nhưng nếu không thì "rất khác" để buộc một công thức 3 độ sâu lớn.

SD3S2n2DO(S2)O(DlogS)

fAC0 kSfDk1+log2SDklogSlogS

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.