記錄所有演算法相關知識。寫演算法時,可以先寫test case,這樣比較容易把握和思考。
以下演算法都可以直接跑。
1.冒泡演算法
<?php
$arr = [2,1,4,3,8,9,7,6,5];
print_r(bubblesort($arr));
function bubblesort($arr) }}
return $arr;
}
2.快速排序。簡單思路,隨機挑選乙個陣列中的值,以它為標準,小於他的放在她的左邊,大於他的放在他的右邊。之後遞迴,最後所有的值都會排列好。
<?php
$arr = [8,7,6,5,4,0, -1, -3,3,2,1];
print_r(quicksort($arr));
function quicksort($arr)
else }}
$left = quicksort($left);
$right = quicksort($right);
return array_merge($left, [$reference], $right);
}
3.從兩個陣列中找出相同的數
<?php
$arr1 = [5,4,3,2,1];
$arr2 = [4,5,6,7,8];
print_r(uniquenumber($arr1, $arr2));
function uniquenumber($arr1, $arr2)
else if ($arr1[$index1] > $arr2[$index2]) else
}return array_unique($container);
}
4.重寫shuffle函式,打亂乙個陣列
<?php
$arr = [2,3,4,5,6,7,8,9];
print_r(shufflerewrite($arr));
//這邊不能用shuffle,因為是內建函式。
function shufflerewrite($arr)
return $arr;
}
5.分離字母和數字。乙個string中有字母數字,分離並用:分割
<?php
$numalpha = "abc123dfg4jkl567ddd";
print_r(numalphasplit($numalpha));
function numalphasplit($numalpha)
array_shift($roundtable);
}return $roundtable[0];
}
7.二分法
<?php
$arr = [1,3,5,7,9,11,13];
echo binarysearch($arr, 11);
function binarysearch($arr, $index)
else if ($arr[$mid] < $index) else
}return -1;
}
8.找出一組數中連續的最大和
<?php
$arr = [-4, -2, 4, -3, 6, -2, 9, -3];
echo maxsum($arr);
function maxsum($arr)
else
}return $maxsum;
}
9.3sum. 排序好的數列,複雜度n^2。如果沒有排列好,可以先用sort
<?php
$arr = [-8,-7,-6,-4,-2,0,1,2,3,4,5,6,7];
print_r(sum3($arr));
function sum3($arr)
else if ($sum > 0) else }}
return $result;
}
php實現演算法
二分法查詢 已排序 params arr 查詢的陣列 start 開始查詢的下標 end 結束查詢的下標 value 查詢的值 function bin search arr,start,end,value else if arr mid value else return 1 快速排序 原理 選擇...
php AES演算法php實現
上次介紹了aes演算法的原理,原理完了肯定就是實現了。其實這個裡面有許多 是都是別人的原始碼,不過拿到手的時候裡面有機個小錯誤,自己就改了改錯。其實在了解演算法的基礎上,寫起來還是比較簡單的。以下就是 了。class aes state self subbytes state,nb state se...
PHP實現DFA演算法
最近專案需要用到敏感詞過濾功能,最開始想的是使用正則匹配和mysql儲存敏感詞來對敏感詞來進行過濾操作,但是這兩種方法都感覺不好。大家都知道正則效能問題一直都是乙個很大的問題,而使用mysql的話雖然可以實現,但是給資料庫增加了額外的壓力。後面經過google了解到dfa 有窮自動機 演算法可以解決...