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 算法 数字比较,数据两两比较的高效算法?相关推荐
- 机器学习经典算法具体解释及Python实现--K近邻(KNN)算法
(一)KNN依旧是一种监督学习算法 KNN(K Nearest Neighbors,K近邻 )算法是机器学习全部算法中理论最简单.最好理解的.KNN是一种基于实例的学习,通过计算新数据与训练数据特征值 ...
- burg算法matlab求功率谱,基于AR模型的Burg算法功率谱估计.doc
基于AR模型的Burg算法功率谱估计 三种功率谱估计方法性能研究 1.前言: 我们已经知道一个随机信号本身的傅里叶变换并不存在,因此无法像确定性信号一样用数字表达式来精确表达它,而只能用各种统计平均量 ...
- EL之Bagging(DTR):利用DIY数据集(预留30%数据+两种树深)训练Bagging算法(DTR)
EL之Bagging(DTR):利用DIY数据集(预留30%数据+两种树深)训练Bagging算法(DTR) 目录 输出结果 设计思路 核心代码 输出结果 1.treeDepth=1 2.treeDe ...
- 两个矩阵是否相交的算法_刷透近200道数据结构与算法,成功加冕“题王”,挤进梦中的字节!...
不管是学生还是已经工作的人,我想彼此都有一个相同的梦想:进大厂! 眼看着2020年还有个三十来天就要完美收尾了,那么如何才能在未来三个月弯道超车赶上"金三银四的春招",进入梦寐以求 ...
- 最快速度求两个数组之交集算法与hash
一个题目 该题目来自58同城的二面,用最快速度求两个数组之交集算法. 比如A={6,2,4,1},B={2,9,4,3},那么A&B={2,4}. 算法一:在大多数情况,也就是一般的情况下,大 ...
- 最快速度求两个数组之交集算法
该题目来自58同城的二面,用最快速度求两个数组之交集算法. 比如A={6,2,4,1},B={2,9,4,3},那么A&B={2,4}. 算法一:在大多数情况,也就是一般的情况下,大家都能想出 ...
- 阿里巴巴任庚:数字城市建设的“两核三转和四横五纵”
阿里巴巴集团副总裁 阿里云智能中国区总裁 任庚 推进数字中国建设是党和国家制定的重要战略,是以数字化转型整体驱动生产方式.生活方式和治理方式的变革:数字城市建设是数字中国建设的重要组成部分,是数字中国 ...
- 我理解的算法 - 三数之和及两数、三数之和扩展题
我理解的算法 - 三数之和及两数.三数之和扩展题 LeetCode 15.三数之和 扩展 三数之和变种题 两数之和变种题 LeetCode 15.三数之和 这道题的题目大家自行查看:链接在这 ,题目和 ...
- 【算法】哈希表 ( 两数之和 )
算法 系列博客 [算法]刷题范围建议 和 代码规范 [算法]复杂度理论 ( 时间复杂度 ) [字符串]最长回文子串 ( 蛮力算法 ) [字符串]最长回文子串 ( 中心线枚举算法 ) [字符串]最长回文 ...
最新文章
- 组合特征(四)linearsvm-tfidf(word)+lr-tfidf(article)
- 最大权值闭合子图的证明详解
- 区块链开发: 2019年及以后数字货币的前景如何?
- Ubuntu 关机,重启,注销命令
- 没有日志,只有MDF文件如何恢复数据库(转)[
- z3 C++学习笔记
- 白鹭引擎开关音频代码实例
- (TTSR)Learning Texture Transformer Network for Image Super-Resolution
- Linux Vim基本操作(文件的打开和编辑)完全攻略(有图有真相)
- Centos+Mysql+sphinx+mmseg(rhel4)
- bootstrap表格插件php,深入了解Bootstrap table表格插件(一)
- iOS实现一个颜色渐变的弧形进度条
- Vue router路由懒加载
- 金融系统中BER-TLV的解析,更改、增加、删除TAG的实现
- 在Amazon S3 上架设静态网站
- 思科模拟器Cisco Packet Tracer的汉化教程
- python如何防止代码查重_怎样避免论文代码查重
- XPDL与WS-BPEL的比较之三:人工活动
- galaxy s6 android8,这些三星机型确认可以升级Android 8.0
- 解决‘adb‘ 不是内部或外部命令,也不是可运行的程序或批处理文件。
热门文章
- The IEEE 802.15.4 MAC layer
- 计算机毕业论文多久,计算机毕业论文
- navicat保存查询语句_还在用 Navicat 的,可以试试这几款免费且好用的 MySQL 客户端...
- fuzzy k means
- [codevs 1232] 飞行员配对方案问题
- 牛式 Prime Cryptarithm
- 怎么把一个控件放到tab页面上去?_移动端页面内容切换
- 北邮计算机2021成绩,北京邮电大学历年分数线 2021北京邮电大学录取分数线
- Java 8 – Period and Duration examples
- jQ复制按钮的插件zclip