Sto studiando per un esame e ho trovato questa domanda che sembra un po 'complicata.O (n) Algoritmo per scoprire se 2 array hanno 2 elementi che si sommano a un numero
Sia A [1 ... n] e B [1 ... n] siano 2 matrici di numeri interi tali che ciascun elemento di A o B sia compreso tra 0 e m dove m = O (n). (Io parto dal presupposto che significa m < n?)
Abbiamo bisogno di progettare un O (n) algoritmo che trova due elementi A [i] e B [j] tale che A [i] + B [j ] = un dato numero k. Se non esistono, lanciamo un messaggio di errore.
Ora l'ordinamento sarebbe fuori questione, poiché i migliori algoritmi di ordinamento sono O (n lg n).
Forse utilizzare una tabella hash .. O semplicemente creare un array più piccolo X di lunghezza m tale che ogni indice conta le occorrenze di un numero in A .. quindi passiamo attraverso B .. calcola diff = k - B [j ] .. e controllare X [diff] .. se è maggiore di zero, allora sì, esiste, allora potremmo passare attraverso un nuovo per trovare il suo indice ..
Cosa ne pensate voi ragazzi
Potrebbe essere che in realtà è consentito preelaborare gli array (spendendo una quantità di tempo, come 'O (n log n)'), e il requisito 'O (n)' in realtà si applica solo a le query successive per diversi valori di 'k'? – AnT
Salve. Hai già risposto alla tua domanda! Solo per il binning, o come hai detto "O semplicemente crea un array più piccolo X ...". Sarà molto efficiente, facile da implementare ed è facile vedere che il suo runtime è in O (n). –
Mi rendo conto che ... Volevo solo vedere se l'interweb aveva una soluzione migliore .. ma grazie –