Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk mencari median tatasusunan dalam php

Bagaimana untuk mencari median tatasusunan dalam php

百草
百草asal
2023-06-12 14:34:451616semak imbas

Cara mencari median tatasusunan dalam PHP: 1. Dapatkan median selepas mengisih, mula-mula gunakan fungsi "sort()" untuk mengisih, dan kemudian dapatkan nilai tengah; 2. Gunakan fungsi tatasusunan untuk mencari median Bilangan digit, mula-mula gunakan fungsi "count()" untuk mendapatkan panjang tatasusunan, kemudian gunakan fungsi "array_slice()" untuk mengeluarkan segmen tengah daripada tatasusunan, dan akhirnya gunakan "array_sum ()" berfungsi untuk menjumlahkannya, dan kemudian membahagikannya dengan panjang; 3. Menggunakan kaedah "QuickSelect", anda boleh mencari median tanpa mengisih.

Bagaimana untuk mencari median tatasusunan dalam php

Sistem pengendalian untuk tutorial ini: Sistem Windows 10, PHP versi 8.1.3, komputer DELL G3.

Terdapat tiga cara untuk mencari median tatasusunan dalam PHP:

Kaedah 1: Ambil median selepas mengisih

Kaedah ini agak mudah Anda hanya perlu mengisih tatasusunan dan kemudian mengambil nilai tengah. Walau bagaimanapun, kaedah ini mempunyai kelemahan yang jelas, iaitu, kerumitan masa pengisihan ialah O(nlogn). Apabila n besar, kelajuannya agak perlahan.

PHP menyediakan fungsi sort() yang boleh mengisih tatasusunan, dan kita boleh menggunakan fungsi ini untuk mencapainya.

Contoh kod:

function get_median($arr) {
    sort($arr);
    $count = count($arr);
    $middle = floor(($count - 1) / 2);
    if ($count % 2 == 0) {
        $median = ($arr[$middle] + $arr[$middle + 1]) / 2;
    } else {
        $median = $arr[$middle];
    }
    return $median;
}

Kaedah 2: Gunakan fungsi tatasusunan untuk mencari median

PHP menyediakan beberapa fungsi tatasusunan yang boleh kita gunakan untuk mengira nilai tengah tatasusunan. Kaedah khusus ialah menggunakan fungsi count() dahulu untuk mendapatkan panjang tatasusunan, kemudian gunakan fungsi array_slice() untuk mengalih keluar segmen tengah daripada tatasusunan, dan akhirnya gunakan fungsi array_sum() untuk menjumlahkannya, dan kemudian bahagikannya dengan panjang. Kaedah ini lebih mudah dan cepat.

Contoh kod:

function get_median($arr) {
    sort($arr);
    $count = count($arr);
    $middle = floor(($count - 1) / 2);
    $median = ($count % 2 == 0) ?
        (array_sum(array_slice($arr, $middle, 2)) / 2) :
        $arr[$middle];
    return $median;
}

Kaedah 3: Algoritma pemilihan pantas

Kedua-dua kaedah di atas memerlukan pengisihan tatasusunan, jadi kerumitan masa adalah agak tinggi tinggi. Sebenarnya terdapat kaedah yang dipanggil QuickSelect yang boleh mencari median tanpa mengisih. Algoritma pemilihan pantas mempunyai banyak persamaan dengan algoritma isihan cepat, tetapi ia hanya memerlukan sebahagian daripada isihan pantas, jadi kerumitan masanya ialah O(n).

Contoh kod:

function get_median($arr) {
    if (count($arr) % 2 == 0) {
        $k = count($arr) / 2;
    } else {
        $k = (count($arr) + 1) / 2;
    }
    return quick_select($arr, $k);
}
function quick_select(&$arr, $k) {
    if (count($arr) == 1) return $arr[0];
    $p = $arr[0];
    $f = $l = array();
    foreach ($arr as $v) {
        if ($v < $p) $f[] = $v;
        elseif ($v > $p) $l[] = $v;
    }
    if ($k <= count($f)) {
        return quick_select($f, $k);
    } elseif ($k > count($arr) - count($l)) {
        return quick_select($l, $k - (count($arr) - count($l)));
    } else {
        return $p;
    }
}

Di atas adalah tiga kaedah untuk mendapatkan nilai perantaraan tatasusunan Kaedah yang berbeza sesuai untuk senario yang berbeza. Jika anda perlu mendapatkan berbilang nilai perantaraan, anda boleh menggunakan variasi kaedah di atas. Tidak kira kaedah mana, anda perlu memahami operasi asas tatasusunan sebelum anda boleh mengendalikan tatasusunan dengan lebih baik.

Atas ialah kandungan terperinci Bagaimana untuk mencari median tatasusunan dalam php. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel sebelumnya:Apakah tatasusunan dalam php?Artikel seterusnya:Apakah tatasusunan dalam php?