PHP去重进行算法升级过程
发布:smiling 来源: PHP粉丝网 添加日期:2018-05-31 11:35:16 浏览: 评论:0
最近公司在做一个项目,需要对爬取到的数据进行去重,方法就是根据数据的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循环,以上代码是最终版本。
Tags: 算法 过程
相关文章
- ·php:树形结构的算法(2013-11-13)
- ·PHP冒泡排序算法详解(2014-07-23)
- ·php三种常用的排序算法(2014-08-02)
- ·php中单字符串匹配算法实例(2014-09-22)
- ·PHP中实现冒泡排序和快速排序算法示例(2015-04-04)
- ·最简单的php中字符串匹配算法教程(2015-04-06)
- ·PHP全排列算法实现程序代码(2015-04-08)
- ·PHP中简单实现数学组合算法(2015-04-08)
- ·php中字符串匹配KMP算法实现例子(2015-04-09)
- ·PHP中使用AES加密算法加密数据的例子(2015-04-13)
- ·PHP 冒泡/快速/选择/插入排序算法实例讲解(2015-12-24)
- ·用PHP实现URL转换短网址的算法示例(2016-07-27)
- ·php四种基础排序算法的运行时间比较(2016-08-25)
- ·PHP排序算法之简单选择排序(Simple Selection Sort)实例分析(2018-06-06)
- ·PHP排序算法之堆排序(Heap Sort)实例详解(2018-06-06)
- ·php中简单的对称加密算法实现(2018-06-19)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)