phpで実装される一般的な並べ替えアルゴリズム、php並べ替えアルゴリズムの概要
この記事は、一般的な PHP ソート アルゴリズムをまとめたもので、アルゴリズムを設計する際に参考になります。今度はそれをみんなで共有して参考にしてください。詳細は以下の通りです
1. 挿入ソート
単語を使って簡単に説明します。たとえば、 $arr = array(4,2,4,6,3,6,1,7,9); のように、数値のグループを順番に並べ替えます。
したがって、まず、配列の 2 番目の要素を最初の要素と比較します。最初の要素が 2 番目の要素より大きい場合は、次に、配列の 3 番目の要素を取得して、最初の要素と比較します。 2 番目の要素が比較され、3 番目の要素が小さい場合は交換されます。等々。これは挿入ソートであり、その時間頻度は 1+2+...+(n-1)=(n^2)/2 です。したがって、その時間計算量は O(n^2) になります。
リーリー
2. 選択の並べ替え
選択の並べ替えが言語で記述されている場合は、次のようになります: $arr = array(4,3,5,2,1);まず、最初の配列とそれ以降のすべての配列を比較し、最小の数値を見つけて、それを最初の配列と交換します (もちろん、最初の配列が最小である場合は、交換する必要はありません) 、次にループします。つまり、2 番目の数値を次の数値と比較し、最小の数値を見つけて、それを 2 番目の数値と交換する、というように繰り返します。つまり、毎回最小の残りの値を見つけます。 取得できます:初回、時間頻度は n です(最初のものと次の n-1 を比較し、最小のものを見つけ、それが最初のものであるかどうかを確認し、そうでない場合は交換します)未来、その後にマイナス 1 が続きます。 時間計算量も O(n^2);
phpの実装コードは次のとおりです:
リーリー
3. バブルソート
実際には、バブル ソートと選択ソートの間に大きな違いはありません。一番小さいものを見つけて左端に置きます。問題を順番に解決してください。違いは、バブル ソートでは位置がより多く交換されるのに対し、選択ソートでは最小の要素の添字が検索され、最も左の要素と位置が直接交換されることです。
PHP の実装コードは次のとおりです:
4. クイックソート
クイックソートは、言語で説明すると、配列から値 $a を選択し、それが $a より大きい場合は配列の右側に配置され、その逆も同様です。それは配列の左側に配置されます。次に、left と right をそれぞれ再帰的に呼び出します。つまり、left と right を細分化し、最後に配列をマージします。php はクイックソートを実装します:
5. 並べ替え
実際、マージソートは分割とマージのアイデアです。これは、クイックソートのアイデアと共通しており、左側に 1 つの山、右側に 1 つの山を配置してからマージします。並べ替えは再帰によって行われます。 違いは何ですか?それらの違いは、考え方の本質的な違いでもあります。クイックソートの分割では、サイズ比較のために特定の値が選択されるため、それらが左右に分割されます。つまり、小さい山は左側に配置され、大きい山は右側に配置されます。次に、小さな左が left1 と right1 に細分化されます。 。 。 。並べ替えは、同様の再帰を実行することによって行われます。つまり、細分化し続けた場合、再帰終了時の left1 が最小値になります。マージソートとは、配列を幾何学的に左右から最小粒度2または1に再帰的に分割し、サイズの比較を開始してからマージすることです。ここでの比較サイズは次のとおりです。息子の左側の要素が息子の右側の要素と比較され、ソートされて父親の左側または右側にマージされます。ここで、最後の 2 つの配列がそれぞれソートおよびマージされるまで、最初の左と右はそれぞれの順序のみを確認でき、配列全体の順序は、最後の比較を通じてまだ確認できません。本当の意味での左と右の仕分け。
リーリー
6. ヒープソート
この例では、fixDown 関数は特定のノードの下方調整を実装します。ここでのデフォルトは開始ノードが 1 であり、親ノードと子ノード間の関係を計算するのに便利です。注:
開始ノードを1とした親子関係:親ノードk、子ノードは2K、2k+1子ノードj、親ノードはfloor(j/2)floorは切り捨て
開始ノードを0とした親子関係:親ノードk、子ノードは2K+1、2k+2 子ノードj、親ノードはfloor((j-1)/2)
パラメータ$kは調整ポイントの位置、$lenthは配列の長さであり、1から最後のノードまでの座標です。
リーリー
挿入ソート、バブルソート、選択ソート、シェルソート、クイックソート、マージソート、ヒープソート、SortUtilなどを含む、Java言語で実装されたさまざまなソート。
挿入ソート: package org.rut.util.algorithm.support;
import org.rut.util.algorithm.SortUtil;/*** @author Treeroot
* @since 2006-2-2
* @version 1.0*/ public class InsertSort は SortUtil.Sort{
/* (非 Javadoc)
* @org.rut.util.algorithm.SortUtil.Sort#sort(int[])*/public void sort(int[] data) を参照してください。 int temp;for(int i=1;i
import org.rut.util.algorithm.SortUtil;/*** @著者 Treeroot
* @since 2006-2-2
* @version 1.0*/public class BubbleSort は SortUtil.Sort{
/* (非 Javadoc)
* を実装します @see org.rut.util.algorithm.SortUtil.Sort # sort(int[])*/public void sort(int[] data) {int temp;for(int i=0;i
ソートアルゴリズム いわゆるソートは、レコードの文字列を、その中の 1 つまたはいくつかのキーワードのサイズに応じて昇順または降順に並べる操作です。
分類
コンピューター サイエンスで使用される並べ替えアルゴリズムは通常、次のように分類されます。
リスト (n) のサイズに応じて、計算複雑さ (最低、平均、最高のパフォーマンス)。一般的に、良いパフォーマンスは O です。 (n log n)、悪い動作は Ω(n2) です。ソートの理想的なパフォーマンスは O(n) です。抽象キー比較を 1 つだけ使用する並べ替えアルゴリズムでは、常に平均で少なくとも Ω(n log n) が必要です。
メモリ使用量 (および他のコンピューター リソースの使用量)
安定性: 安定した並べ替えアルゴリズムにより、等しいキー (つまり値) に従ってレコードの相対的な順序が維持されます。つまり、ソート アルゴリズムは安定しています。つまり、キーが等しい 2 つのレコード R と S があり、元のシーケンスで R が S の前に出現する場合、ソートされたシーケンスでも R が S の前になります。
一般的なメソッド: 挿入、交換、選択、マージなど。交換ソートにはバブル ソートとクイックソートが含まれます。選択ソートには、シェーカー ソートとヒープ ソートが含まれます。
整数など、等しい要素が区別できない場合、安定性は問題になりません。ただし、次の数値のペアが最初の桁でソートされると仮定します。
(4, 1) (3, 1) (3, 7) (5, 6)
この場合、2 つの異なる結果を生成することが可能です。1 つは、等しいキー値に従って相対順序を維持することです。もう 1 つは、等しいキー値に従って相対順序を維持することです。1 つはそうではありません:
(3, 1) (3, 7) (4, 1) (5, 6) (順序を維持)
(3, 7) (3) , 1) (4, 1) (5, 6) (順序変更)
不安定な並べ替えアルゴリズムでは、等しいキー値内のレコードの相対的な順序が変更される可能性がありますが、安定した並べ替えアルゴリズムではこれが行われません。不安定な並べ替えアルゴリズムは特に安定していると見なすことができます。これを行う 1 つの方法は、キー比較を人為的に拡張して、他の点では同一のキーを持つ 2 つのオブジェクト間の比較が決定され、元のデータ順序のエントリをタイブレーカーとして使用することです。ただし、この順序には通常、追加のスペース オーバーヘッドが含まれることに注意してください。
並べ替えアルゴリズムのリスト
この表では、n は並べ替えられるレコードの数、k は異なるキー値の数です。
安定
バブルソート (バブルソート) — O(n2)
カクテルソート (双方向バブルソート) — O(n2)
挿入ソート (挿入ソート) — O(n2)
バケットソート (バケットソート) — O(n ); O(k) の追加メモリが必要
ソートのカウント — O(n+k); 追加のメモリが必要です
マージ ソート — O(n) の追加メモリが必要です
配置マージ ソート — O(n2)
バイナリ ツリー ソート (バイナリ ツリー ソート) — O(n) の追加メモリが必要
ピジョンホール ソート — O(n+k) の追加メモリが必要
基数ソート — O(n·k); には O(n) の追加メモリが必要です
Gnome ソート — O(n2)
ライブラリのソート — O(n log n) には、高い確率で (1+ε)n の追加メモリが必要です
不安定
選択ソート — O(n2)
シェルソート ) — O(n log n) 現在の最良のバージョンを使用する場合
コムソート — O(n log n)
ヒープソート (heapsort) — O(n log n)
...本文>>

セッション関連のXSS攻撃からアプリケーションを保護するには、次の測定が必要です。1。セッションCookieを保護するためにHTTPonlyとセキュアフラグを設定します。 2。すべてのユーザー入力のエクスポートコード。 3.コンテンツセキュリティポリシー(CSP)を実装して、スクリプトソースを制限します。これらのポリシーを通じて、セッション関連のXSS攻撃を効果的に保護し、ユーザーデータを確保できます。

PHPセッションのパフォーマンスを最適化する方法は次のとおりです。1。遅延セッション開始、2。データベースを使用してセッションを保存します。これらの戦略は、高い並行性環境でのアプリケーションの効率を大幅に改善できます。

thesession.gc_maxlifettinginttinginphpdethinesthelifsessessiondata、setinseconds.1)it'sconfiguredinphp.iniorviaini_set()。 2)AbalanceSneededToAvoidPerformanceIssues andunexpectedLogouts.3)php'sgarbagecollectionisisprobabilistic、影響を受けたBygc_probabi

PHPでは、session_name()関数を使用してセッション名を構成できます。特定の手順は次のとおりです。1。session_name()関数を使用して、session_name( "my_session")などのセッション名を設定します。 2。セッション名を設定した後、session_start()を呼び出してセッションを開始します。セッション名の構成は、複数のアプリケーション間のセッションデータの競合を回避し、セキュリティを強化することができますが、セッション名の一意性、セキュリティ、長さ、設定タイミングに注意してください。

セッションIDは、機密操作の前、30分ごとにログイン時に定期的に再生する必要があります。 1.セッション固定攻撃を防ぐためにログインするときにセッションIDを再生します。 2。安全性を向上させるために、敏感な操作の前に再生します。 3.定期的な再生は長期的な利用リスクを減らしますが、ユーザーエクスペリエンスの重量を量る必要があります。

PHPのセッションCookieパラメーターの設定は、session_set_cookie_params()関数を通じて達成できます。 1)この関数を使用して、有効期限、パス、ドメイン名、セキュリティフラグなどのパラメーターを設定します。 2)session_start()を呼び出して、パラメーターを有効にします。 3)ユーザーログインステータスなど、ニーズに応じてパラメーターを動的に調整します。 4)セキュリティを改善するために、セキュアとhttponlyフラグを設定することに注意してください。

PHPでセッションを使用する主な目的は、異なるページ間でユーザーのステータスを維持することです。 1)セッションはsession_start()関数を介して開始され、一意のセッションIDを作成し、ユーザーCookieに保存します。 2)セッションデータはサーバーに保存され、ログインステータスやショッピングカートのコンテンツなど、さまざまなリクエスト間でデータを渡すことができます。

サブドメイン間でセッションを共有する方法は?一般的なドメイン名にセッションCookieを設定することにより実装されます。 1.セッションCookieのドメインをサーバー側の.example.comに設定します。 2。メモリ、データベース、分散キャッシュなど、適切なセッションストレージ方法を選択します。 3. Cookieを介してセッションIDを渡すと、サーバーはIDに基づいてセッションデータを取得および更新します。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!
