Cos'è la metà di un array e come determinarla?
sobes.tech AI
Risposta dell'AI
La metà di un array (o la "mediana" dell’array, se è ordinato) è l’elemento che, se l’array è ordinato, lo divide in due parti: elementi minori o uguali alla mediana e elementi maggiori o uguali alla mediana. Se il numero di elementi è pari, la mediana è spesso la media aritmetica dei due elementi centrali. Nel contesto di "la metà dell’array" nelle domande di colloquio, può anche riferirsi alla ricerca di un elemento majoritario, che si presenta più di N/2 volte, dove N è il numero di elementi nell’array.
La definizione di metà dell’array dipende dal contesto:
-
Mediana (per un array ordinato o nella ricerca del k-esimo elemento più piccolo):
- Ordiniamo l’array.
- Se la dimensione
Nè dispari, la mediana è l’elemento all’indiceN/2. - Se la dimensione
Nè pari, la mediana è la media aritmetica degli elementi agli indiciN/2 - 1eN/2.
-
Elemento maggioritario (che si presenta > N/2 volte):
- Usiamo l’algoritmo di voto di Boyer (algoritmo di voto maggioritario di Boyer–Moore).
- Creiamo una variabile
candidateecount. - Scorriamo gli elementi dell’array. Se l’elemento corrente è uguale a
candidate, incrementiamocount. Se no, ecount> 0, decrementiamocount. Secount= 0, l’elemento corrente diventa il nuovocandidate, ecountviene impostato a 1. - Dopo il primo passaggio,
candidateè un potenziale elemento maggioritario. Per essere sicuri, si effettua un secondo passaggio per verificare che effettivamente si presenti più di N/2 volte.
Esempio di determinazione della mediana (in Swift):
// Ordinare per trovare la mediana
func findMedian(in array: [Int]) -> Double? {
guard !array.isEmpty else { return nil }
let sortedArray = array.sorted()
let n = sortedArray.count
if n % 2 == 1 {
return Double(sortedArray[n / 2])
} else {
return Double(sortedArray[n / 2 - 1] + sortedArray[n / 2]) / 2.0
}
}
Esempio di determinazione dell’elemento maggioritario (in Swift):
// Algoritmo di voto di Boyer
func findMajorityElement(in array: [Int]) -> Int? {
var candidate: Int? = nil
var count = 0
for element in array {
if count == 0 {
candidate = element
count = 1
} else if element == candidate {
count += 1
} else {
count -= 1
}
}
// Verifica se il candidato è effettivamente maggioritario
var realCount = 0
if let candidate = candidate {
for element in array {
if element == candidate {
realCount += 1
}
}
if realCount > array.count / 2 {
return candidate
}
}
return nil // Nessun elemento maggioritario
}
È importante chiarire con l’intervistatore quale tipo esatto di "metà dell’array" si intende nel contesto del problema.