Logo dell'Università di Catania: Siciliae Studium Generale 1434 Logo del Centro IPPARI, Programmazione
matite e gomma
Loghi istituzionali: Siciliae Studium Generale 1434, Centro ricerche IPPARI, Università di Catania, Facoltà di Scienze Matematiche, Fisiche, Naturali, Insegnamento di Programmazione

Algoritmi e strutture dati nel Problema 3x+1

Lezione 13 di Programmazione 2

Docente: Giuseppe Scollo

Università di Catania, sede di Comiso (RG)
Facoltà di Scienze Matematiche, Fisiche e Naturali
Corso di Studi in Informatica applicata, AA 2007-8

Logo di Conformità WCAG-1 di Livello Tripla A, W3C-WAI Web Content Accessibility Guidelines 1.0 Validazione XHTML 1.0 Validazione CSS 2

Indice

  1. Algoritmi e strutture dati nel Problema 3x+1
  2. il Problema 3x+1
  3. traiettorie 3x+1: alcune definizioni
  4. ricerca dei class record (CR)
  5. un algoritmo parallelo di ricerca dei CR
  6. ottimizzazione (1): setaccio
  7. calcolo e applicazione del setaccio
  8. ottimizzazione (2): taglio in coda
  9. ottimizzazione (3): taglio in testa
  10. combinazione di taglio in testa e in coda
  11. strutture dati per il taglio in testa
  12. ottimizzazione (4): accelerazione
  13. interferenza e freno
  14. aritmetica 3x+1 in due parole
  15. riferimenti

il Problema 3x+1

origini incerte (v. (Lagarias, 1985) per saperne di più):

formulazione ufficiale del Problema: sia f : N+ → N+ definita dalle regole seguenti:

è vero che l'applicazione iterata di f converge sempre a 1 ?

o, in altri termini, che f* ha il ciclo 1 → 4 → 2 → 1 quale (unico) attrattore?

Mathematics is not yet ready for such problems (Erdös)

traiettorie 3x+1: alcune definizioni

non ci poniamo l'obiettivo di risolvere il Problema (congettura: risposta positiva)

ci interessa il comportamento dinamico di f*

concetti di base della dinamica di f* :

ricerca dei class record (CR)

l'accertamento che un x sia un CR richiede la certezza che nessun y < x abbia lo stesso ritardo:     → calcolo del ritardo D(y) per tutti gli y < x ?

non necessariamente, poiché varie leggi pongono in relazione i ritardi di traiettorie confluenti in uno stesso punto

tali leggi possono rendere più spedita la ricerca dei CR, che tuttavia richiede una esplorazione esaustiva dello spazio di ricerca

questa può essere facilmente parallelizzata partizionando lo spazio di ricerca in intervalli disgiunti, esplorati da istanze indipendenti di un programma di ricerca, opportunamente parametrizzato, ciascuna delle quali produca un insieme di candidati CR

un algoritmo parallelo di ricerca dei CR

ipotesi: siano noti tutti i CR minori di un dato M

obiettivo: trovare tutti i nuovi CR minori di N > M

struttura DAG della ricerca parallela dei CR

ottimizzazione (1): setaccio

al cuore della ricerca dei CR è la funzione di calcolo del ritardo

l'esecuzione più rapida è quella ... di cui si può fare a meno :)

la confluenza di traiettorie in uno stesso punto comporta che la presenza di CR si possa escludere da certe classi di congruenza

per n > 0, le traiettorie di 8n+5 e 8n+4 confluiscono a 6n+4 dopo lo stesso numero di passi (3), dunque D(8n+5) = D(8n+4) → 8n+5 non può essere un CR

ciò si generalizza alle classi di congruenza (2k-2 + (k mod 2)2k-1 - 1) (mod 2k), k > 2

un'approssimazione limitata (e.g. k=17), è efficientemente realizzabile con un setaccio

calcolo e applicazione del setaccio

costanti e strutture dati:

calcolo del setaccio:

applicazione del setaccio:

ottimizzazione (2): taglio in coda

tutte le traiettorie convergenti a 1 prima o poi cadono sotto 2t, per qualsiasi t > 0

il calcolo del ritardo può dunque essere reso più celere mediante il precalcolo e la memorizzazione di D(n) per ogni n < 2t,

si aggiunge quindi D(n) al ritardo parzialmente calcolato di x non appena la traiettoria di x raggiunge un qualsiasi n < 2t

in base a criteri, dipendenti dall'architettura hardware, simili a quelli di scelta ottimale della dimensione del setaccio:

risulta migliore una soglia bassa (t fra 8 e 16), dipendente dalla dimensione della cache

l'utilità del taglio in coda deriva da altre tecniche di ottimizzazione, come vedremo appresso

ottimizzazione (3): taglio in testa

due DR sono consecutivi se non c'è alcun DR di valore intermedio fra loro

si può sfruttare questo fatto per abbandonare anzitempo il calcolo del ritardo di traiettorie senza speranza:

pregio di questa tecnica: auto-ottimizzante!
il progresso della ricerca dei CR prima o poi permette di

combinazione di taglio in testa e in coda

le soglie di taglio in testa e di taglio in coda si combinano come qui si illustra:

soglie di taglio in testa e in coda

strutture dati per il taglio in testa

l'efficacia del taglio in testa varia al variare dell'intervallo di ricerca

attualmente è in uso una sequenza di 7 soglie di taglio (per valori decrescenti), ottimizzata su base empirica, per l'esplorazione oltre 257

in forma semplificata, le principali costanti attualmente in uso per il taglio in testa sono così definite (per macchina a 64 bit):

ottimizzazione (4): accelerazione

una piccola accelerazione del calcolo del ritardo si ottiene rimpiazzando la funzione f con T, definita come f sui numeri pari, mentre per x dispari si ha:

chiaramente, se la T-traiettoria da x a 1 ha A applicazioni di questa regola e E applicazioni del dimezzamento dei pari, allora D(x) = 2A + E

l'interesse a T deriva dall'esistenza di una permutazione dei residui (mod 2k), definita dal k-prefisso del cosiddetto vettore di parità delle T-traiettorie, cioè la sequenza binaria, dipendente da x, definita da vi(x) = (T ix) mod 2

si possono dunque definire 2k composizioni distinte di k passi di applicazione di T, e decidere quale di esse si debba applicare a x solo in base al valore del residuo x (mod 2k) : ne risulta una notevole accelerazione del calcolo, mediante tecniche di pre-processing

interferenza e freno

anche la scelta ottimale del fattore di accelerazione k dipende dalla dimensione della cache, ma:

Interferenza di accelerazione e taglio in testa

soluzione: controllo dell'accelerazione, vale a dire, accelerazione più moderata

aritmetica 3x+1 in due parole

sebbene si adoperino macchine a 64 bit, una parola di memoria non basta alla rappresentazione di molti dei valori attraversati da traiettorie con origine nell'attuale intervallo di ricerca

l'aritmetica delle traiettorie 3x+1 è relativamente semplice da realizzare per numeri rappresentati da 2 parole, quando si calcola il ritardo procedendo un passo alla volta nella traiettoria

buona parte dell'aumento di complessità può però essere affrontato in sede di pre-elaborazione delle costanti in gioco, dunque senza compromettere le prestazioni del programma di ricerca dei CR

la formulazione impiegata nel software attualmente in uso soddisfa questo requisito, e fornisce una definizione induttiva (in k), dei coefficienti che intervengono nell'espressione, che ne permette l'impiego in sede di pre-elaborazione; v. (Scollo, 2008) per dettagli

riferimenti