Il problema è trovare il numero di stringhe binarie ripetibili di lunghezza nA la stringa binaria è ripetibile se può essere ottenuta da qualsiasi sottostringa della stringa binaria che si ripete a forma la stringa binaria originale.conta il numero di stringa binaria di lunghezza n ripetibile
Example
"1010" is a repeatable string as it can be obtained from "10" by repeating 2 number of times
"1001" is not a repeatable string as it cannot be obtained from any sub string of "1001" by repeating them any number of times
La soluzione ho pensato è quello di generare ogni possibile stringa binaria di lunghezza n e verificare se è un algoritmo ripetibile o non utilizzo KMP, ma questa soluzione non è fattibile anche per piccole n avere n = 40 .
Il secondo approccio che ho pensato è
- per divisore k di n trovare tutte le stringhe secondarie di lunghezza k che si ripete n/k volte
Esempio per n = 6 abbiamo divisore 1,2,3
per lunghezza 1 abbiamo 2 sottostringa "1" e "0" che si ripete 6 volte così "111111" e "000000" sono stringhe ripetibili
per la lunghezza 2 abbiamo 4 sub stringhe "00" "01" "10" "11" in modo da "000000" "010101" "101010" e "111111" sono stringhe ripetibili
in modo simile per lunghezza 3 abbiamo 8 stringhe ripetibili.
- Somma tutta la stringa generata divisore e sottrarre i duplicati.
Nell'esempio di cui sopra la stringa "111111" e "000000" è stato contato 3 volte per ciascuna delle divisor.so chiaramente io sono più counting.I necessario sottrarre i duplicati, ma non riesco a pensare di comunque di sottrarre i duplicati dal mio conteggio effettivo Come posso farlo?
Sono diretto nella giusta direzione o ho bisogno di un altro approccio?
Il tuo approccio attuale mi sembra buono.Per capire come evitare il conteggio delle stringhe due volte, sarebbe una buona idea esaminare (per esempio l'articolo di Wikipedia per) il Principio di esclusione-esclusione. –