ホームページ バックエンド開発 PHPチュートリアル php 常用算法和时间复杂度_php技巧

php 常用算法和时间复杂度_php技巧

May 17, 2016 am 08:57 AM
一般的に使用されるアルゴリズム 時間の複雑さ

按数量级递增排列,常见的时间复杂度有:常数阶O(1),对数阶O(log2n),线性阶O(n),线性对数阶O(nlog2n),平方阶O(n2),立方阶O(n3)

复制代码 代码如下:

//二分查找O(log2n)
function erfen($a,$l,$h,$f){
    if($l >$h){ return false;}
    $m = intval(($l+$h)/2);
    if ($a[$m] == $f){
        return $m;
    }elseif ($f         return erfen($a, $l, $m-1, $f);
    }else{
        return erfen($a, $m+1, $h, $f);
    }

}
$a = array(1,12,23,67,88,100);
var_dump(erfen($a,0,5,1));
//遍历树O(log2n)
function bianli($p){
    $a = array();
    foreach (glob($p.'/*') as $f){
        if(is_dir($f)){
            $a = array_merge($a,bianli($f));
        }else{
            $a[] = $f;
        }
    }
    return $a;
}
//阶乘O(log2n)
function jc($n){
    if($n        return 1;
    }else{
        return $n*jc($n-1);
    }   
}
//快速查找  O(n *log2(n))
function kuaisu($a){
    $c = count($a);
    if($c     $l = $r = array();   
    for ($i=1;$i        if($a[$i]             $l[] = $a[$i];
        }else{
            $r[] = $a[$i];
        }
    }
    $l = kuaisu($l);
    $r = kuaisu($r);
    return array_merge($l,array($a[0]),$r);
}
//插入排序  O(N*N)
function charu($a){
  $c = count($a);
  for($i=1;$i      $t = $a[$i];
      for($j=$i;$j>0 && $a[$j-1]>$t;$j--){
          $a[$j] = $a[$j-1];         
      }
      $a[$j] = $t;
  }
  return $a;
}
//选择排序O(N*N)
function xuanze($a){
    $c = count($a);
    for($i=0;$i        for ($j=$i+1;$j            if($a[$i]>$a[$j]){
                $t = $a[$j];
                $a[$j] = $a[$i];
                $a[$i] = $t;
             }
        }
    }
    return $a;
}
//冒泡排序   O(N*N)
function maopao($a){
    $c = count($a);
    for($i=0;$i        for ($j=$c-1;$j>$i;$j--){
            if($a[$j]                $t = $a[$j-1];
               $a[$j-1] = $a[$j];
               $a[$j] = $t;
            }
        }   
    }
    return $a;
}

复制代码 代码如下:

/**
 * 排列组合
 * 采用二进制方法进行组合的选择,如表示5选3时,只需有3位为1就可以了,所以可得到的组合是 01101 11100 00111 10011 01110等10种组合
 *
 * @param 需要排列的数组 $arr
 * @param 最小个数 $min_size
 * @return 满足条件的新数组组合
 */
function plzh($arr,$size=5) {
  $len = count($arr);
  $max = pow(2,$len);
  $min = pow(2,$size)-1;
  $r_arr = array();
  for ($i=$min; $i   $count = 0;
   $t_arr = array();
   for ($j=0; $j    $a = pow(2, $j);
    $t = $i&$a;
    if($t == $a){
     $t_arr[] = $arr[$j];
     $count++;
    }
   }  
   if($count == $size){
    $r_arr[] = $t_arr;   
   }  
  }
  return $r_arr;
 }

$pl = pl(array(1,2,3,4,5,6,7),5);
var_dump($pl);

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

C++ 再帰関数の時間計算量を分析するにはどうすればよいですか? C++ 再帰関数の時間計算量を分析するにはどうすればよいですか? Apr 17, 2024 pm 03:09 PM

再帰関数の時間計算量分析には、基本ケースと再帰呼び出しの特定が含まれます。基本ケースと各再帰呼び出しの時間計算量を計算します。すべての再帰呼び出しの時間計算量を合計します。関数呼び出しの数と問題のサイズとの関係を考慮してください。たとえば、再帰呼び出しごとに再帰の深さが 1 ずつ増加し、合計の深さが O(n) になるため、階乗関数の時間計算量は O(n) になります。

PHP 関数の時間計算量の問題にどう対処するか? PHP 関数の時間計算量の問題にどう対処するか? Apr 26, 2024 pm 02:12 PM

時間計算量は、関数の実行にかかる時間の尺度です。一般的な PHP 関数の時間計算量の問題には、入れ子になったループ、大規模な配列の走査、再帰呼び出しなどがあります。時間計算量を最適化する手法には、次のものが含まれます。 キャッシュを使用してループ数を削減する 並列処理を使用してアルゴリズムを簡素化する

Go 言語で時間計算量と空間計算量を分析する Go 言語で時間計算量と空間計算量を分析する Mar 27, 2024 am 09:24 AM

Go は、書きやすく、読みやすく、保守しやすいように設計されていると同時に、高度なプログラミング概念もサポートする、人気が高まっているプログラミング言語です。時間計算量と空間計算量は、アルゴリズムとデータ構造の解析における重要な概念であり、プログラムの実行効率とメモリ サイズを測定します。この記事では、Go 言語の時間計算量と空間計算量の分析に焦点を当てます。時間計算量 時間計算量とは、アルゴリズムの実行時間と問題のサイズとの関係を指します。時間は通常 Big O 表記で表されます

C++ で時間計算量と空間計算量を使用してアルゴリズムを分析する方法 C++ で時間計算量と空間計算量を使用してアルゴリズムを分析する方法 Sep 21, 2023 am 11:34 AM

C++ で時間計算量と空間計算量を使用してアルゴリズムを分析する方法 時間計算量と空間計算量は、アルゴリズムの実行にかかる時間と必要なスペースの尺度です。ソフトウェア開発では、最適なソリューションを選択するためにアルゴリズムの効率を評価する必要があることがよくあります。高性能プログラミング言語として、C++ は豊富なデータ構造とアルゴリズム ライブラリに加え、強力なコンピューティング機能とメモリ管理メカニズムを提供します。この記事では、C++ で時間計算量と空間計算量の分析アルゴリズムを使用する方法を紹介し、具体的なコード例を使用してその方法を説明します。

Java バブル ソートの時間計算量と適用性を分析する Java バブル ソートの時間計算量と適用性を分析する Jan 05, 2024 pm 02:30 PM

Javaバブルソートの時間計算量解析と応用シナリオ 【はじめに】 バブルソート(BubbleSort)は基本的なソートアルゴリズムです。シーケンスがソートされるまで、隣接する順序が崩れた要素を繰り返し交換することで機能します。バブル ソートの時間計算量は高くなりますが、その実装はシンプルであり、小規模なデータの並べ替えに適しています。 【アルゴリズム原理】 バブルソートのアルゴリズム原理は非常にシンプルです。まず、シーケンス内の 2 つの隣接する要素を比較します。順序が間違っている場合は、位置を交換してから、シーケンス内の隣接する要素の各ペアを順番に比較します。

ソート後の PHP 配列の時間計算量はどれくらいですか? ソート後の PHP 配列の時間計算量はどれくらいですか? May 01, 2024 am 10:00 AM

PHP 配列シャッフル ソートの時間計算量は O(n) で、実行時間は配列サイズに比例します。実際のケース: 配列を作成し、 shuffle 関数を使用して並べ替えを中断し、シャッフルされた配列を出力します。

C++ の時間計算量の測定および改善方法 C++ の時間計算量の測定および改善方法 Jun 06, 2024 am 11:23 AM

C++ アルゴリズムの時間計算量は、std::chrono ライブラリや外部ライブラリなどのメソッドを使用して測定できます。時間の複雑さを改善するには、より効率的なアルゴリズム、データ構造の最適化、並列プログラミングなどの手法を使用できます。

C++ の時間計算量に関する一般的な落とし穴と最適化戦略 C++ の時間計算量に関する一般的な落とし穴と最適化戦略 Jun 01, 2024 pm 10:09 PM

時間計算量のトラップを理解することが重要です。1. 正しいアルゴリズムを使用する。2. 不要なコピーを削減する。3. トラバーサルを最適化する。実際の例では、配列の二乗和の計算、文字列の大文字への変換、および順序付けされていない配列内の要素の検索のための最適化方法を検討します。

See all articles