Per quale c è divisione per c in AC0?


11

Supponiamo che il nostro input sia un binario e che dobbiamo generare , dove è un numero intero costante. Questo è solo uno spostamento se è una potenza di due, ma per quanto riguarda gli altri numeri? Possiamo farlo con un circuito a profondità costante per ogni ? Che dire di ?⌊ x / c ⌋ c c c c = 3x⌊x/c⌋cccc=3

ps. So che calcolare è difficile, ma questo non sembra correlato.xmodc

Risposte:


16

L'aggiunta e la sottrazione di numeri binari sono in AC0 .

Per qualsiasi numero costante c , xmodc è AC0 riducibile alla divisione per c ( ⌊x/c⌋ ):

xmodc=x−(⌊x/c⌋+⋯+⌊x/c⌋⏞c times)

È noto che xmodc è difficile per AC0 per qualsiasi c che non sia una potenza di 2 . Quindi ⌊x/c⌋ è difficile per AC0 per qualsiasi c che non sia una potenza di 2 .

Come notato da Emil nei commenti, c'è una facile riduzione per dispari prime da (ovvero, con ) a con input binario: usiamo solo bit di input che sono multipli di e utilizziamo FLT ( ). M O D c ∑ i x i mod c x i ∈ { 0 , 1 } x mod c p - 1 2 ( p - 1 ) i mod p = 1cMODc∑iximodcxi∈{0,1}xmodcp−12(p−1)imodp=1


Lo stesso argomento si applica a qualsiasi che non sia un potere di 2.c
— Emil Jeřábek

4
Che non sia AC ^ 0 per altri è facile da mostrare: per esempio, possiamo supporre che sia un numero primo dispari, e quindi puoi ridurre MOD_p ad esso usando ogni th bit . Oppure puoi applicare la classificazione Barrington-Thérien: è un linguaggio regolare e il suo monoide sintattico è un gruppo non banale. c cxmodcc( p - 1 )c=p(p−1)
— Emil Jeřábek,

@Emil Jerabek: Grazie, questo è stato esattamente l'aiuto di cui avevo bisogno :)
— daniello,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.