c++实现操作系统最坏适应算法_Python,Java,C++一网打尽,这个GitHub项目用多种语言实现经典算法...

机器之心报道

参与:Racoon、Jamin

经典数据结构和算法你了解几个?想去大厂面试?想成为算法工程师?收下这份全面的复习材料。

不想做低级码农,不想成为前端抠图达人或是后台「增删改查」小王子?那你可能需要好好复习下算法与数据结构。想成为算法工程师,基础知识是绕不开的大山。机器之心这次要推荐的项目是数据结构与算法的开源项目集,覆盖多种主流语言,实现各类经典数据结构及算法

c20a50c058e709e185e83136e3dd41ba.png

项目地址:https://github.com/trending

The Algorithms 项目介绍

正如 The Algorithms 项目主页上介绍的那样,这是一个使用多种编程语言,实现经典数据结构与算法的开源项目集。这里的「any Programming Language」真是没有虚假宣传,我们可以看到 The Algorithms 里从较为流行的 Python、Java、C、C++到 C#、Go、Rust、Kotlin 语言应有尽有,当然有的编程语言实现的算法还不是那么的丰富,其中维护较好的还是 Python 和 Java。

15cb04dc0b8c7677de95de0dc6e79111.png

本文以 The Algorithms 的 Python 项目为例进行介绍。

截至目前,该项目已经有 7 万多星,内容涵盖加密算法、图像处理、动态规划、线性代数、经典机器学习算法、搜索算法、排序算法以及各种数据结构等,单是所实现算法的目录就有 600 多行……当然,项目作者也指出,该项目的主要目的是用作各种算法的学习资料,项目中的一些实现可能没有 Python 标准库中的那么高效。

07212f450e2adae4b9718e5773d8dbf0.png

项目地址:https://github.com/TheAlgorithms/Python

部分算法展示

该项目吸引人的地方不单是里面有丰富的算法实现,部分算法还配有相关解释、维基百科链接和交互网页链接。我们选取了其中的部分算法实现进行展示。

排序算法

1. 冒泡排序

cb0cc658dc9f703de1b0190fabda6b06.png

冒泡排序是一种简单的排序算法。它重复地走访要排序的数列,一次比较两个元素,如果它们的顺序错误就将其交换过来。重复以上过程直到没有需要交换的元素,即表示完成排序。该算法名字的由来是越小的元素会经由交换慢慢「浮」到数列的顶端。

算法复杂度:

最坏 O(n^2)

最好 O(n)

平均 O(n^2)

交互网页地址:https://www.toptal.com/developers/sorting-algorithms/bubble-sort

2. 插入排序

0fb7ac85ba24ef680c6210b054c40994.png

插入排序的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上通常采用 in-place 排序,因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。

算法复杂度:

最坏 O(n^2)

最好 O(n)

平均 O(n^2)

交互网页地址:https://www.toptal.com/developers/sorting-algorithms/insertion-sort

3. 归并排序

65b7623db06cef06df4ec08820aa903f.gif

归并排序是建立在归并操作上的一种有效的排序算法,由约翰·冯·诺伊曼首次提出。该算法是采用分治法的一个非常典型的应用,且各层分治递归可以同时进行。

算法复杂度:

最坏 O(n log n)

最好 O(n)

平均 O(n)

交互网页地址:https://www.toptal.com/developers/sorting-algorithms/merge-sort

4. 快速排序

0116d018c15518a9cb969763d1328578.gif

快速排序算法最早由东尼·霍尔提出。使用分治法策略把一个序列分为较小和较大 2 个子序列,然后递归地排序两个子序列。

算法复杂度:

最坏 O(n^2)

最好 O(n log n) 或 O(n)

平均 O(n^2)

交互网页地址:https://www.toptal.com/developers/sorting-algorithms/quick-sort

5. 希尔排序

cfede236eaeac1258c7765f7288a874a.gif

希尔排序也称递减增量排序算法,是插入排序的一种更高效的改进版本,按其设计者希尔(Donald Shell)的名字命名,该算法由 1959 年公布。希尔排序是非稳定排序算法。

算法复杂度:

最坏 O(nlog2 2n)

最好 O(n log n)

平均复杂度取决于步长序列

交互网页地址:https://www.toptal.com/developers/sorting-algorithms/shell-sort

搜索算法

1. 线性搜索算法

2c766038dd435ffddc53e40d4d890734.gif

线性搜索也称为顺序搜索,其使用一个循环按顺序遍历整个数组,将每个元素与正在搜索的值进行比较,并在找到该值或遇到数组末尾时停止。

算法特性:

最坏算法复杂度 O(n)

最好算法复杂度 O(1)

平均算法复杂度 O(n)

最坏空间复杂度 O(1)

2. 二分查找算法

667ae4a88416010954efe79970018164.png

二分查找算法也称折半搜索算法、对数搜索算法,是一种在有序数组中查找某一特定元素的搜索算法。搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组为空,则代表找不到。这种搜索算法每一次比较都使搜索范围缩小一半。

算法特性:

最坏算法复杂度 O(log n)

最好算法复杂度 O(1)

平均算法复杂度 O(log n)

最坏空间复杂度 O(1)

作者简介

该项目作者是位印度籍工程师,对技术开发非常痴迷,并坦言自己是一个非常有「雄心壮志」的小伙,之后想成为一名企业家。从技术角度看,作者对全栈开发、android 开发、深度学习以及区块链等技术都很感兴趣。目前,他已经在 3 家创业公司工作过,并在开发领域积累了 2 年的经验。

257b0e4ddd747fa89181b6361d0cc5b6.png

从过往经历来看,印度小哥的工作经历还是很「丰富多彩」的,从开始将自己定位为软件工程师,到目前在 Gojek 任职产品工程师。

8b582240fc2ca826d3e61deb3a8c00db.png
a56ccd7b1db8441387c7a64594ff2cf0.png

Gojek 是印度尼西亚第一家独角兽公司,于 2010 年在印度尼西亚成立。我们可以将这家公司理解为呼叫中心,将消费者与快递和两轮叫车服务连接起来。该公司同时在印度尼西亚、越南、新加坡、泰国和菲律宾都有不少的业务发展。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
朴素贝叶斯算法是一种基于概率统计的分类算法,它的核心思想是利用贝叶斯定理计算出每个类别的后验概率,然后选择具有最大后验概率的类别作为分类结果。在这个过程中,朴素贝叶斯假设每个特征之间相互独立,也就是说,每个特征对于分类的贡献是独立的。 在Python中,我们可以使用scikit-learn库来实现朴素贝叶斯算法。具体步骤如下: 1.准备数据:将数据集划分为训练集和测试集。 2.训练模型:使用训练集来训练朴素贝叶斯模型。 3.测试模型:使用测试集来测试模型的准确率。 下面是一个简单的朴素贝叶斯分类器的实现示例: ``` from sklearn.naive_bayes import GaussianNB from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split # 加载数据集 iris = load_iris() # 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.3, random_state=0) # 创建朴素贝叶斯分类器对象 gnb = GaussianNB() # 训练模型 gnb.fit(X_train, y_train) # 预测测试集的结果 y_pred = gnb.predict(X_test) # 计算准确率 accuracy = sum(y_pred == y_test) / len(y_test) print("准确率:", accuracy) ``` 这里使用了iris数据集作为示例数据集进行分类。首先,我们使用`train_test_split`函数将数据集划分为训练集和测试集,然后创建一个`GaussianNB`对象,训练模型并使用测试集来测试模型的准确率。最后,我们计算出准确率并将其打印出来。 完整的代码可以在以下链接中找到: https://github.com/Light-City/NaiveBayesClassifier-Python/blob/master/NaiveBayesClassifier.py

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值