面试官常问十大经典算法排序(用Python实现)

Python050

面试官常问十大经典算法排序(用Python实现),第1张

算法是一种与语言无关的东西,更确切地说就算解决问题的思路,就是一个通用的思想的问题。代码本身不重要,算法思想才是重中之重

我们在面试的时候总会被问到一下算法,虽然算法是一些基础知识,但是难起来也会让人非常头疼。

排序算法应该算是一些简单且基础的算法,但是我们可以从简单的算法排序锻炼我们的算法思维。这里我就介绍经典十大算法用python是怎么实现的。

十大经典算法可以分为两大类:

比较排序: 通过对数组中的元素进行比较来实现排序。

非比较排序: 不通过比较来决定元素间的相对次序。

算法复杂度

冒泡排序比较简单,几乎所有语言算法都会涉及的冒泡算法。

基本原理是两两比较待排序数据的大小 ,当两个数据的次序不满足顺序条件时即进行交换,反之,则保持不变。

每次选择一个最小(大)的,直到所有元素都被输出。

将第一个元素逐个插入到前面的有序数中,直到插完所有元素为止。

从大范围到小范围进行比较-交换,是插入排序的一种,它是针对直接插入排序算法的改进。先对数据进行预处理,使其基本有序,然后再用直接插入的排序算法排序。

该算法是采用 分治法 对集合进行排序。

把长度为n的输入序列分成两个长度为n/2的子序列,对这两个子序列分别采用归并排序,最终合并成序列。

选取一个基准值,小数在左大数在在右。

利用堆这种数据结构所设计的一种排序算法。

堆是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。利用最大堆和最小堆的特性。

采用字典计数-还原的方法,找出待排序的数组中最大和最小的元素,统计数组中每个值为i的元素出现的次数,对所有的计数累加,将每个元素放在新数组依次排序。

设置一个定量的数组当作空桶;遍历输入数据,并且把数据一个一个放到对应的桶里去;对每个不是空的桶进行排序;从不是空的桶里把排好序的数据拼接起来。

元素分布在桶中:

然后,元素在每个桶中排序:

取得数组中的最大数,并取得位数;从最低位开始取每个位组成新的数组;然后进行计数排序。

上面就是我整理的十大排序算法,希望能帮助大家在算法方面知识的提升。看懂之后可以去试着自己到电脑上运行一遍。最后说一下每个排序是没有调用数据的,大家记得实操的时候要调用。

参考地址:https://www.runoob.com/w3cnote/ten-sorting-algorithm.html

Netflix是全球最大的串流影音平台,如此多人追捧的趋势下,又是哪种强大的程序语言,支撑着Netflix的内部运行呢?

而根据Netflix工程师在Netflix Tech Blog揭密,所使用程序语言便是目前最受欢迎的程序语言Python,运用该语言执行跟踪用户使用状况与位置等,上到推荐算法下到内容传递网络CDN,整个内容生命周期全都使用Python确保网络传输内容,拉进与用户的距离。

Netflix工程师还佛心分享,Netflix是如何应用Python,截取出以下几点:

Python加速警报和统计分析工作

CORE团队将Python使用于警报和统计分析工作中,所以当警报系统亮红灯时,就会自动分析1000多个相关信号,找出问题。另外Netflix也另外开发系统,使用Python进行大量的分析公作,以快速交付结果。总而言之,Python通常被Netflix用来自动化任务、数据采撷和清理。

Python设计Demand Engineering

Demand Engineering负责Netflix云计算计算的区域容错转移、流量分配、容量运营和集群效率。而关于这部分Netfli x工程师十分自豪的表示,这些工具主要都是由Python构建的。编排容错转移的服务使用numpy和scipy来执行数值分析,boto3对AWS基础设施进行更改,rq用于运行异步工作负载,我们将其打包在一个Flask API的薄层中。放入bpython shell并进行临时制作的能力已经不止一次挽救了局面。

利用Python来设计个性化算法

Netflix在个性化机器学习基础设施中,广泛使用Python来训练一些关键体验的机器学习模型:先是从推荐算法到图片个性化,再到营销算法。

例如,一些算法使用TensorFlow、Keras和PyTorch来学习深度神经网络,XGBoost和LightGBM来学习梯度提升决策树,或者Python中更广泛的科学堆栈(numpy、scipy、sklearn、matplotlib、pandas、cvxpy等等)。

Python打造信息安全防路网

信息安全方面使用Python为Netflix实现安全自动化、风险分类、自动修复和漏洞识别等目标。并拥有许多成功的Python开源项目,包括Security Monkey(Netflix最活跃的开源项目)。基础设施安全上也利用Python帮助使用Repokid进行IAM权限调整,和帮助Lemur生成。

Python开发内容机器学习,预测收视率

内容机器学习也利用Python开发机器学习模型,来预测所有内容的受众规模、收视率和其他需求指标的核心。

输入 :与用户相关的包含众多特征(feature)的数据:

用户的注册信息(职业、年龄、性别等 显信息),行为信息(使用功能、有效使用时长等 隐信息)。

输出 :推荐给用户的功能列表(根据得分高低排序)

函数 : 传统算法 、 机器学习算法 (Machine Learning)、 深度学习算法 (Deep Learning)

基于流行度的算法非常简单粗暴,类似于各大新闻、微博热榜等,根据VV、UV、日均PV或分享率等数据来按某种热度(加权)排序来推荐给用户。

访问次数 (VV):记录1天内所有访客访问了该网站多少次,相同的访客有可能多次访问该网站,且访问的次数累加。

独立访客 (UV):记录1天内所有访客访问了该网站多少次,虽然相同访客能多次访问网站,但只计算为1个独立访客。

PV访问量 (Page View):即页面访问量,每打开一次页面或者刷新一次页面,PV值+1。

优点:该算法简单,适用于刚注册的新用户

缺点:无法针对用户提供个性化的推荐

改进:基于该算法可做一些优化,例如加入用户分群的流行度进行排序,通过把热榜上的体育内容优先推荐给体育迷,把政要热文推给热爱谈论政治的用户。

基于用户的协同过滤推荐算法 (UserCF):针对目标用户(A),先通过兴趣、爱好或行为习惯找到与他相似的“其他用户”(BCD...),然后把BCD...喜欢的并且A没有浏览过的物品或功能推给A。

基于物品的协同过滤推荐算法 (ItemCF):例如由于我之前看过张艺谋导演的《英雄》这部电影,会给我推荐《红高粱》、《归来》等同导演电影。

1)分析各个用户对物品的评价,通过浏览记录、购买记录等得到用户的隐性评分;

2)根据用户对物品的隐性评分计算得到所有用户之间的相似度;

3)选出与目标用户最相似的K个用户;

4)将这K个用户隐性评分最高并且目标用户又没有浏览过的物品推荐给目标用户。

优点:

基于用户的协同过滤推荐算法是给目标用户推荐那些和他有共同兴趣的用户喜欢的物品,所以该算法推荐较为社会化,即推荐的物品是与用户兴趣一致的那个群体中的热门物品;

适于物品比用户多、物品时效性较强的情形,否则计算慢;

能实现跨领域、惊喜度高的结果。

缺点:

在很多时候,很多用户两两之间的共同评分仅有几个,也即用户之间的重合度并不高,同时仅有的共同打了分的物品,往往是一些很常见的物品,如票房大片、生活必需品;

用户之间的距离可能变得很快,这种离线算法难以瞬间更新推荐结果;   

推荐结果的个性化较弱、较宽泛。

改进:

两个用户对流行物品的有相似兴趣,丝毫不能说明他们有相似的兴趣,此时要增加惩罚力度;

如果两个用户同时喜欢了相同的物品,那么可以给这两个用户更高的相似度;

在描述邻居用户的偏好时,给其最近喜欢的物品较高权重;

把类似地域用户的行为作为推荐的主要依据。

1)分析各个用户对物品的浏览记录;

2)依据浏览记录分析得出所有物品之间的相似度;

3)对于目标用户评价高的物品,找出与之相似度最高的K个物品;

4)将这K个物品中目标用户没有浏览过的物品推荐给目标用户

优点:

基于物品的协同过滤推荐算法则是为目标用户推荐那些和他之前喜欢的物品类似的物品,所以基于物品的协同过滤推荐算法的推荐较为个性,因为推荐的物品一般都满足目标用户的独特兴趣。

物品之间的距离可能是根据成百上千万的用户的隐性评分计算得出,往往能在一段时间内保持稳定。因此,这种算法可以预先计算距离,其在线部分能更快地生产推荐列表。

应用最广泛,尤其以电商行业为典型。

适于用户多、物品少的情形,否则计算慢

推荐精度高,更具个性化

倾向于推荐同类商品

缺点:

不同领域的最热门物品之间经常具有较高的相似度。比如,基于本算法,我们可能会给喜欢听许嵩歌曲的同学推荐汪峰的歌曲,也就是推荐不同领域的畅销作品,这样的推荐结果可能并不是我们想要的。

在物品冷启动、数据稀疏时效果不佳

推荐的多样性不足,形成信息闭环

改进:

如果是热门物品,很多人都喜欢,就会接近1,就会造成很多物品都和热门物品相似,此时要增加惩罚力度;

活跃用户对物品相似度的贡献小于不活跃的用户;

同一个用户在间隔很短的时间内喜欢的两件商品之间,可以给予更高的相似度;

在描述目标用户偏好时,给其最近喜欢的商品较高权重;

同一个用户在同一个地域内喜欢的两件商品之间,可以给予更高的相似度。

(相似度计算:余弦相似度、Jaccard系数、皮尔森相关系数等)

常见经典 ML 分类算法:

逻辑回归 (Logistics Regression)

支持向量机 (SVM)

随机森林 (Random Forest)

提升类算法 (Boosting):Adaboost、GBDT、XGboost

一般处理流程:数据处理 ->特征工程 ->模型选择 ->交叉验证 ->模型选择与模型融合

特征清洗 :剔除不可信样本,缺省值极多的字段不予考虑

特征预处理 :单个特征(归一化,离散化,缺失值补全,数据变换),多个特征(PCA/LDA降维,特征选择)

使用工具 :pandas(python开源库)

模型选择与模型融合 :根据交叉验证得分选择前几名模型,然后进行模型融合(Bagging、Boosting、Stacking)

DL 优势 :ML 中特征工程是十分重要并且要根据行业经验确定,DL 可以自己从数据中学习特征。DL 能自动对输入的低阶特征进行组合、变换,得到高阶特征。对于公司产品应用领域来说,用户的注册信息(职业、年龄、性别等 显信息),行为信息(使用功能、有效使用时长等 隐信息)。这些就可以作为低阶特征输入。

RNN系列 (处理文本数据)

CNN系列 (处理图像数据)

DNN (处理一般性分类)