数据库有十万条数据,比较的规则是,第一条和第二条后面的所有数据进行比较,第二条和后第三条后面的所有数据进行比较,以此类推。。。比较所有的数据.不想使用多重循环,想在一个循环内全部搞定,请问有比较好的算法吗?

回复内容:

数据库有十万条数据,比较的规则是,第一条和第二条后面的所有数据进行比较,第二条和后第三条后面的所有数据进行比较,以此类推。。。比较所有的数据.不想使用多重循环,想在一个循环内全部搞定,请问有比较好的算法吗?

看到你的场景说是,找重复。

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 算法 数字比较,数据两两比较的高效算法?相关推荐

  1. 机器学习经典算法具体解释及Python实现--K近邻(KNN)算法

    (一)KNN依旧是一种监督学习算法 KNN(K Nearest Neighbors,K近邻 )算法是机器学习全部算法中理论最简单.最好理解的.KNN是一种基于实例的学习,通过计算新数据与训练数据特征值 ...

  2. burg算法matlab求功率谱,基于AR模型的Burg算法功率谱估计.doc

    基于AR模型的Burg算法功率谱估计 三种功率谱估计方法性能研究 1.前言: 我们已经知道一个随机信号本身的傅里叶变换并不存在,因此无法像确定性信号一样用数字表达式来精确表达它,而只能用各种统计平均量 ...

  3. EL之Bagging(DTR):利用DIY数据集(预留30%数据+两种树深)训练Bagging算法(DTR)

    EL之Bagging(DTR):利用DIY数据集(预留30%数据+两种树深)训练Bagging算法(DTR) 目录 输出结果 设计思路 核心代码 输出结果 1.treeDepth=1 2.treeDe ...

  4. 两个矩阵是否相交的算法_刷透近200道数据结构与算法,成功加冕“题王”,挤进梦中的字节!...

    不管是学生还是已经工作的人,我想彼此都有一个相同的梦想:进大厂! 眼看着2020年还有个三十来天就要完美收尾了,那么如何才能在未来三个月弯道超车赶上"金三银四的春招",进入梦寐以求 ...

  5. 最快速度求两个数组之交集算法与hash

    一个题目 该题目来自58同城的二面,用最快速度求两个数组之交集算法. 比如A={6,2,4,1},B={2,9,4,3},那么A&B={2,4}. 算法一:在大多数情况,也就是一般的情况下,大 ...

  6. 最快速度求两个数组之交集算法

    该题目来自58同城的二面,用最快速度求两个数组之交集算法. 比如A={6,2,4,1},B={2,9,4,3},那么A&B={2,4}. 算法一:在大多数情况,也就是一般的情况下,大家都能想出 ...

  7. 阿里巴巴任庚:数字城市建设的“两核三转和四横五纵”

    阿里巴巴集团副总裁 阿里云智能中国区总裁 任庚 推进数字中国建设是党和国家制定的重要战略,是以数字化转型整体驱动生产方式.生活方式和治理方式的变革:数字城市建设是数字中国建设的重要组成部分,是数字中国 ...

  8. 我理解的算法 - 三数之和及两数、三数之和扩展题

    我理解的算法 - 三数之和及两数.三数之和扩展题 LeetCode 15.三数之和 扩展 三数之和变种题 两数之和变种题 LeetCode 15.三数之和 这道题的题目大家自行查看:链接在这 ,题目和 ...

  9. 【算法】哈希表 ( 两数之和 )

    算法 系列博客 [算法]刷题范围建议 和 代码规范 [算法]复杂度理论 ( 时间复杂度 ) [字符串]最长回文子串 ( 蛮力算法 ) [字符串]最长回文子串 ( 中心线枚举算法 ) [字符串]最长回文 ...

最新文章

  1. 组合特征(四)linearsvm-tfidf(word)+lr-tfidf(article)
  2. 最大权值闭合子图的证明详解
  3. 区块链开发: 2019年及以后数字货币的前景如何?
  4. Ubuntu 关机,重启,注销命令
  5. 没有日志,只有MDF文件如何恢复数据库(转)[
  6. z3 C++学习笔记
  7. 白鹭引擎开关音频代码实例
  8. (TTSR)Learning Texture Transformer Network for Image Super-Resolution
  9. Linux Vim基本操作(文件的打开和编辑)完全攻略(有图有真相)
  10. Centos+Mysql+sphinx+mmseg(rhel4)
  11. bootstrap表格插件php,深入了解Bootstrap table表格插件(一)
  12. iOS实现一个颜色渐变的弧形进度条
  13. Vue router路由懒加载
  14. 金融系统中BER-TLV的解析,更改、增加、删除TAG的实现
  15. 在Amazon S3 上架设静态网站
  16. 思科模拟器Cisco Packet Tracer的汉化教程
  17. python如何防止代码查重_怎样避免论文代码查重
  18. XPDL与WS-BPEL的比较之三:人工活动
  19. galaxy s6 android8,这些三星机型确认可以升级Android 8.0
  20. 解决‘adb‘ 不是内部或外部命令,也不是可运行的程序或批处理文件。

热门文章

  1. The IEEE 802.15.4 MAC layer
  2. 计算机毕业论文多久,计算机毕业论文
  3. navicat保存查询语句_还在用 Navicat 的,可以试试这几款免费且好用的 MySQL 客户端...
  4. fuzzy k means
  5. [codevs 1232] 飞行员配对方案问题
  6. 牛式 Prime Cryptarithm
  7. 怎么把一个控件放到tab页面上去?_移动端页面内容切换
  8. 北邮计算机2021成绩,北京邮电大学历年分数线 2021北京邮电大学录取分数线
  9. Java 8 – Period and Duration examples
  10. jQ复制按钮的插件zclip