ottimizzare un algoritmo

Ottimizzare un algoritmo #2

Potenziare e ottimizzare un algoritmo, per quanto possa sembrare complicato, è l’arte del buon coding. Ciò permette di realizzare algoritmi complessi ma allo stesso tempo molto performanti evitando la presenza di bug o errori che possono comprometterne il funzionamento.

Creare password random

Abbiamo, nel precedente articolo, parlato di come sia possibile generare tre tipi diversi di password in maniera random a richiesta dell’utente. Dopo aver strutturato un’analisi corretta e i passi necessari a creare l’algoritmo siamo passati alle righe di codice vere e proprie …

				
					if s ==1:
    gen1 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuwxyz"
    ns = len(gen1)
    for i in range(int(n)):
        password =""
        for j in range(int(l)):
            num=random.randint(0,ns)
            password=password+gen1[num:num+1]
        print(str(i+1)+"\t"+password)

elif s ==2:
    gen2 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuwxyz0123456789"
    ns = len(gen2)
    for i in range(int(n)):
        password =""
        for j in range(int(l)):
            num=random.randint(0,ns)
            password=password+gen3[num:num+1]
        print(str(i+1)+"\t"+password)

elif s == 3:
    gen3 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuwxyz0123456789$£%&()*@-"
    ns = len(gen3)
    for i in range(int(n)):
        password =""
        for j in range(int(l)):
            num=random.randint(0,ns)
            password=password+gen3[num:num+1]
        print(str(i+1)+"\t"+password)
				
			

Il cuore del programma, la funzione che permette la creazione delle password non è per niente ottimizzata. Ciò che avremmo potuto fare in poche righe ci ha portato a creare delle parti uguali che non vanno per niente bene. Inoltre, un altro aspetto negativo che ci si presenta dal momento che non andiamo ad ottimizzare un algoritmo è la fase di debug, ovvero la fase di test del programma. Essa si presenta lenta e troppo ripetitiva.

Ottimizzare un algoritmo significa prima di tutto selezionare gli algoritmi e le strutture dati più adatte, e in secondo luogo scrivere un codice che il compilatore sia effettivamente in grado di trasformare in un codice eseguibile più efficiente; è quindi importante conoscere bene le caratteristiche, le potenzialità e le limitazioni all’ottimizzazione offerta dai compilatori. Piccoli cambiamenti nel codice sorgente possono riflettersi in grandi differenze nel codice eseguibile.

Leggi articolo   I multipli di multiplo

Soluzione ottimizzata dell'algoritmo genera password

				
					import random
sc=0
while True:
    print("Generatore di password")
    while True:
        N = int(input("Numero N di password da generare [1-50]:"))
        if N<1 or N>50:
            print("N deve essere compreso tra 1 e 50")
            continue
        else:
            break
        
    while True:
        L=int(input("Lunghezza L delle password da generare [10-20]:"))
        if L<10 or L>20:
            print("L deve essere compresa tra 10 e 20")
            continue
        else:
            break
    while True:
        print("\n1-Solo maiuscole e minuscole")
        print("2-Maiuscole,minuscole e numeri")
        print("3-Maiuscole,minuscole,numeri e i simboli $£%&()*@-")
        sc=(int)(input("Scelta del tipo di password(1-2-3)"))
        if sc < 1 or sc>3 :
            continue
        else:
            break
    if sc==1:
        simboli="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuwxyz"
    if sc==2:
        simboli="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuwxyz0123456789"
    if sc==3:
        simboli="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuwxyz0123456789$£%&()*@-"
    
    ns=len(simboli)

    for i in range(N):
        password=""
        for j in range(L):
            num=random.randint(0,ns)
            password=password+simboli[num:num+1]
        print(str(i+1)+"\t"+password)
    continui=input("\nAltraelaborazione(S/N)?")
    if continui=='n'or continui=='N':
        print("STOP AL PROGRAMMA")
        break
				
			

Ciò che prima abbiamo fatto in 30 righe, ora l’abbiamo realizzato in 50 righe. Solamente che prima in tutte quelle righe abbiamo creato solo la parte centrale del programma, il cuore. Invece, in meno di 50 righe, abbiamo realizzato il codice del nostro algoritmo in maniera completamente ottimizzata e potente.

password random
ottimizzare un algoritmo

Come possiamo vedere dalle immagini qui sopra, il nostro output è praticamente identico. Questo ci permette di capire come, nella realizzazione del codice, ciò che conta è la struttura backend e non i “fiorellini” e le “cornicette. Ottimizzare un algoritmo è questo, è far comunicare le righe di codice tra di loro !

Per testare il funzionamento dell’algoritmo consiglio di scaricare un editor di testo come Visual Studio Code o usufruire
degli editor online gratis che permettono, senza scaricare alcun tipo di file, di realizzare algoritmi e testarli. Dopo averne valutati alcuni, ho deciso di affidarmi a Repl.it, semplice, affidabile e potente.

Condividi il post

Condividi su facebook
Condividi su google
Condividi su twitter
Condividi su email
Condividi su whatsapp