php 常用算法和时间复杂度_php技巧
按数量级递增排列,常见的时间复杂度有:常数阶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);

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

재귀 함수의 시간 복잡도 분석에는 기본 사례 및 재귀 호출 식별이 포함됩니다. 기본 사례와 각 재귀 호출의 시간 복잡도를 계산합니다. 모든 재귀 호출의 시간 복잡도를 합산합니다. 함수 호출 수와 문제 크기 사이의 관계를 고려하십시오. 예를 들어 계승 함수의 시간 복잡도는 O(n)입니다. 각 재귀 호출이 재귀 깊이를 1씩 증가시켜 총 깊이가 O(n)이 되기 때문입니다.

시간 복잡도는 함수가 실행되는 데 걸리는 시간을 측정한 것입니다. 일반적인 PHP 함수 시간 복잡도 문제에는 중첩 루프, 대규모 배열 순회 및 재귀 호출이 포함됩니다. 시간 복잡성을 최적화하는 기술에는 다음이 포함됩니다. 캐싱을 사용하여 루프 수 줄이기 병렬 처리를 사용하여 알고리즘 단순화

Go는 쓰기 쉽고, 읽기 쉽고, 유지 관리하기 쉬우면서도 고급 프로그래밍 개념을 지원하도록 설계된 프로그래밍 언어로 점점 더 인기를 얻고 있습니다. 시간 복잡도와 공간 복잡도는 알고리즘과 데이터 구조 분석에서 중요한 개념으로, 프로그램의 실행 효율성과 메모리 크기를 측정합니다. 이번 글에서는 Go 언어의 시간 복잡도와 공간 복잡도를 분석하는 데 중점을 둘 것입니다. 시간 복잡도(Time Complexity) 시간 복잡도는 알고리즘의 실행 시간과 문제 크기 사이의 관계를 나타냅니다. 시간은 일반적으로 Big O 표기법으로 표현됩니다.

C++에서 시간 복잡도와 공간 복잡도를 사용하여 알고리즘을 분석하는 방법 시간 복잡도와 공간 복잡도는 알고리즘을 실행하는 데 걸리는 시간과 필요한 공간을 측정한 것입니다. 소프트웨어 개발에서는 최적의 솔루션을 선택하기 위해 알고리즘의 효율성을 평가해야 하는 경우가 많습니다. 고성능 프로그래밍 언어인 C++는 풍부한 데이터 구조와 알고리즘 라이브러리는 물론 강력한 컴퓨팅 기능과 메모리 관리 메커니즘을 제공합니다. 이 기사에서는 C++에서 시간 복잡도 및 공간 복잡도 분석 알고리즘을 사용하는 방법을 소개하고 특정 코드 예제를 통해 이를 수행하는 방법을 설명합니다.

자바 버블정렬의 시간 복잡도 분석과 응용 시나리오 [소개] 버블정렬(BubbleSort)은 기본적인 정렬 알고리즘이다. 시퀀스가 정렬될 때까지 인접한 순서가 잘못된 요소를 반복적으로 교환하는 방식으로 작동합니다. 버블 정렬은 시간 복잡도가 높지만 구현이 간단하고 소규모 데이터를 정렬하는 데 적합합니다. [알고리즘 원리] 버블정렬의 알고리즘 원리는 매우 간단합니다. 먼저 시퀀스에서 인접한 두 요소를 비교합니다. 순서가 잘못된 경우 위치를 바꾼 다음 시퀀스의 각 인접 요소 쌍을 차례로 비교합니다.

PHP 배열 셔플 정렬의 시간 복잡도는 O(n)이고, 실행 시간은 배열 크기에 비례합니다. 실제 사례: 배열을 만들고 섞기 기능을 사용하여 정렬을 방해하고 섞인 배열을 인쇄합니다.

C++ 알고리즘의 시간 복잡도는 std::chrono 라이브러리 또는 외부 라이브러리와 같은 방법을 사용하여 측정할 수 있습니다. 시간 복잡성을 개선하기 위해 보다 효율적인 알고리즘, 데이터 구조 최적화 또는 병렬 프로그래밍과 같은 기술을 사용할 수 있습니다.

시간 복잡도 트랩을 이해하는 것이 중요합니다. 1. 올바른 알고리즘을 사용합니다. 2. 불필요한 복사본을 줄입니다. 실제 예제에서는 배열의 제곱합을 계산하고, 문자열을 대문자로 변환하고, 순서가 지정되지 않은 배열에서 요소를 찾는 최적화 방법을 살펴봅니다.
