Massivning yarmi nima va uni qanday aniqlash mumkin?
sobes.tech AI
AIdan javob
Massivning yarmarkasi (yoki massivning "mediana"si, agar u tartiblangan bo'lsa) — bu element, agar massiv tartiblangan bo'lsa, uni ikki qismga bo'lib turadigan: medianadan kichik yoki teng bo'lgan elementlar va medianadan katta yoki teng bo'lgan elementlar. Agar elementlar soni juft bo'lsa, median odatda ikki markaziy elementning arifmetik o'rtacha hisoblanadi. Suhbat vazifalarida "massivning yarmi" kontekstida, shuningdek, N/2 dan ko'p marta uchraydigan majburiy elementni topish nazarda tutilishi mumkin, bu yerda N — massivdagi elementlar soni.
Massivning yarmi ta'rifi kontekstga bog'liq:
-
Median (tartiblangan massiv uchun yoki k-chi eng kichik elementni topishda):
- Massivni tartiblaymiz.
- Agar
Ntoq bo'lsa, medianN/2indeksidagi element bo'ladi. - Agar
Njuft bo'lsa, medianN/2 - 1vaN/2indekslaridagi elementlarning arifmetik o'rtachasi bo'ladi.
-
Majburiy element (N/2 dan ko'p marta uchraydigan):
- Boyer ovoz berish algoritmi (Boyer–Moore majority vote algorithm) dan foydalanamiz.
candidatevacounto'zgaruvchilarini yaratamiz.- Massiv elementlarini aylanamiz. Agar hozirgi element
candidatega teng bo'lsa,countni oshiramiz. Aks holda, vacount> 0 bo'lsa,countni kamaytiramiz. Agarcount= 0 bo'lsa, hozirgi element yangicandidatebo'ladi vacount1 ga o'rnatiladi. - Birinchi yurishdan so'ng,
candidateehtimoliy majburiy element bo'ladi. Uni tasdiqlash uchun ikkinchi yurishni amalga oshiramiz va u haqiqatan ham N/2 dan ko'p marta uchrayaptimi, tekshiramiz.
Swiftda mediani aniqlash misoli:
// Medianni topish uchun tartiblash
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
}
}
Majburiy elementni aniqlash misoli (Swiftda):
// Boyer ovoz berish algoritmi
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
}
}
// Kandidatning haqiqatan ham majburiy element ekanligini tekshirish
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 // Majburiy element topilmadi
}
Suhbatdosh bilan "massivning yarmi" nima ekanligini aniqroq tushunish muhimdir.