Rumah >pembangunan bahagian belakang >masalah PHP >Bagaimana untuk mendapatkan nilai tengah tatasusunan dalam php

Bagaimana untuk mendapatkan nilai tengah tatasusunan dalam php

PHPz
PHPzasal
2023-04-23 10:09:071168semak imbas

Semasa proses operasi tatasusunan, kadangkala perlu mendapatkan nilai perantaraan dalam tatasusunan, seperti median tatasusunan. PHP ialah bahasa yang sangat fleksibel dan boleh menggunakan pelbagai kaedah untuk mendapatkan nilai perantaraan tatasusunan. Dalam artikel ini, kami akan memperkenalkan beberapa cara untuk mendapatkan nilai perantaraan tatasusunan.

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 median tatasusunan nilai pertengahan. Kaedah khusus ialah menggunakan fungsi count() terlebih dahulu untuk mendapatkan panjang tatasusunan, kemudian gunakan fungsi array_slice() untuk mengeluarkan 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. 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 ialah 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 pun, anda perlu memahami operasi asas tatasusunan sebelum anda boleh mengendalikan tatasusunan dengan lebih baik.

Atas ialah kandungan terperinci Bagaimana untuk mendapatkan nilai tengah 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