Site icon Petar Karan

[kotlin] Disegnare matrice concentrica in Python data una dimensione arbitraria (e valutare le prestazioni)

Similmente a quanto abbiamo fatto con Python, vogliamo scrivere un algoritmo in Kotlin che, dato un lato n-esimo arbitrario, disegni una matrice di valori concentrici. Il risultato che vogliamo ottenere è il seguente:

Anche in questo caso vogliamo misurare il tempo di calcolo per ognuno dei metodi adottati. L’algoritmo può essere affrontato in molti modi, similmente a quanto abbiamo fatto con Python, quindi in questo caso mi limiterò a due casi soltanto, con le relative valutazioni di velocità.

Cominciamo con il primo metodo, che è anche quello più semplice e meno efficiente.

Definiamo quindi una funzione che ci permetta di scegliere se acquisire l’input dall’utente oppure passarlo noi programmaticamente (e analogamente che consenta di scegliere se stamparlo o meno a video).

Per eseguirlo lo chiamiamo dentro il main.

Nel secondo metodo avremo bisogno di definire un oggetto di appoggio per le variabili che vogliamo usare globalmente:

E creiamo una funzione di calcolo dei valori:

Procediamo alla creazione della seconda funzione:

Mettiamo alla prova entrambi i metodi:

Su un quadrato con n = 10 il primo metodo risulta più efficiente del secondo:

Proviamo ad alzare il tiro impostando n = 1000

Raccogliamo un po’ di dati per valori di n rispettivamente impostati a 10, 100, 1.000, 10.000 e 20.000:

Nel caso in si dovesse incorrere nell’errore Exception in thread "main" java.lang.OutOfMemoryError: Java heap space aumentare lo spazio del Shared heap size in Settings -> Build, Execution, Deployment -> Compiler

Oppure creare una configurazione personalizzata per il compilatore come per esempio questa:

Comunque sia otterremo così i seguenti dati:

n metodo1 metodo2
10 0,0103 0,0558
100 2,608 1,032
1000 368,7968 7,4704
10000 324428,347 206,1374
20000 2797371,15 1589,187

Al crescere della complessità del sistema vediamo come cresce il rapporto tra il metodo1 e il metodo2

Exit mobile version