php 算法 数字比较,数据两两比较的高效算法?
數據庫有十萬條數據,比較的規則是,第一條和第二條后面的所有數據進行比較,第二條和后第三條后面的所有數據進行比較,以此類推。。。比較所有的數據.不想使用多重循環,想在一個循環內全部搞定,請問有比較好的算法嗎?
回復內容:
數據庫有十萬條數據,比較的規則是,第一條和第二條后面的所有數據進行比較,第二條和后第三條后面的所有數據進行比較,以此類推。。。比較所有的數據.不想使用多重循環,想在一個循環內全部搞定,請問有比較好的算法嗎?
看到你的場景說是,找重復。
SELECT id from table GROUP BY id HAVING COUNT(*)>1
這樣獲取回來的就是含重復數據。
如果是如題所說的兩兩比較,如果限定 "兩兩比較" 必然是 O(n^2),既然確定了時間復雜度,那么就不用算法效率了。剩下的就是考慮在那計算了。
如果數據規模不夠大,內存里計算完全可以了,前提是數據規模不大。
詳述場景~~~~~~~~~~~~~~~~
先排序,后比較
不建議在數據庫中操作,最方便的就是把這10w 條數據取出來,放到 php 內存中來操作.
代碼如下
$sql = "select id,data from table order by data asc";
$result = [
0=> ['id'=>3, 'data'=>1],
1=> ['id'=>1, 'data'=>2],
2=> ['id'=>4, 'data'=>2],
3=> ['id'=>5, 'data'=>2],
4=> ['id'=>2, 'data'=>5],
];
//遍歷小于
//小于當前元素下標的元素
//遍歷大于
//大于當前元素下標的元素
//相同,有點復雜,代碼如下
$same = array();
$current = 0;
$next = $current + 1;
//遍歷一遍數組
while(isset($result[ $next ])) {
$data = $result[ $current ][ 'data' ];
//如果當前元素值和下一個元素值一樣,放到值數組中
if ($data == $result[ $next ][ 'data' ]) {
$same[ $data ][] = $result[ $next ];
$next ++;
}else{ //如果不一樣,當前元素指向 當下標為$next的元素
$current = $next;
$next = $current+1;
}
}
var_export($same);
//結果
array (
2 =>
array (
0 =>
array (
'id' => 4,
'data' => 2,
),
1 =>
array (
'id' => 5,
'data' => 2,
),
),
)
有幾個問題是需要注意的:
1,數據要在內存中做排序或對比,不要在數據庫內執行;
2,兩兩比較的目的是什么?要從這10W+數據中取出最大的N個?還是做排序?建議在內存中用一個索引數組存儲排序后的所有數據;
3,排序算法使用快排;
相關標簽:php
本文原創發布php中文網,轉載請注明出處,感謝您的尊重!
總結
以上是生活随笔為你收集整理的php 算法 数字比较,数据两两比较的高效算法?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: matlab人工势场法三维演示图,人工势
- 下一篇: zabbix frontends php