2013-03-14 17 views
5

Viene fornito un array di n numeri, dove n è un numero pari. Il numero massimo e minimo di questi n numeri deve essere determinato. Devo conoscere i paragoni necessari?Massimi e minimi di un array

+0

Suggerimento: 3 * n/2-2 i confronti sono sufficienti . – Henrik

+0

@ Henrik, per favore, puoi elaborare – user2170497

risposta

3

Può essere eseguito nel tempo O (n).

È possibile controllare questo link per riferimento

+0

Stai scherzando? Usando l'approccio naive può essere fatto in O (N) –

+0

@IvayloStrandjev: - Per favore correggimi se ho torto ma l'ho considerato un array 2D. Quindi è possibile nell'array 2D anche i.e, O (n) time? –

+0

'Viene fornito un array di n numeri, dove n è un numero pari. Il numero massimo e minimo di questi n numeri deve essere determinato. Non vedo alcuna menzione del 2D qui. OP chiede un modo per trovare il numero minimo e massimo di n numeri usando il numero minimo di confronti –

4

Esso può essere fatto utilizzando 3*n/2-2 confronti.

Per n == 2, è sufficiente confrontare i due numeri. Supponiamo ora di avere il minimo e il massimo per i primi numeri n-2. Confronta i restanti due numeri, quindi confronta il più grande con il massimo precedente e il più piccolo con il minimo precedente.

1

Per un array non ordinato può essere eseguito in circa 1.5n confronti. Puoi farlo confrontando coppie di elementi di un array e memorizzando min e locale max. Hai effettuato confronti n/2 per trovare (locali) massimo e n/2 per trovare il min. Quindi, in totale n in questa fase.

Ora si passa sopra la popolazione massima e minima e si trova il numero massimo e minimo globale. Ciò richiederebbe anche confronti n/2. Quindi n + n/2 = 1.5n.

Se l'array è ordinato si può trovare senza paragoni, dal momento che il numero più basso è in posizione 0 e il più alto sulla posizione N - 1.

Problemi correlati