最近公司在做一个项目,需要对爬取到的数据进行去重,方法就是根据数据的id,去除掉id重复的数据。

下面是这个方法的演化过程。

// 去重
$arr_id = array();
$LeTVFeedList = array();
for ($i = 0; $i < count($arrFeedList); $i++){
if(!in_array($arrFeedList[i]['id'], $arr_id)){
$LeTVFeedList[] = $arrFeedList[i];
$arr_id[] = $arrFeedList[i]['id'];
}
}

从上面的算法中可以看到,上面的算法用了两个数组,两个循环,所以它的时间复杂度为O(n^2),空间复杂度为O(2n)。上面的算法,我们可以从in_array()入手,考虑下面的因素。

用数组的id作数组下标,来存储爬取到的数据值。

// 去重
$tmp_arr = array();
for ($i = 0; $i < min(count($arrFeedList),10); $i++){
$tmp_arr[$arrFeedList[$i]['id']] = $arrFeedList[$i];
}
$arrLeTVFeedList = array();
foreach ($tmp_arr as $key => $value){
$arrLeTVFeedList[] = $value;
}

这里用了两个循环,两个数组,时间复杂度是O(2n),空间复杂度是O(2n).

后来又对循环进行了优化,变成如下代码:

// 去重
$tmp_arr = array();
$arrLeTVFeedList = array();
foreach ($arrFeedList as $key => $value){
if(!isset($tmp_arr[$key['id']])){
$tmp_arr[$key['id']] = $value;
$arrLeTVFeedList[] = $value;
}
}

isset是速度要快于for循环,以上代码是最终版本

PHP去重算法的优化过程的更多相关文章

  1. 【转】JavaScript下对去重算法的优化

    本人较懒,直接将链接附上: JavaScript下去重算法优化:http://www.linuxde.net/2013/02/12062.html

  2. SSE图像算法优化系列二:高斯模糊算法的全面优化过程分享(一)。

    这里的高斯模糊采用的是论文<Recursive implementation of the Gaussian filter>里描述的递归算法. 仔细观察和理解上述公式,在forward过程 ...

  3. Spark Mllib里的协调过滤的概念和实现步骤、LS、ALS的原理、ALS算法优化过程的推导、隐式反馈和ALS-WR算法

    不多说,直接上干货! 常见的推荐算法 1.基于关系规则的推荐 2.基于内容的推荐 3.人口统计式的推荐 4.协调过滤式的推荐 (广泛采用) 协调过滤的概念 在现今的推荐技术和算法中,最被大家广泛认可和 ...

  4. [转] Paxos算法2-算法过程(实现)

    请先参考前文:Paxos算法1 1.编号处理 根据P2c ,proposer在提案前会先咨询acceptor查看其批准的最大的编号和value,再决定提交哪个value.之前我们一直强调更高编号的pr ...

  5. Bellman-Ford 算法及其优化

    Bellman-Ford 算法及其优化 转自:http://hi.baidu.com/jzlikewei/blog/item/94db7950f96f995a1038c2cd.html Bellman ...

  6. 【转】larbin中的url去重算法

    1.bloom filter算法 传说中,larbin使用bloom filter算法来进行url去重.那我们就先来了解下bloom filter算法好了. [以下转自:http://hi.baidu ...

  7. 算法的优化(C语言描述)

    算法的优化 算法的优化分为全局优化和局部优化两个层次.全局优化也称为结构优化,主要是从基本控制结构优化.算法.数据结构的选择上考虑:局部优化即为代码优化,包括使用尽量小的数据类型.优化表达式.优化赋值 ...

  8. 支持向量机-完整Platt-SMO算法加速优化

    完整版SMO算法与简单的SMO算法: 实现alpha的更改和代数运算的优化环节一模一样,唯一的不同就是选择alpha的方式.完整版应用了一些能够提速的方法. 同样使用Jupyter实现,后面不在赘述 ...

  9. 【转】Paxos算法2-算法过程

    ——转自:{老码农的专栏} 1.编号处理 根据P2c ,proposer在提案前会先咨询acceptor查看其批准的最大的编号和value,再决定提交哪个value.之前我们一直强调更高编号的prop ...

随机推荐

  1. java dom4j封装和解析XML

    package org.scbit.lsbi.scp.utils; import java.util.ArrayList; import java.util.List; import org.dom4 ...

  2. ProtocolBuffers-3 For Objective C (2)-进阶

    先介绍几个常用关键字: equired前缀表示该字段为必要字段,既在序列化和反序列化之前该字段必须已经被赋值.与此同时,在Protocol Buffer中还存在另外两个类似的关键字,optional和 ...

  3. 破解myEclipse

    建立一个java项目,将reg.java放入,并且运行在控制台 输入账户 回车就会出现 序列号 菜单栏--->myeclipse-->substription information--- ...

  4. .net WebApi开发

    1].部署环境.net4及以上版本. [2].vs2010  开发需单独安装vs2010 sp1和mvc4 mvc4:http://www.asp.net/mvc/mvc4 或者 http://dow ...

  5. MYsql 数据库密码忘记(Linux)

    在Linux 上面装上了 Mysql 数据库,但是发现密码忘了,悲催,解决方法跟Window系统下一样的, 不管是哪个操作系统处理的思路是相同的,就是首先要把mysql的权限去掉,这样即使忘了密码,不 ...

  6. C#连接SQLServer数据库基本实现

    (在这写下来,防止以后忘记) 在VS2012中新建一个Windows窗口应用程序,并在Form中放置DataGridView和Button两个控件,在Button的单击响应事件中连接数据库: priv ...

  7. 用.net 发送邮件

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.N ...

  8. 使用国内pypi源来安装python包

    国内源 http://pypi.douban.com/  豆瓣 http://pypi.hustunique.com/  华中理工大学 http://pypi.sdutlinux.org/  山东理工 ...

  9. 卸载oracle 11g grid软件

    一,使用deinstall 同样,卸载grid软件在11g中也推出了了卸载工具deinstall卸载同卸载oracle数据库软件 具体可参考:Behaviour of the Oracle De-in ...

  10. AgileEAS.NET SOA 中间件Web运行容器管理功能已全部开源,欢迎大家下载、使用、反馈

    一.前言 AgileEAS.NET SOA 中间件平台是一款基于基于敏捷并行开发思想和Microsoft .Net构件(组件)开发技术而构建的一个快速开发应用平台.用于帮助中小型软件企业建立一条适合市 ...