Cara paling efisien untuk mengubah sirkuit

18

EDIT (22 Agu 2011):

Saya selanjutnya menyederhanakan pertanyaan dan memberi hadiah pada pertanyaan itu. Mungkin pertanyaan yang lebih sederhana ini akan memiliki jawaban yang mudah. Saya juga akan mencoret semua bagian dari pertanyaan awal yang tidak lagi relevan. (Terima kasih kepada Stasys Jukna dan Ryan O'Donnell karena telah menjawab sebagian pertanyaan awal!)


Latar Belakang:

Diberikan sirkuit AC 0 dengan kedalaman k dan ukuran S, ada sirkuit AC 0 lain yang menghitung fungsi yang sama dengan kedalaman k dan ukuran sehingga sirkuit baru memiliki fanout = 1 untuk semua gerbang. Dengan kata lain, rangkaiannya terlihat seperti pohon (kecuali pada input, karena input mungkin menyebar ke lebih dari satu gerbang). Salah satu cara untuk melakukan ini adalah dengan menduplikasi semua gerbang yang memiliki fanout> 1 sampai semua gerbang memiliki fanout = 1.O(Sk)

Tapi apakah ini cara yang paling efisien untuk mengkonversi AC 0 sirkuit untuk AC 0 sirkuit dengan fanout 1? Saya membaca berikut ini di Kuliah 14 catatan kursus Ryan O'Donnell :

Misalkan C adalah sirkuit kedalaman-k ukuran S yang menghitung Parity. Merupakan latihan untuk menunjukkan bahwa C dapat dikonversi menjadi sirkuit level-k level, di mana level bergantian dengan gerbang AND dan OR, kabel input adalah 2n literal, dan setiap gerbang memiliki fan-out 1 (yaitu, itu adalah pohon ) - dan ukurannya meningkat paling banyak .(2kS)2O(S4)

Catatan kaki: Sebenarnya, ini adalah latihan yang sedikit rumit. Lebih mudah jika Anda hanya perlu mendapatkan ukuran , yang hampir sama untuk keperluan kami jika Anda menganggap k sebagai "konstan".O(Sk)

Apakah ini berarti ada cara untuk mengambil rangkaian kedalaman k AC 0 ukuran S dan mengubahnya menjadi sirkuit AC 0 dengan fanout 1, kedalaman k dan ukuran ? Jika demikian, bagaimana ini dilakukan dan apakah ini metode yang paling terkenal? (2kS)2

Pertanyaan asli:

Diberikan sirkuit AC 0 dengan kedalaman k dan ukuran S, apa metode yang paling terkenal (dalam hal meminimalkan ukuran sirkuit dari sirkuit yang dihasilkan) dari mengubah ini menjadi sirkuit AC 0 dari kedalaman k dan gerbang fanout 1? Apakah ada batas bawah yang diketahui untuk ini?


Pertanyaan baru, lebih sederhana:

Pertanyaan ini adalah relaksasi dari yang asli di mana saya tidak bersikeras bahwa rangkaian yang dihasilkan menjadi kedalaman konstan. Seperti dijelaskan di atas, ada cara untuk mengubah sirkuit AC 0 dengan kedalaman k, ukuran S menjadi sirkuit dengan ukuran sehingga sirkuit baru memiliki fanout = 1 untuk semua gerbang. Apakah ada konstruksi yang lebih baik?O(Sk)

Diberikan sirkuit AC 0 dengan kedalaman k dan ukuran S, apa metode yang paling terkenal (dalam hal meminimalkan ukuran sirkuit dari sirkuit yang dihasilkan) untuk mengubahnya menjadi sirkuit dengan kedalaman apa saja dengan gate fanout 1?

Robin Kothari
sumber
5
O(Sk)(2kS)2SO(S5)SO(logS)O(logS)O(S/logS)
2
O(kS)2)SS2
4
AC0
2
O(kS)
2
@Ryan O'Donnell: Terima kasih atas tanggapannya dan telah menyiapkan catatan kuliah Anda secara online! Secara khusus, catatan kuliah Anda tentang analisis fungsi Boolean sangat membantu.
Robin Kothari

Jawaban:

11

Saya akan mencoba merangkum komentar saya sebelumnya.

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? Saya kira jawabannya harus "tidak" (bisa menjadi latihan yang menarik bagi siswa). Formula kedalaman-3 hanyalah OR besar dari CNF. Pertanyaannya adalah untuk menemukan OR dari CNF yang memiliki banyak klausa yang sama, tetapi sebaliknya "sangat berbeda" untuk memaksakan formula kedalaman-3 yang besar.

SD3S2n2DO(S2)O(DlogS)

fAC0 kSfDk1+log2SDklogSlogS

Stasys
sumber