/ / Quale algoritmo scegliere per un'enorme moltiplicazione di numeri interi, a seconda della dimensione N - algoritmo

Quale algoritmo scegliere per un'enorme moltiplicazione intera, in base alla dimensione N - algoritmo

Nel mio tempo libero mi sto preparando per domande di intervista come: implementare la moltiplicazione dei numeri rappresentati come matrici di cifre. Ovviamente sono costretto a scriverlo da zero in una lingua come Python o Java, quindi una risposta come "usa GMP" non è accettabile (come menzionato qui: Comprensione dell'algoritmo di Schönhage-Strassen (enorme moltiplicazione di numeri interi)).

Per quale esattamente range delle dimensioni di quei 2 numeri (cioè il numero di cifre), dovrei scegliere

  1. Algoritmo scolastico
  2. Algoritmo di Karatsuba
  3. Toom-Cook
  4. Algoritmo di Schönhage – Strassen?

È Schönhage – Strassen O(n log n log log n) sempre una buona soluzione? Wikipedia afferma che Schönhage – Strassen è consigliabile per numeri oltre 2^2^15 a 2^2^17. Cosa fare quando un numero è ridicolmente enorme (ad es. 10,000 a 40,000 cifre decimali), ma la seconda è costituita solo da un paio di cifre?

Tutti questi 4 algoritmi si parallelizzano facilmente?

risposte:

1 per risposta № 1

Puoi sfogliare la sorgente della GNU Multiple Precision Arithmetic Library e vedere le loro soglie per il passaggio da un algoritmo all'altro.

Più pragmaticamente, dovresti profila semplicemente la tua implementazione degli algoritmi. GMP mette a lotto di sforzo per l'ottimizzazione, quindi i loro algoritmiavrà diversi fattori costanti rispetto ai tuoi. La differenza potrebbe facilmente spostare le soglie di un ordine di grandezza. Scopri dove si incrociano i tempi all'aumentare delle dimensioni di input il tuo codice e impostare le soglie di conseguenza.

Penso che tutti gli algoritmi siano suscettibili diparallelizzazione, dal momento che sono per lo più costituiti da passaggi di divisione e conquista. Ma tieni presente che la parallelizzazione è un'altra cosa che farà muovere le soglie abbastanza.