Intern
Mi az egy tömb fele és hogyan határozzuk meg?
sobes.tech MI
Válasz az MI-től
Egy tömb (vagy ha rendezett, akkor a tömb "mediánja") fele az az elem, amely, ha a tömb rendezett, két részre osztja azt: azokat az elemeket, amelyek kisebbek vagy egyenlőek a mediánnal, és azokat, amelyek nagyobbak vagy egyenlőek a mediánnal. Ha az elemek száma páros, a medián gyakran a két központi elem aritmetikai átlaga. Az "array felének" fogalma a kontextustól függ:
-
Medián (rendezett tömb vagy a k-ik legkisebb elem keresése esetén):
- Rendezze a tömböt.
- Ha a
Nméret páratlan, a medián aN/2indexű elem. - Ha a
Nméret páros, a medián aN/2 - 1ésN/2indexű elemek aritmetikai átlaga.
-
Többségi elem (amely több mint N/2 alkalommal fordul elő):
- Használja a Boyer szavazási algoritmust (Boyer–Moore többségi szavazási algoritmus).
- Hozzon létre egy
candidateéscountváltozót. - Iteráljon végig a tömb elemein. Ha az aktuális elem megegyezik a
candidate-tel, növelje acount-ot. Ha nem, és acount> 0, csökkentse acount-ot. Ha acount= 0, az aktuális elem lesz az újcandidate, és acountértéke 1 lesz. - Az első pass után a
candidateegy potenciális többségi elem. Hogy biztosak legyünk benne, végezzünk egy második pass-t, hogy megerősítsük, valóban több mint N/2 alkalommal fordul elő.
Swift példák a medián meghatározására:
// Rendezés a medián megtalálásához
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
}
}
A többségi elem meghatározására:
// Boyer többségi szavazási algoritmus
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
}
}
// Ellenőrizze, hogy a jelölt valóban többségi elem-e
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 // Nincs többségi elem
}
Fontos tisztázni a kérdezővel, hogy pontosan milyen típusú "array felének" értendő a kérdéskör.