【GitHub项目推荐--学算法】【转载】

不想做低级码农,不想成为前端抠图达人或是后台「增删改查」小王子?那你可能需要好好复习下算法与数据结构。

想成为算法工程师,基础知识是绕不开的大山。这次要推荐的项目是数据结构与算法的开源项目集,覆盖多种主流语言,实现各类经典数据结构及算法

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

The Algorithms 项目介绍

正如 The Algorithms 项目主页上介绍的那样,这是一个使用多种编程语言,实现经典数据结构与算法的开源项目集。


这里的「any Programming Language」真是没有虚假宣传,我们可以看到 The Algorithms 里从较为流行的 Python、Java、C、C++ 到 C#、Go、Rust、Kotlin 语言应有尽有,当然有的编程语言实现的算法还不是那么的丰富,其中维护较好的还是 Python 和 Java。

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

截至目前,该项目已经有 7 万多星,内容涵盖加密算法、图像处理、动态规划、线性代数、经典机器学习算法、搜索算法、排序算法以及各种数据结构等,单是所实现算法的目录就有 600 多行…… 

当然,项目作者也指出,该项目的主要目的是用作各种算法的学习资料,项目中的一些实现可能没有 Python 标准库中的那么高效。

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

部分算法展示

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

排序算法

1. 冒泡排序

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

算法复杂度:

  • 最坏 O (n^2)

  • 最好 O (n)

  • 平均 O (n^2)

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

2. 插入排序

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

算法复杂度:

  • 最坏 O (n^2)

  • 最好 O (n)

  • 平均 O (n^2)

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

3. 归并排序

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

算法复杂度:

  • 最坏 O (n log n)

  • 最好 O (n)

  • 平均 O (n)

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

4. 快速排序

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

算法复杂度:

  • 最坏 O (n^2)

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

  • 平均 O (n^2)

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

5. 希尔排序

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

算法复杂度:

  • 最坏 O (nlog2 2n)

  • 最好 O (n log n)

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

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

搜索算法

1. 线性搜索算法

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

算法特性:

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

  • 最好算法复杂度 O (1)

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

  • 最坏空间复杂度 O (1) 

2. 二分查找算法

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

算法特性:

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

  • 最好算法复杂度 O (1)

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

  • 最坏空间复杂度 O (1)

作者简介

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

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

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

原文链接:

 太后悔!当初学算法不知道这个神器

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/621615.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

word表格一拖动就往顶部跑而且还拖不下来了以及在表格前增加文字的解决方案

一、word表格一拖动就往顶部跑而且还拖不下来解决方案: 这个表格属性设置问题,解决方法如下: 1、将需要设置的文档打开,在文档里面选中表格,单击鼠标点击表格属性进入。 2、进入表格属性界面之后,在表格…

呼吸道病毒感染后,为何会引发细菌性肺炎?气道和肠道微生物组改变是关键

谷禾健康 病毒-细菌合并或继发感染 引起呼吸道感染的病毒是导致全世界高发病率和死亡率的原因,数十年来通常发生在冬季。在冬天,空气干燥,那些可能含有病毒的飞沫可以在空气中停留更长时间,并可以进一步传播。此外人的免疫力在冬季…

【flink番外篇】16、DataStream 和 Table 相互转换示例

Flink 系列文章 一、Flink 专栏 Flink 专栏系统介绍某一知识点,并辅以具体的示例进行说明。 1、Flink 部署系列 本部分介绍Flink的部署、配置相关基础内容。 2、Flink基础系列 本部分介绍Flink 的基础部分,比如术语、架构、编程模型、编程指南、基本的…

win10使用debug,汇编初学

DOSBox挂载Debug.exe 双击 DOSBox Options.bat 打开配置 或者执行cmd DOSBox.exe -editconf notepad.exe -editconf %SystemRoot%\system32\notepad.exe -editconf %WINDIR%\notepad.exe最后一行增加 mount [盘符] [挂载的工作目录(debug.exe文件夹位置&#xff…

Pandas实战100例 | 案例 17: 处理重复数据 - 删除重复行

案例 17: 处理重复数据 - 删除重复行 知识点讲解 在数据分析过程中,处理重复的记录是一个常见的任务。Pandas 提供了方便的方法来删除重复行,保证数据的准确性和可靠性。 删除所有列重复的行: 使用 drop_duplicates() 方法可以删除 DataFrame 中所有列…

2023年终总结,一路向阳待花期

回望2023,可谓“苦尽甘来终有时,一路向阳待花期”。这一年,经历很多,收获亦很多。 回望2023 2023年最重要的三件事,想聊聊买房、工作、自我提升。 买房: 众所众知,2023楼市整体的情况不甚乐…

计算机三级(网络技术)——综合题(Sniffer抓包分析)

考点内容: DNS域名解析TCP三次握手FTP(文件传输协议)ICMP(Internet控制报文协议):ping、tracertHTTP(超文本传输协议):get、post命令 例题一 下图是校园网某台主机在命令行模式下执行某个命令时用sniffer捕获的数据包。 抓包分析 5~8行为…

使用JGit拉取代码提示未授权not authorized

原因:2021年8月13日后不支持密码登录,需要使用token验证 调用时候需要先去git仓库创建个人令牌 需要在安全中心创建个人token,使用token名称作为账号,使用token作为密码。 另: Github克隆仓库的三种方式对比&#xff…

x-cmd pkg | qrencode - 二维码生成工具

目录 简介首次用户功能特点竞品和相关作品进一步阅读 简介 qrencode 是一个用于生成二维码的命令行工具。它可以将文本、URL、电话号码等信息转换为二维码图像。生成的二维码图像可以保存为图片文件,方便在电子文档、网页、移动应用等各种场景中使用。 它支持的二维…

Redis集群(主从复制)

主从复制:是指将一台 Redis 服务器的数据,复制到其他的 Redis 服务器。 前者称为主节点(master),后者称为从节点(slave),数据的复制是单向的,只能 由主节点到从节点。 可以实现数据备份。即使当其中一台机器宕机其他机器还可以正…

arcgis javascript api4.x加载天地图web墨卡托(wkid:3857)坐标系

效果&#xff1a; 示例代码&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><meta http-equiv&quo…

一、MySQL 卸载

目录 1、软件的卸载准备 2、软件的卸载 方式一&#xff1a;通过控制面板卸载 方式二&#xff1a;通过mysql8的安装向导卸载 1、双击mysql8的安装向导 2、取消更新 3、选择要卸载的mysql服务器软件的具体版本 4、确认删除数据目录 5、执行删除 6、完成删除 3、清理残…

ssm基于web办事大厅政务预约系统+vue论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本办事大厅政务预约系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据…

【OpenMP】 2.3 并行化循环

目录 1、for循环 2、规约 3、for循环中的调度&#xff08;schedule API&#xff09; 3.1 静态调度(static) 3.2 动态调度(dynamic) 调度的选择 1、for循环 前面的示例中&#xff0c;通过创建一组线程并通过线程ID与线程数来人为的定义每个线程需要处理的数据&#xff0c;…

【GitHub项目推荐--6 个吊炸天的后台模板】【转载】

很多程序员都有过接私活的经历&#xff0c;帮别人开发一个网站&#xff1f;写个软件&#xff1f;不少网站都要有一个后台管理系统&#xff0c;而后台管理系统大多数情况下仅仅是管理员在使用&#xff0c;所以不像前台那样需要去定制设计优美的 UI。 一套既美观又方便的后台框架…

国家注册信息安全专业人员十五类CISP证书

国家注册信息安全专业人员&#xff08;Certified Information Security Professiona&#xff0c;简称CISP&#xff09;&#xff0c;是面向党政机关、关键信息基础设施运营单位、各类企事业单位和社会组织以及网络与信息安全企业、测评和咨询服务机构等工作的信息安全人员颁发的…

第 4 课 创建工作空间与功能包

文章目录 第 4 课 创建工作空间与功能包1.工作环境的创建2.ROS功能包的创建 第 4 课 创建工作空间与功能包 消息和服务的创建、发布器和订阅器的编写、服务端和客户端的编写都是基于Ros功能包进行操作的&#xff0c;因此在进行上述操作前&#xff0c;需要先创建工作空间及功能包…

注释的魔力:HTML、JS/jQuery和CSS中的单行与多行注释

HTML注释&#xff1a; 在HTML中&#xff0c;我们使用<!--和-->来创建单行注释。例如&#xff1a; <!-- 这是单行注释 -->而多行注释也类似例如&#xff1a; <!DOCTYPE html> <html><!--这是多行注释这是多行注释这是多行注释--> </html>…

【信息论安全】:信源编码定理

一. 介绍 在点对点的通信中&#xff0c;信源编码定理&#xff08;source coding theorem&#xff09;满足可达性和可逆性。当信道是无噪声时&#xff0c;那么YX&#xff0c;这时就不需要信道编码。但是&#xff0c;信源编码依旧是有效的&#xff0c;可以提高数据传输效率&…

iOS swift UISlider改变进度条的高度和圆形滑块的大小

文章目录 1.改变进度条的高度&#xff08;亲测有效&#xff09;2.改变圆形滑块的大小&#xff08;亲测有效&#xff09; 1.改变进度条的高度&#xff08;亲测有效&#xff09; import UIKitclass CustomSlider: UISlider {// 设置轨道高度var trackHeight: CGFloat 10// 重写…