算法

浅谈PHP5中垃圾回收算法(Garbage Collection)的演化

大城市里の小女人 提交于 2020-03-24 02:11:37
3 月,跳不动了?>>> 文章来源:PHP开发学习门户 地址: http://www.phpthinking.com/archives/636 前言 PHP是一门托管型语言,在PHP编程中程序员不需要手工处理内存资源的分配与释放(使用C编写PHP或Zend扩展除外),这就意味着PHP本身实现了垃圾回收机制(Garbage Collection)。现在如果去PHP官方网站可以看到,目前PHP5的两个分支版本PHP5.2和PHP5.3是分别更新的,这是因为许多项目仍然使用5.2版本的PHP,而5.3版本对5.2并不是完全兼容。PHP5.3在PHP5.2的基础上做了诸多改进,其中垃圾回收算法就属于一个比较大的改变。本文将分别讨论PHP5.2和PHP5.3的垃圾回收机制,并讨论这种演化和改进对于程序员编写PHP的影响以及要注意的问题。 PHP变量及关联内存对象的内部表示 垃圾回收说到底是对变量及其所关联内存对象的操作,所以在讨论PHP的垃圾回收机制之前,先简要介绍PHP中变量及其内存对象的内部表示(其C源代码中的表示)。 PHP官方文档中将PHP中的变量划分为两类:标量类型和复杂类型。标量类型包括布尔型、整型、浮点型和字符串;复杂类型包括数组、对象和资源;还有一个NULL比较特殊,它不划分为任何类型,而是单独成为一类。 所有这些类型,在PHP内部统一用一个叫做zval的结构表示

推荐算法

為{幸葍}努か 提交于 2020-03-24 01:22:52
推荐算法越来越多的运用到我们的生活中,特别是在网站中,当你浏览大大小小的网站,你的行为被时刻记录着,并根据一些依据对你推荐一些物品。下面会简单介绍一下推荐算法,后续会继续对这些算法进行补充。 1.协同过滤算法 2.基于流行度的算法 3.基于模型的算法 4.混合算法 协同过滤算法 协同过滤算法有两种,一种是基于用户的协同过滤算法,一种是基于物品的协同过滤算法。 基于用户的协同过滤算法 该算法主要是找出用户的相似用户,将相似用户浏览或购买而用户没有购买的商品推荐给用户。 基于用户的协同过滤算法流程如下: 1.分析各个用户对item的评价(通过浏览记录、购买记录等); 2.依据用户对item的评价计算得出所有用户之间的相似度; 3.选出与当前用户最相似的N个用户; 4.将这N个用户评价最高并且当前用户又没有浏览过的item推荐给当前用户。 如下图: 基于物品的协同过滤算法 基于物品的协同过滤算法原理为在计算邻居时采用物品本身,而不是从用户的角度,即基于用户对物品的偏好找到相似的物品,然后根据用户的历史偏好,推荐相似的物品给他。基于物品的协同过滤算法原理大同小异,只是主体在于物品: 1.分析各个用户对item的浏览记录。 依据浏览记录分析得出所有item之间的相似度; 2.对于当前用户评价高的item,找出与之相似度最高的N个item; 3.将这N个item推荐给用户。 如下图:

5类常见的推荐算法

余生颓废 提交于 2020-03-24 01:22:17
  ◆ ◆ ◆   序言   最近因为PAC平台自动化的需求,开始探坑推荐系统。这个乍一听去乐趣无穷的课题,对于算法大神们来说是这样的:      而对于刚接触这个领域的我来说,是这样的:      在深坑外围徘徊了一周后,我整理了一些推荐系统的基本概念以及一些有代表性的简单的算法,作为初探总结,也希望能抛砖引玉,给同样想入坑的伙伴们提供一些思路。   ◆ ◆ ◆   什么是推荐系统   1. 什么是推荐系统?   推荐系统是啥?   如果你是个多年电商(剁手)党,你会说是这个:      如果你是名充满文艺细胞的音乐发烧友,你会答这个:      如果你是位活跃在各大社交平台的点赞狂魔,你会答这个:      没错,猜你喜欢、个性歌单、热点微博,这些都是推荐系统的输出内容。从这些我们就可以总结出,推荐系统到底是做什么的。   目的1. 帮助用户找到想要的商品(新闻/音乐/……),发掘长尾   帮用户找到想要的东西,谈何容易。商品茫茫多,甚至是我们自己,也经常点开淘宝,面对眼花缭乱的打折活动不知道要买啥。在经济学中,有一个著名理论叫长尾理论(The Long Tail)。      套用在互联网领域中,指的就是最热的那一小部分资源将得到绝大部分的关注,而剩下的很大一部分资源却鲜少有人问津。这不仅造成了资源利用上的浪费,也让很多口味偏小众的用户无法找到自己感兴趣的内容。   目的2.

推荐算法入门

空扰寡人 提交于 2020-03-24 01:21:31
推荐算法概览(一) 为推荐系统选择正确的推荐算法非常重要,而可用的算法很多,想要找到最适合所处理问题的算法还是很有难度的。这些算法每种都各有优劣,也各有局限,因此在作出决策前我们应当对其做以衡量。在实践中,我们很可能需要测试多种算法,以便找出最适合用户的那种;了解这些算法的概念以及工作原理,对它们有个直观印象将会很有帮助。 推荐算法通常是在 推荐模型 中实现的,而推荐模型会负责收集诸如用户偏好、物品描述这些可用作推荐凭借的数据,据此预测特定用户组可能感兴趣的物品。 主要的推荐算法系列有四个(表格1-4): 协同过滤(Collaborative Filtering)的推荐算法 基于内容过滤(Content-based Filtering)的推荐算法 混合型推荐算法 流行度推荐算法 此外,还有很多高级或非传统的方式,可参见表格5。 本文是系列文中的第一篇,将会以表格形式来介绍推荐算法的主要分类,包括算法简介、典型的输入内容、常见的形式及其优劣。在系列文的第二与第三篇中,我们将会更详细地介绍各种算法的不同,以便让大家更深入地理解其工作原理。本文的某些内容是基于一篇2014年的推荐算法2014教程 《推荐问题再探(Recommender Problem Revisited)》 来撰写的,该文的作者是 Xavier Amatriain 。 表格一:协同过滤推荐算法概览 表格二

工作6年,私藏的25个,调优工具/技术网站,我贡献出来了

萝らか妹 提交于 2020-03-24 01:02:05
3 月,跳不动了?>>> 对于程序员来说,不停的学习新技术,是我们一直要做的事情,平时不积累,等到金三银四,金九银十的跳槽季节,身边的朋友,一个个的拿着高薪跳槽,自己只能眼巴巴的看着,后悔平时没有积累学习。 其实很多程序员最头疼的事情,就是找学习资料或面试题,我这里,就给大家推荐一些,我赞了6年的优质技术网站,都是我精心挑选的,涵盖:4个算法网站,7个调优排错工具网站,4个问答社区,4个教程网站,4个代码协作平台,都是大家学习IT路上的好帮手,对技术提升有很大帮助,而且都是里免费的! 算法网站 LeetCode https://leetcode.com https://leetcode-cn.com LeetCode: 被称为刷题神器,里面有很编程算法面试的海量题目,可以在线编译运行,难度比较高。如果自己能都做出来,对面试大公司很有帮助。建议一次只针对一种题型进行训练,如数组、链表、二叉树、回溯、动态规划,这样效果会更好。 LintCode https://www.lintcode.com LintCode: 汇集了各大公司的算法面试题,有阶梯式训练题库,帮你选好应该刷的题目,特别适合小白和懒人。评测数独特快,支持中文在线题库,不需要你处理输入和输出,方便了很多,测试速度也很快。 VisuAlgo https://visualgo.net/zh VisuAlgo:

数据结构&算法

纵然是瞬间 提交于 2020-03-23 20:35:35
3 月,跳不动了?>>> 在分析算法效率时,经常关注以下两种复杂度: (1)最坏情况复杂度:T worst (n) (2)平均复杂度:T avg (n) 易知T avg (n)<=T worst (n) 注:一般分析最坏情况复杂度,因为平均复杂度不容易找 下表能够比较直观的看出各个复杂度的运行时间 1 2 4 8 16 32 C(常函数) 1 1 1 1 1 1 logn 0 1 2 3 4 5 n 1 2 4 8 16 32 nlogn 0 2 8 24 64 160 n 2 1 4 16 64 256 1024 n 3 1 8 64 512 4096 32768 2 n 2 4 16 256 65536 4294967296 n! 1 2 24 40326 2092278988000 26313×10 33 所以一般情况下避免出现后两种复杂度 下图是几种复杂度的增长速度 (图片来自慕课,陈越姥姥那堂课) 复杂度分析的窍门: 若已知T 1 (n) = O(f 1 (n))和T 2 (n) = O(f 2 (n)),则 T 1 (n) + T 2 (n) = max(O(f 1 (n)),O(f 2 (n))) (就是O(f 1 (n))和O(f 2 (n))的最大值) T 1 (n) × T 2 (n) = O(f 1 (n) × f 2 (n)) for循环的T(n) =

KMP算法

痞子三分冷 提交于 2020-03-23 18:23:53
#include<stdio.h> #include<string.h> void sstring(chara,charb)//将一个字符串整体后移一个单位方便后续计算 { int len,i; a[0]=strlen(b); for(i=1;i<=a[0];i++) a[i]=b[i-1]; return; } void get_next(char T,int next) //next函数求法运用了递推的思想,即从广义的某个字符t[i]开始推出普遍规律 其中又再次运用了kmp思想 { int i=1,j=0; next[1]=0; while(i<T[0]) 欧元符号http://www.gendan5.com/currency/EUR.html if(j==0||T[i]==T[j])//j=0意味着无相同前后缀,模式串从首位开始重新与主串匹配 { ++i; ++j; next[i]=j; //这三步可以直接写成 next[++i]=++j; } else j=next[j];//仍然不匹配 模式串右滑 } / void get_next(char T,int next) { int i=1,j=0; next[1]=0; while(i<T[0]) if(T[i]= =T[j]) { ++i; ++j; next[i]=j; } else if(j==0) /

数据结构与算法系列十二(插入排序)

天涯浪子 提交于 2020-03-23 10:21:11
3 月,跳不动了?>>> 1.引子 1.1.为什么要学习数据结构与算法? 有人说,数据结构与算法,计算机网络,与操作系统都一样,脱离日常开发,除了面试这辈子可能都用不到呀! 有人说,我是做业务开发的,只要熟练API,熟练框架,熟练各种中间件,写的代码不也能“飞”起来吗? 于是问题来了:为什么还要学习数据结构与算法呢? #理由一: 面试的时候,千万不要被数据结构与算法拖了后腿 #理由二: 你真的愿意做一辈子CRUD Boy吗 #理由三: 不想写出开源框架,中间件的工程师,不是好厨子 1.2.如何系统化学习数据结构与算法? 我想好了,还是需要学习数据结构与算法。但是我有两个困惑: 1.如何着手学习呢? 2.有哪些内容要学习呢? 学习方法推荐: #学习方法 1.从基础开始,系统化学习 2.多动手,每一种数据结构与算法,都自己用代码实现出来 3.思路更重要:理解实现思想,不要背代码 4.与日常开发结合,对应应用场景 学习内容推荐: 数据结构与算法内容比较多,我们本着实用原则,学习经典的、常用的数据结构、与常用算法 #学习内容: 1.数据结构的定义 2.算法的定义 3.复杂度分析 4.常用数据结构 数组、链表、栈、队列 散列表、二叉树、堆 跳表、图 5.常用算法 递归、排序、二分查找 搜索、哈希、贪心、分治 动态规划、字符串匹配 2.考考你 上一篇: 数据结构与算法系列十一(冒泡排序) 中

电梯调度算法---SCAN算法

荒凉一梦 提交于 2020-03-23 06:21:37
请珍惜小编劳动成果,该文章为小编原创。转载请注明出处。 扫描(SCAN)调度算法:总是从磁臂当前位置開始,沿磁臂的移动方向去选择离当前磁臂近期的那个柱面的訪问者。 假设沿磁臂的方向无请求訪问时,就改变磁臂的移动方向。採用这样的调度算法。须要为訪问者设置两个队列。依据磁头的移动方向,能訪问到的訪问者由近及远排队。背离磁头移动方向的訪问者也由近及远排为还有一队。先按磁头移动方向队列调度訪问者訪问磁盘,当该方向没有訪问者时,再改变方向,选择还有一个訪问者队列訪问磁盘。 java代码实现: import java.util.Scanner; public class SCAN { int visitAdd[]; int visitSub[]; int index=0; //存放下标,已排序序列中找到比它大的最小值的下标 public void scan(int data[],int begin,int direction){ int temp=0; //从小到大排序 for(int i=0;i<data.length;i++){ for(int j=i;j<data.length;j++){ if(data[i]>data[j]){ temp=data[i]; data[i]=data[j]; data[j]=temp; } } } for(int i=0;i<data.length;i+