


Bagaimana untuk mencari median tatasusunan yang sangat besar dalam php
Dalam PHP, kadangkala kita perlu memproses tatasusunan yang sangat besar, seperti mencari median. Tetapi untuk tatasusunan yang sangat besar, menggunakan kaedah pengisihan tradisional akan sangat memakan masa dan memakan memori. Jadi, adakah cara yang lebih cekap untuk mencari median tatasusunan yang sangat besar? Artikel ini akan memperkenalkan kaedah penyelesaian yang cekap berdasarkan algoritma pemilihan pantas.
- Pengenalan kepada algoritma pemilihan pantas
Algoritma pemilihan pantas ialah algoritma yang dipertingkatkan berdasarkan algoritma isihan pantas. Idea utamanya ialah mencari item dalam tatasusunan tidak tertib melalui pembahagian pantas Unsur terkecil k. Kerumitan masanya ialah O(n), yang lebih cekap daripada kerumitan masa algoritma pengisihan konvensional O(n log n).
Langkah asas algoritma pemilihan pantas adalah seperti berikut:
- Pilih pangsi elemen pangsi (biasanya elemen pertama dalam tatasusunan); elemen pangsi dalam tatasusunan Elemen dibahagikan kepada dua bahagian: lebih kecil daripada pangsi dan lebih besar daripada pangsi
- Jika bilangan elemen yang lebih kecil daripada pangsi adalah kurang daripada k, teruskan mencari elemen ke-k antara; elemen lebih besar daripada pivot;
- Jika kurang daripada Jika bilangan elemen pivot lebih besar daripada atau sama dengan k, maka teruskan mencari elemen ke-k di antara elemen yang lebih kecil daripada pivot; > Ulang langkah di atas sehingga unsur ke-k ditemui.
- Cari median tatasusunan yang sangat besar
- Kami kini mempertimbangkan cara menggunakan algoritma pemilihan pantas untuk mencari median tatasusunan yang sangat besar. Katakan kita mempunyai tatasusunan yang sangat besar $nums$ dan perlu mencari mediannya. Mula-mula kami melakukan pembahagian pantas pada $nums$, membahagikan elemen kepada dua bahagian yang lebih kecil daripada pivot dan lebih besar daripada pivot. Jika pangsi betul-betul di tengah tatasusunan, maka ia adalah median. Jika tidak, berdasarkan lokasi pangsi, kita boleh menilai bahawa carian harus diteruskan di sebelah tempat pangsi itu berada.
- Berikut ialah langkah algoritma terperinci:
- Berdasarkan hubungan kedudukan antara pos dan pertengahan, tentukan sama ada median berada di sebelah kiri atau kanan pangsi. Jika $pos< pertengahan$, maka median adalah antara kedudukan $[pos+1,n-1]$; jika $pos>=mid$, maka median adalah antara kedudukan $[0,pos-1]$ antara.
- Ulang langkah 2 dan 3 sehingga median ditemui.
- Berikut ialah pelaksanaan kod PHP yang sepadan:
Ringkasan
function quickSelect($nums, $k) { $n = count($nums); $left = 0; $right = $n - 1; $mid = ($n - 1) / 2; while (true) { $pos = partition($nums, $left, $right); if ($pos == $mid) { if ($n % 2 == 0) { // 偶数个元素 return ($nums[$pos] + $nums[$pos + 1]) / 2; } else { // 奇数个元素 return $nums[$pos]; } } elseif ($pos < $mid) { $left = $pos + 1; } else { $right = $pos - 1; } } } function partition(&$nums, $left, $right) { $pivot = $nums[$left]; $i = $left; $j = $right; while ($i < $j) { while ($i < $j && $nums[$j] >= $pivot) { $j--; } while ($i < $j && $nums[$i] <= $pivot) { $i++; } if ($i < $j) { $temp = $nums[$i]; $nums[$i] = $nums[$j]; $nums[$j] = $temp; } } // 将pivot元素放到正确的位置 $nums[$left] = $nums[$i]; $nums[$i] = $pivot; return $i; } // 测试示例 $nums = array(1, 2, 3, 4, 5, 6, 7, 8, 9); echo quickSelect($nums, 5); // 输出5(因为5在数组中的中间位置)
- Untuk tatasusunan yang sangat besar, menggunakan kaedah pengisihan tradisional akan membawa Datang dengan kerumitan masa dan ruang yang sangat tinggi. Dengan menggunakan algoritma pemilihan pantas untuk mencari elemen terkecil ke-k, kita boleh melengkapkan operasi dalam kerumitan masa O(n), dengan itu mencapai penyelesaian yang cekap kepada median tatasusunan yang sangat besar. Perlu diingatkan bahawa dalam penggunaan sebenar, kita juga perlu melakukan pengoptimuman yang sesuai mengikut keperluan yang berbeza, seperti pemangkasan, dll.
Atas ialah kandungan terperinci Bagaimana untuk mencari median tatasusunan yang sangat besar dalam php. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Kompilasi JIT Php 8 meningkatkan prestasi dengan menyusun kod yang sering dilaksanakan ke dalam kod mesin, memberi manfaat kepada aplikasi dengan pengiraan berat dan mengurangkan masa pelaksanaan.

Artikel ini membincangkan mendapatkan muat naik fail PHP untuk mengelakkan kelemahan seperti suntikan kod. Ia memberi tumpuan kepada pengesahan jenis fail, penyimpanan selamat, dan pengendalian ralat untuk meningkatkan keselamatan aplikasi.

Artikel ini membincangkan kelemahan OWASP 10 dalam strategi PHP dan mitigasi. Isu -isu utama termasuk suntikan, pengesahan yang rosak, dan XSS, dengan alat yang disyorkan untuk memantau dan mendapatkan aplikasi PHP.

Artikel ini membincangkan penyulitan simetri dan asimetrik dalam PHP, membandingkan kesesuaian, prestasi, dan perbezaan keselamatan mereka. Penyulitan simetri lebih cepat dan sesuai untuk data pukal, manakala asimetrik digunakan untuk pertukaran utama yang selamat.

Artikel ini membincangkan pelaksanaan pengesahan dan kebenaran yang mantap dalam PHP untuk mencegah akses yang tidak dibenarkan, memperincikan amalan terbaik dan mengesyorkan alat peningkatan keselamatan.

Artikel ini membincangkan strategi untuk melaksanakan kadar API yang mengehadkan PHP, termasuk algoritma seperti baldi token dan baldi bocor, dan menggunakan perpustakaan seperti simfoni/kadar-limiter. Ia juga meliputi pemantauan, had kadar penyesuaian secara dinamik, dan tangan

Kenyataan yang disediakan dalam PHP meningkatkan keselamatan pangkalan data dan kecekapan dengan mencegah suntikan SQL dan meningkatkan prestasi pertanyaan melalui kompilasi dan penggunaan semula.

Artikel membincangkan mendapatkan data dari pangkalan data menggunakan PHP, meliputi langkah, langkah keselamatan, teknik pengoptimuman, dan kesilapan umum dengan penyelesaian.
