导航:首页 > 源码编译 > 5分钟学算法网站

5分钟学算法网站

发布时间:2023-08-08 02:59:06

㈠ PageRank算法实现好友推荐(算法原理)

对于社交系统与电商网站,推荐系统占有很重要的位置,当数据量越来越大的时候,用户无法确定该选择什么商品,因此在电商系统中需要按照兴趣或者相似度给用户推荐相应的商品。相应的,在一个大型社交网络平台中,对于一些用户,我们希望推荐一些知名度较高,活跃度较高或者感兴趣的用户,比如一些明星,歌手,演员等等。在社交网络中,PageRank算法有着广泛的应用,因此,本篇文章主要介绍其原理。

对于大部分社交系统来说,如果只是简单的获取好友的信息远远不够,我们可以通过获取好友的好友的信息来扩展用户的朋友圈,使得信息量更加丰富,本项目中使用PageRank算法来完成二级邻居,然后按照Rank排序,选择Top5用户实现用户的好友的好友的推荐。

PageRank算法由Google的创始人拉里·佩奇和谢尔·布林于1998年发明.这项技术设计之初是为了体现网页的相关性和重要性,在搜索引擎优化操作中经常被用来评估网页优化的成效因素之一.

从技术上看,搜索引擎需要解决以下三个问题:

本质就是一个爬虫问题,通过爬虫获取整个互联网的数据

关键在于快速找到.

它的实现方式有: 倒排索引,签名文件,后缀树等。我们最熟悉的是 倒排索引 。(并不熟悉,以后有机会再看)

排序是Google的搜索引擎能够兴起的一个决定性因素。

对网页排序有很多种方式,我们来看三种:

就是原封不懂地把索引到的链接直接返回给用户,缺点就不说了,想找自己感兴趣的内容估计要费不少功夫。

这种方式是一种只从关键词出现的次数和位置进行排序的方法。该方法以一个关键词与网页的相关度大小作为排序标准,而关键词在网页的相关度大小作为排序标准,而关键词在网页中的相关度则由它在网页中出现的频次和位置两方面加权计算得出。

缺点也很明显,容易出现刷分的情况,整篇文章中大量地刷关键词就能提高排名。

真正找到计算网页自身质量的完美的数学模型是Google的创始人拉里佩奇和谢尔盖布林。 下一节讲一下原理。

我们模拟一个悠闲的上网者,上网者首先随机选择一个网页打开,然后在这个网页上呆了几分钟后,跳转到该网页所指向的链接,这样无所事事、漫无目的地在网页上跳来跳去,PageRank就是估计这个悠闲的上网者分布在各个网页上的概率,这个概率就代表这个网页的重要性.

PageRank主要基于两个重要的假设:

如果一篇文章被越来越多的人引用,那么这篇文章可能就是一篇经典之作,如果这篇文章引用了其他的论文,那么一定程度上这篇被引用的文章也是一篇很好的文章。应用到社交网络中,如果一个好友被更多的人关注,那么说明该好友有很高的知名度和活跃度,那么,我们可以将该好友推荐给用户。

基于这两个假设,我们可以总结出PageRank算法的核心:

如下图,可以更好的表达PageRank算法的思想:

由上图可知,每个页面将自己的一部分rank传递给某个页面,我们可以通过计算传递给某个页面的所有rank值的和来计算出它的rank值,当然,不可能是通过一次计算完成,我们刚开始可以给每个页面赋予一个初始rank值,比如 1/N(N为页面总数) ,通过迭代计算得到该页面的rank值。

迭代计算停止的条件为:

使用有向图表示:

这个例子中只有四个网页,如果当前在A网页,那么悠闲的上网者将会各以1/3的概率跳转到B、C、D,这里的3表示A有3条出链,如果一个网页有k条出链,那么跳转任意一个出链上的概率是1/k,同理D到B、C的概率各为1/2,而B到C的概率为0。

我们在做计算的时候会将该图表示成一个二维的矩阵,我们做一个转换,就会变成下图的矩阵形式。 M(i,j) 表示j节点指向i节点的概率 ,一般来说每列和为1。

生成的 转移矩阵 非常简单, 矩阵的每一列代表该顶点所代表的页面除以对应页面的出链数得到的

有了转移矩阵,我们可以来定义行向量 V V 的第i个分量记录 对应的Rank值,因此一次Rank的更新可以表示为:

在算法的第一轮计算中,我们假设上网者在每一个网页的概率都是相等的,即1/n,于是初试的概率分布就是一个所有值都为1/n的n维列向量 ,用 去右乘转移矩阵M,就得到了第一步之后上网者的概率分布向量 ,得到一个nX1的矩阵 这个 一轮迭代计算出来的PageRank值 。下面是 的计算过程:

得到了 后,再用 去右乘M得到 ,一直下去,即 , 最终V会收敛 .

不断的迭代,最终得到结果.

但是在迭代计算中,我们需要考虑如下两大阻力: Dead End Spider Trap

Dead End就是指一个页面只有入链但是没有出链,这时转移矩阵M的一列为零,导致最后结果为零。这时web不是强连通的,即存在某一类节点不指向别人,如下图的D。这个时候我们的算法就会出问题了,它不满足收敛性了。

为什么不满足收敛性了?

Spider Trap指页面的所有出链都指向自己,这样会使迭代结果中只有自己的页面的Rank值很高。其他页面的Rank值为零。

要克服上面两个问题,我们需要将迭代计算公式做如下转变。我们可以加入一个 随机跳转 机制.

即假设每个页面有很小概率拥有一个指向其他页面的链接。

表现出来就是:其他页面本来传递给一个页面的Rank值需要做一个折扣,作为补偿,可能需要一个页面指向该页面并且传递Rank值给该页面,该跳转的概率为β,因此表达式变为:

其中,N为页面总数; e 为一个N维且各个分量都是1的向量;β通过经验得知一般设为0.15.

此时的计算结果过程为:

有机会再写,先空着

㈡ 三分钟了解算法


数据结构与算法并不只是抽象的概念,学习过后真的可以在日常工作和生活中用起来,花费最少的时衡消间完成更多的工作才是王道。对于算法而言学习门槛就有点高了,无论是看书还是网上各种的教学视频在我们本来就不清楚的情况下引入一堆让人望而止步的名词。

这里个人在网络上找到了一些算法入门的动图,帮助我们能更快的进入状态,产生兴趣并且提升自己能学好的信念。下面开始动图的表演,基础算法之排序算法秀。

https://mp.weixin.qq.com/s/8bTPkPlrW1xCo0GoSvy7Jg

1、冒泡排序


提起算法,无论已经了解了多少算法知识,第一个想起来的一定是它。

(1)算法步骤

(2)动图演示


2、选择排序


选择排序是一种简单直观的排序算法,数据规模越小越好。

1)算法步骤

首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置

再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。

重复第二步,直到所有元素均排序完毕。

(2)动图演示


3、插入排序


最容易理解的算法,想象一下抓了一副扑克,按顺序怎么摆,插入排序的思路就出现了。插入排序是一种最简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。

(1)算法步骤

将第一待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列。

从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位耐漏置。(如果待插入的元素与有序序列中的某个元素相等,则将待插入元素插入到相等元素的后面。)

(2)动图演示


4、归并排序


和选择排序一样,归并排序的性能不受输入数据的影响,但表现比选择排序好的多,代价是需要额外的内存空间。

(1)算法步骤

申请空间,使其大小为两个已经排序序列之和,该空间昌拦烂用来存放合并后的序列;

设定两个指针,最初位置分别为两个已经排序序列的起始位置;

比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置;

重复步骤 3 直到某一指针达到序列尾;

将另一序列剩下的所有元素直接复制到合并序列尾。

(2)动图演示



5、快速排序


处理大数据最快的排序算法之一了。原因不详(是个传说,没有深究)

(1)算法步骤

从数列中挑出一个元素,称为 “基准”(pivot);

重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作;

递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序;

递归的最底部情形,是数列的大小是零或一,也就是永远都已经被排序好了。虽然一直递归下去,但是这个算法总会退出,因为在每次的迭代(iteration)中,它至少会把一个元素摆到它最后的位置去。

(2)动图演示


6、计数排序


计数排序的核心在于将输入的数据值转化为键存储在额外开辟的数组空间中。作为一种线性时间复杂度的排序,计数排序要求输入的数据必须是有确定范围的整数。

(1)动图演示


7、基数排序


基数排序是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。由于整数也可以表达字符串(比如名字或日期)和特定格式的浮点数,所以基数排序也不是只能使用于整数。

动图演示


【原文地址】https://mp.weixin.qq.com/s/8bTPkPlrW1xCo0GoSvy7Jg

php快速排序算法实现的原理及代码详解

算法原理
下列动图来自五分钟学算法,演示了快速排序算法的原理和步骤。
步骤:
从数组中选个基准值
将数组中大于基准值的放同一边、小于基准值的放另一边,基准值位于中间位置
递归的对分列两边的数组再排序
代码实现
function
quickSort($arr)
{
$len
=
count($arr);
if
($len
<=
1)
{
return
$arr;
}
$v
=
$arr[0];
$low
=
$up
=
array();
for
($i
=
1;
$i
<
$len;
++$i)
{
if
($arr[$i]
>
$v)
{
$up[]
=
$arr[$i];
}
else
{
$low[]
=
$arr[$i];
}
}
$low
=
quickSort($low);
$up
=
quickSort($up);
return
array_merge($low,
array($v),
$up);
}
测试代码:
$startTime
=
microtime(1);
$arr
=
range(1,
10);
shuffle($arr);
echo
"before
sort:
",
implode(',
',
$arr),
"\n";
$sortArr
=
quickSort($arr);
echo
"after
sort:
",
implode(',
',
$sortArr),
"\n";
echo
"use
time:
",
microtime(1)
-
$startTime,
"s\n";
测试结果:
before
sort:
1,
7,
10,
9,
6,
3,
2,
5,
4,
8
after
sort:
1,
2,
3,
4,
5,
6,
7,
8,
9,
10
use
time:
0.0009009838104248s
时间复杂度
快速排序的时间复杂度在最坏情况下是O(N2),平均的时间复杂度是O(N*lgN)。
这句话很好理解:假设被排序的数列中有N个数。遍历一次的时间复杂度是O(N),需要遍历多少次呢?至少lg(N+1)次,最多N次。
1)
为什么最少是lg(N+1)次?快速排序是采用的分治法进行遍历的,我们将它看作一棵二叉树,它需要遍历的次数就是二叉树的深度,而根据完全二叉树的定义,它的深度至少是lg(N+1)。因此,快速排序的遍历次数最少是lg(N+1)次。
2)
为什么最多是N次?这个应该非常简单,还是将快速排序看作一棵二叉树,它的深度最大是N。因此,快读排序的遍历次数最多是N次。
您可能感兴趣的文章:PHP快速排序算法实例分析PHP四种排序算法实现及效率分析【冒泡排序,插入排序,选择排序和快速排序】PHP排序算法之快速排序(Quick
Sort)及其优化算法详解PHP递归实现快速排序的方法示例php
二维数组快速排序算法的实现代码PHP常用排序算法实例小结【基本排序,冒泡排序,快速排序,插入排序】PHP快速排序quicksort实例详解

㈣ 怎么学好数据结构与算法,好难啊

李明杰老师:每周一道算法题 通关算法面试课(超清视频)网络网盘

链接: https://pan..com/s/14GZpVf03Mf9E-YnMrrR4Pw

提取码: 5dmc 复制这段内容后打开网络网盘手机App,操作更方便哦

若资源有问题欢迎追问~

㈤ 机器学习有哪些算法

1. 线性回归
在统计学和机器学习领域,线性回归可能是最广为人知也最易理解的算法之一。
2. Logistic 回归
Logistic 回归是机器学习从统计学领域借鉴过来的另一种技术。它是二分类问题的首选方法。
3. 线性判别分析
Logistic 回归是一种传统的分类算法,它的使用场景仅限于二分类问题。如果你有两个以上的类,那么线性判别分析算法(LDA)是首选的线性分类技术。
4.分类和回归树
决策树是一类重要的机器学习预测建模算法。
5. 朴素贝叶斯
朴素贝叶斯是一种简单而强大的预测建模算法。
6. K 最近邻算法
K 最近邻(KNN)算法是非常简单而有效的。KNN 的模型表示就是整个训练数据集。
7. 学习向量量化
KNN 算法的一个缺点是,你需要处理整个训练数据集。
8. 支持向量机
支持向量机(SVM)可能是目前最流行、被讨论地最多的机器学习算法之一。
9. 袋装法和随机森林
随机森林是最流行也最强大的机器学习算法之一,它是一种集成机器学习算法。

想要学习了解更多机器学习的知识,推荐CDA数据分析师课程。CDA(Certified Data Analyst),即“CDA 数据分析师”,是在数字经济大背景和人工智能时代趋势下,面向全行业的专业权威国际资格认证,旨在提升全民数字技能,助力企业数字化转型,推动行业数字化发展。点击预约免费试听课。

阅读全文

与5分钟学算法网站相关的资料

热点内容
winftplinux 浏览:331
推特app界面如何设置成中文 浏览:452
太空工程师转子编程属性 浏览:32
windowscmd关机命令 浏览:342
云桌面只要服务器装一套软件 浏览:247
电脑右键按到什么导致文件夹全屏 浏览:454
我的世界如何制造服务器主城 浏览:365
linuxssh连不上 浏览:297
永宏plc用什么编程电缆 浏览:371
win激活命令行 浏览:886
新手学电脑编程语言 浏览:893
云空间在哪个文件夹 浏览:926
编程游戏小猫抓小鱼 浏览:790
安卓dosbox怎么打开 浏览:774
服务器无影响是怎么回事 浏览:958
比德电子采购平台加密 浏览:203
加密货币400亿 浏览:524
植发2次加密 浏览:44
vc6查看编译的错误 浏览:596
心理大全pdf 浏览:1002