|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Jun 2007
Messaggi: 1232
|
Piccolo problema di algoritimi
Salve ragazzi sto studiando Algoritmi e strutture dati e mi sono imbattuto in questo problema.
Descrivere ed analizzare un algoritmo che, in tempo O(n log n), dato un insieme S di numeri interi e un altro intero x, determini se esistono due elementi in S la cuimedia aritmetica è esattamente x Non tenendo conto del tempo di esecuzio è semplice trovare un algoritmo, bastano due cicli innestati e controllare le coppie a una a una...il problema è proprio il requisito relativo al tempo di esecuzione O (n log n). Ci sto pensando da due giorni ma non riesco a trovare una soluzione...Consigli ?? Indizi ? C'è qualche struttura dati che si possa usare? Grazie mille a tutti
__________________
Cpu: Amd 64 X2 5200+ - Mobo:M2N32SLI DELUXE - Ram: Corsair xms2 800 mhz kit 4gb - SK Video: Gaiward GTS250 - Ali : Enermax Liberty 500 Wat - Mast DVD: 2 Nec AD-5170A - Case : Thermaltake Armor+ - Dissipatore: Thermaltake V1 Notebook: Sony Vaio VGN-Fe21M-Pda: Htc Diamond |Il mio sito|Flickr| Stanco del solito forum? Vieni a parlare di fotografia su Fotoni |
![]() |
![]() |
![]() |
#2 | |
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quote:
![]()
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Pensa che due A e B hanno media X solo se (X - A) = -(X -B)...e pensa che ci sono alcuni algoritmi di ordinamento molto efficienti
![]() |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Jun 2007
Messaggi: 1232
|
Ero arrivato a dover ordinare l'array e di quelli efficienti so che impiegano un tempo O(n log n)....giusto ? Io avevo pensato che A +B = x*2...ma veramente sono bloccato...
![]()
__________________
Cpu: Amd 64 X2 5200+ - Mobo:M2N32SLI DELUXE - Ram: Corsair xms2 800 mhz kit 4gb - SK Video: Gaiward GTS250 - Ali : Enermax Liberty 500 Wat - Mast DVD: 2 Nec AD-5170A - Case : Thermaltake Armor+ - Dissipatore: Thermaltake V1 Notebook: Sony Vaio VGN-Fe21M-Pda: Htc Diamond |Il mio sito|Flickr| Stanco del solito forum? Vieni a parlare di fotografia su Fotoni |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Ordinali per |X - V(i)|...cioè accompagna ai valori anche un altro vettore con la differenza da X ed ordinali per il valore assoluto.
|
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Jun 2007
Messaggi: 1232
|
Ok ho capito che i due elementi che hanno lo stesso valora assoluto sono i due elementi che sto cercando ma come faccio a fare ciò in tempo O(n log n) ??
__________________
Cpu: Amd 64 X2 5200+ - Mobo:M2N32SLI DELUXE - Ram: Corsair xms2 800 mhz kit 4gb - SK Video: Gaiward GTS250 - Ali : Enermax Liberty 500 Wat - Mast DVD: 2 Nec AD-5170A - Case : Thermaltake Armor+ - Dissipatore: Thermaltake V1 Notebook: Sony Vaio VGN-Fe21M-Pda: Htc Diamond |Il mio sito|Flickr| Stanco del solito forum? Vieni a parlare di fotografia su Fotoni |
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Non è che ti posso dire tutto
![]() Come sai ci sono algoritmi di ordinamento O(n log n)... Differenza e costruzione del vettore: O(n) Ordinamento per il valore assoluto: O(n log n) Ricerca elementi consecutivi con lo stesso valore assoluto e segno opposto: O(n) O(n log n) è predominante ![]() |
![]() |
![]() |
![]() |
#8 | |
Senior Member
Iscritto dal: Jun 2007
Messaggi: 1232
|
Quote:
![]()
__________________
Cpu: Amd 64 X2 5200+ - Mobo:M2N32SLI DELUXE - Ram: Corsair xms2 800 mhz kit 4gb - SK Video: Gaiward GTS250 - Ali : Enermax Liberty 500 Wat - Mast DVD: 2 Nec AD-5170A - Case : Thermaltake Armor+ - Dissipatore: Thermaltake V1 Notebook: Sony Vaio VGN-Fe21M-Pda: Htc Diamond |Il mio sito|Flickr| Stanco del solito forum? Vieni a parlare di fotografia su Fotoni |
|
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: May 2008
Messaggi: 533
|
■
Ultima modifica di rеpne scasb : 18-06-2012 alle 15:23. |
![]() |
![]() |
![]() |
#10 |
Senior Member
Iscritto dal: Jun 2007
Messaggi: 1232
|
__________________
Cpu: Amd 64 X2 5200+ - Mobo:M2N32SLI DELUXE - Ram: Corsair xms2 800 mhz kit 4gb - SK Video: Gaiward GTS250 - Ali : Enermax Liberty 500 Wat - Mast DVD: 2 Nec AD-5170A - Case : Thermaltake Armor+ - Dissipatore: Thermaltake V1 Notebook: Sony Vaio VGN-Fe21M-Pda: Htc Diamond |Il mio sito|Flickr| Stanco del solito forum? Vieni a parlare di fotografia su Fotoni |
![]() |
![]() |
![]() |
#11 |
Senior Member
Iscritto dal: May 2008
Messaggi: 533
|
■
Ultima modifica di rеpne scasb : 18-06-2012 alle 15:24. |
![]() |
![]() |
![]() |
#12 |
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2776
|
Potresti spiegarlo a parole? Grazie
Edit: Ho capito, lo shift mi aveva mandato in confusione ma bastava vederlo come un *2. Ultima modifica di wingman87 : 16-02-2009 alle 22:21. |
![]() |
![]() |
![]() |
#13 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
repne...è normale che si risolva in O(n) così...hai fatto un ordinamento in O(n)
![]() I limiti di questa soluzione sono nell'uso della memoria: metti MAX_NUMBERS a 2^32 ![]() Edit: inoltre in due casi ci possono essere buffer overflow: se X è più grande di MAX_NUMBERS e se S contiene numeri negativi. Quindi non è una soluzione valida in generale, ma valida solo in presenza di determinati vincoli. Ultima modifica di cionci : 17-02-2009 alle 08:00. |
![]() |
![]() |
![]() |
#14 |
Senior Member
Iscritto dal: May 2008
Messaggi: 533
|
■
Ultima modifica di rеpne scasb : 18-06-2012 alle 15:24. |
![]() |
![]() |
![]() |
#15 |
Senior Member
Iscritto dal: Jun 2007
Messaggi: 1232
|
Penso che la soluzione ci Cionci era quella chiesta nella traccia...Ne avrei un' altra che credo di aver risolto. Ecco :
Descrivere ed analizzare un algoritmo che, in tempo O(log n), dato un vettore ordinato A[1:::n] di interi distinti, determini se esiste o meno un intero i tale che A[i] = i. La mia soluzione : Codice:
#include <stdio.h> #include <stdlib.h> int main() { int a[4]; a[0]=-1; a[1]=0; a[2]=1; a[3]=3; if(ricerca_binaria(a,0,4) == 1) printf("trovatooooo\n"); else printf("non trovatoooooo\n"); } int ricerca_binaria(int array[],int start, int end) { int m; while(end >= start) { m= ((start + end)/2); if(m == array[m]) return 1; if (m < array[m]) end=(m-1); else start= (m+1); ricerca_binaria(array,start,end); } return (0); } ![]()
__________________
Cpu: Amd 64 X2 5200+ - Mobo:M2N32SLI DELUXE - Ram: Corsair xms2 800 mhz kit 4gb - SK Video: Gaiward GTS250 - Ali : Enermax Liberty 500 Wat - Mast DVD: 2 Nec AD-5170A - Case : Thermaltake Armor+ - Dissipatore: Thermaltake V1 Notebook: Sony Vaio VGN-Fe21M-Pda: Htc Diamond |Il mio sito|Flickr| Stanco del solito forum? Vieni a parlare di fotografia su Fotoni Ultima modifica di qwerty86 : 17-02-2009 alle 08:53. Motivo: Rettifica è proprio uguale alla ricerca binaria tranne per il confronto. |
![]() |
![]() |
![]() |
#16 |
Senior Member
Iscritto dal: May 2008
Messaggi: 533
|
■
Ultima modifica di rеpne scasb : 18-06-2012 alle 15:24. |
![]() |
![]() |
![]() |
#17 | ||
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
![]() Tra l'altro se dovessi usare l'allocazione dinamica (basta che i numeri vengano immessi da tastiera e si è obbligati ad usarla) nel tempo in cui allochi il vettore, l'altro ha già finito ![]() Quote:
In ogni caso utilizzare quell'algoritmo di "ordinamento" è una scelta oculata solo nel caso in cui si debbano ordinare N numeri di cui sappiamo a priori che la differenza fra il max e il min è minore di un certo K...con K << della quantità di ram del PC ![]() |
||
![]() |
![]() |
![]() |
#18 | |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
Codice:
for(i = 0; i < MAX_NUMBERS; ++i) { if(bitmap[i] != 0) printf("%d\n", i); } |
|
![]() |
![]() |
![]() |
#19 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
|
![]() |
![]() |
![]() |
#20 |
Senior Member
Iscritto dal: Jun 2007
Messaggi: 1232
|
La ricerca binaria non è O(logn)
![]()
__________________
Cpu: Amd 64 X2 5200+ - Mobo:M2N32SLI DELUXE - Ram: Corsair xms2 800 mhz kit 4gb - SK Video: Gaiward GTS250 - Ali : Enermax Liberty 500 Wat - Mast DVD: 2 Nec AD-5170A - Case : Thermaltake Armor+ - Dissipatore: Thermaltake V1 Notebook: Sony Vaio VGN-Fe21M-Pda: Htc Diamond |Il mio sito|Flickr| Stanco del solito forum? Vieni a parlare di fotografia su Fotoni |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 11:28.