Conteggia Quante occorrenze array

di il
3 risposte

Conteggia Quante occorrenze array

Ciao a tutti
Sto seguendo un corso di algoritmi e mi sto scervellando per arrivare a una soluzione ma so che non manca molto.
Va benissimo lo pseudocodice!
Il testo dell'esercizio è questo:


Scrivere un algoritmo che, dato in input un array A[1..n] non ordinato, composto da n numeri
reali arbitrari, ed un intero positivo k (k=n) determina il numero di valori che compaiono in A esattamente k
volte.
Ad esempio, se A = [1, 7, -3, 4, 10, 7, 4, -3, 7] e k= 2, l'algoritmo restituisce 2, in quanto ci sono due valori
che compaiono esattamente due volte (ossia i numeri -3, 4). Notare che il numero 7 non è da includere nella
lista in quanto compare più di due volte.
Se A = [-10, 8, 9, 2] l'algoritmo restituisce 0, in quanto ci sono 0 valori che compaiono esattamente 2 volte.


Io sono più o meno a questo:
ordinando il vettore all'inizio ottengo questo vettore:
A = [-3, -3, 1, 4, 4, 4, 7, 10]

Algoritmo ContaRipetizioni( Array A[], int i, int j)
if (i<=j) do
     int contatoreTOT=0

     for i=1 to n
             for j=i+1 to k
                     if (i!=j) && A[i]==A[j]
                         count++
                     endif
            endfor 
       
            if count==k    //così se so che effettivamente è ripetuto k volte, incremento il contatore principale che poi effettivamente restituirò
                 contatoreTOT=contatoreTOT+1
            endif

       return contatoreTOT
     endfor
else
   return 0
   
   

3 Risposte

  • Re: Conteggia Quante occorrenze array

    cicciozza ha scritto:


         for i=1 to n
                 for j=i+1 to k
    
    Uhm, no così direi di no. Con il tuo primo esempio, se i è sul secondo 7, tu prendi il terzo 7 come "secondo" e per te sarebbe un doppio in più da contare.
    Sì può fare poco efficiente ma semplice. Ma si può anche migliorare in diversi modi.


    P.S. ricordati che gli array partono dall'indice 0, non 1.
  • Re: Conteggia Quante occorrenze array

    Ciao andbin!

    Parto da 1 perchè alcune slide in algoritmi partono da 1.
    Ho fatto java ed effettivamente partivano da 0.

    Siccome per una volta, non ho problemi di efficienza che mi vincolano, mi suggeriresti come muovermi?


    Grazie sempre
  • Re: Conteggia Quante occorrenze array

    cicciozza ha scritto:


    Siccome per una volta, non ho problemi di efficienza che mi vincolano, mi suggeriresti come muovermi?
    Il meno efficiente che mi viene in mente (ma che è semplice): per ogni elemento lo vai a ricercare su tutto l'array (cioè ripartendo dall'inizio). Quindi nel tuo primo esempio, conti il 7 tre volte per il primo 7, conti il 7 tre volte per il secondo 7 e conti il 7 tre volte per il terzo 7. Ma conti sempre 3, che è diverso da k=2, quindi lo scarti sempre.
    Lo si può ottimizzare in vari modi.
Devi accedere o registrarti per scrivere nel forum
3 risposte