Due problemi di somma in Python

Due problemi di somma in Python
Il problema di due somme è una versione del problema della somma del sottoinsieme ed è una domanda di programmazione comune. Sebbene esista una soluzione di programmazione dinamica popolare per il problema della somma del sottoinsieme, possiamo costruire un approccio temporale O (n) per il problema delle due somme. L'obiettivo è identificare tutte le coppie di due numeri che si sommano a un certo "s" in un array non desiderato. Questo articolo parla di un famoso compito di codifica spesso richiesto nelle interviste di Python.

Risolvere due problemi di somma in Python

Il tuo approccio a questo argomento sarà determinato dal tuo livello di competenza. Un metodo è loop attraverso l'elenco, confrontando ogni elemento con il resto. Passeremo attraverso due diverse tecniche che puoi usare per porre rimedio a questo problema.

Dichiarazione problema: Restituire tutte le coppie di due numeri la cui somma è uguale a un determinato bersaglio da una serie di numeri interi. Puoi presumere che ogni input abbia solo una risposta razionale e che lo stesso elemento non possa essere riutilizzato.

Cominciamo spiegando la dichiarazione del problema e poi passiamo alle possibili soluzioni. Ciò significa davvero che dobbiamo costruire una funzione per verificare se ci sono valori in questo array che si sommano al numero target fornito. Forniremo un esempio di base per descrivere il problema e la soluzione.

Supponiamo che ci siano stati dati i numeri [4, 6, 1, -5, 8] e che la somma target era 9. Vogliamo vedere se questo array ha una coppia di numeri che si aggiungono alla somma target fornita. Come puoi vedere, la procedura dovrebbe restituire 8 e 1, che somma fino a 9 come totale desiderato. Quindi, qual è la migliore strategia per affrontare questo problema? Fare riferimento alle seguenti sezioni:

Soluzione 1:

La prima risposta che mi viene in mente è ripetere il ciclo due volte. La tecnica nativa ne usa due per loop e viaggia due volte sull'array completo per raggiungere la somma prevista.

Quindi, attraverseremmo l'array uno alla volta. In questo modo, è necessario controllare il resto dell'array per sapere se la somma è uguale al valore del numero specificato mentre si passa attraverso tutti i numeri.

Ad esempio, potremmo continuare con 4 e farsi strada attraverso il resto dei numeri [6, 1, -5, 8] per determinare se aggiungerne 4 a uno di essi fornisce 9 o no. Passeremo al numero successivo, 6, e controlleremo anche i numeri [1, -5, 8] per vedere se l'aggiunta del numero 6 a uno qualsiasi dei numeri presentati nell'array dà 9, prima di continuare il processo attraverso l'array. Il codice Python per un problema di due somme con due per loop è mostrato di seguito.

def twosumprob (my_arr, t_sum):
per i in gamma (len (my_arr) -1):
per j in gamma (i, len (my_arr)):
Se my_arr [i]+my_arr [j] == t_sum:
return (my_arr [i]. my_arr [j])
ritorno[]

L'idea è di far emergere che mentre lo facciamo potrebbe non essere l'uso del tempo più efficiente. È ancora un'opzione praticabile. Due per loop comporteranno la complessità del tempo O (N2) da quando il viaggio due volte utilizzando due per loop significherebbe attraversare il tempo N2 in termini di complessità del tempo. Poiché non stiamo conservando alcun numero interi, la complessità dello spazio è O (1).

La seconda soluzione è un metodo di smistamento. Sebbene il metodo possa occupare più spazio, è più efficiente senza dubbio.

Soluzione 2:

Utilizzeremo l'algoritmo di smistamento in questo modo poiché l'ordinamento richiede NLOG (N) tempo di tempo, il che è considerevolmente più efficiente di O (N2), impiegato nella strategia precedente con due per loop.

I numeri dell'array sono ordinati per primi in questo approccio. Avremo due puntatori, uno a sinistra al primo numero nell'array e l'altro a destra all'ultimo numero nell'array.

Semplificheremo nuovamente questo problema utilizzando l'esempio dell'array precedente di [4, 6, 1, -5, 8]. I dati vengono quindi ordinati per riflettere un array ordinato di [-5, 1, 4, 6, 8]. Il nostro puntatore sinistro (indicato come l_pointer) sarà impostato su -5 e il nostro puntatore destro (indicato come r_pointer) a 8. Vedremo se -5 + 8 è uguale a 9, che è il totale specificato. No, perché 3 è inferiore alla somma dichiarata di 9. Sposteremo il nostro cursore in ordine crescente, da sinistra a destra.

Ora torneremo a 1 e vedremo se l'aggiunta di 1 e 8 è uguale a 9, cosa che fa. Questo ci dà la coppia che stiamo cercando. Gli accoppiamenti 1 e 8 saranno ora stampati come coppie che forniranno le due somme numeriche richieste.

Parliamo di questo problema un po 'di più. Considera il seguente scenario: se la somma target è dieci e la somma di uno e otto è inferiore a dieci, il puntatore sinistro verrà spostato fino a quattro in ordine crescente. Il totale di 4 e 8 è uguale a 12, che è maggiore del totale dell'obiettivo.

Di conseguenza, sposteremo il puntatore giusto in ordine decrescente dalla posizione destra a sinistra. Il puntatore sinistro è ora a 4, mentre il puntatore destro si è spostato a 6. In questa situazione, abbiamo raggiunto la coppia necessaria di 4 e 6, che ci darà l'importo richiesto di 10. Il seguente codice Python mostra come vengono implementate le informazioni precedenti:

def twosumprob (my_arr, t_sum):
my_arr.ordinare()
l_pointer = 0
r_pointer = len (my_arr) -1
mentre L_pointer < r_pointer:
c_sum = my_arr [l_pointer]+my_arr [r_pointer]
Se c_sum == t_sum:
return (my_arr [l_pointer], my_arr [r_pointer])
elif c_suml_pointer+= 1
altro:
r_pointer- = 1
ritorno[]

Utilizziamo O (NLOGN) in termini di complessità del tempo a causa dell'ordinamento, che è migliore del metodo della soluzione precedente, ed è un po 'più costoso perché utilizza O (NLOGN).

Conclusione:

In questo articolo, abbiamo esaminato il noto problema di somma di Python e offerto due soluzioni praticabili da considerare. Abbiamo aggiunto due soluzioni per risolvere questo problema di somma in Python. Questi esempi possono essere applicati in diversi modi secondo le esigenze dell'utente. Speriamo che tu abbia trovato l'articolo utile. Dai un'occhiata ad altri articoli di suggerimento Linux per ulteriori suggerimenti e informazioni.