Нимояи нимояи массив ва чӣ гуна муайян кардан?
sobes.tech AI
Ҷавоб аз AI
Нимояи масив (ёки "медиана" масив, агар он сортшуда бошад) — ин унсури аст, ки агар масив сортшуда бошад, онро ба ду қисм тақсим мекунад: унсурҳое, ки камтар ё баробар бо медиана ҳастанд ва унсурҳое, ки бештар ё баробар бо медиана ҳастанд. Агар шумораи унсурҳо чен бошад, медиана одатан ҳисоб мешавад бо миёнаи арифметикии ду унсури марказӣ. Дар контексти "нимояи масив" дар вазифаҳои мусоҳиба метавонад маънои ёфтан мажоритарӣ унсурро дошта бошад, ки бештар аз N/2 бор дар масив пайдо мешавад, ки N — шумораи унсурҳо дар масив.
Таъриф кардани нимояи масив вобаста ба контекст:
-
Медиана (барои масиви сортшуда ё дар ҷустуҷӯи унсури к-ум):
- Масивро сорт мекунем.
- Агар андозаи
Nнепарран бошад, медиана унсури дар индексN/2аст. - Агар андозаи
Nпарран бошад, медиана миёнаи арифметикии унсурҳои дар индексҳоиN/2 - 1ваN/2аст.
-
Унсури мажоритарӣ (ки бештар аз N/2 бор дар масив аст):
- Алгоритми овоздиҳии Бойер (Boyer–Moore majority vote algorithm) истифода мекунем.
- Маъзур
candidateваcountмесозем. - Унсурҳоро мегузаронем. Агар унсури ҳозира баробари
candidateбошад,count-ро зиёд мекунем. Агар не, ваcount> 0,count-ро кам мекунем. Агарcount= 0, унсури ҳозира баcandidateтабдил меёбад ваcountба 1 баробар мешавад. - Пас аз гузариши аввал,
candidateэҳтимолан унсури мажоритарӣ аст. Барои бехатарӣ, бояд гузариши дуввум анҷом дода шавад, то боварӣ ҳосил шавад, ки он воқеан бештар аз N/2 бор аст.
Масалан, муайян кардани медиана (дар Swift):
// Сортинг барои ёфтани медиана
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
}
}
Масалан, муайян кардани унсури мажоритарӣ (дар Swift):
// Алгоритми овоздиҳии Бойер
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
}
}
// Санҷед, ки оё candidate воқеан унсури мажоритарӣ аст
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 // Ҳеҷ унсури мажоритарӣ нест
}
Муҳим аст, ки бо мутаҳассис дар бораи навъи "нимояи масив" дар контексти вазифа суҳбат кунед.