点击上方“小白学视觉”,选择加"星标"或“置顶”重磅干货,第一时间送达

转自机器之心

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

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

项目地址: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 年在印度尼西亚成立。我们可以将这家公司理解为呼叫中心,将消费者与快递和两轮叫车服务连接起来。该公司同时在印度尼西亚、越南、新加坡、泰国和菲律宾都有不少的业务发展。

下载1:OpenCV-Contrib扩展模块中文版教程
在「小白学视觉」公众号后台回复:扩展模块中文教程,即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。下载2:Python视觉实战项目31讲
在「小白学视觉」公众号后台回复:Python视觉实战项目31讲,即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。下载3:OpenCV实战项目20讲
在「小白学视觉」公众号后台回复:OpenCV实战项目20讲,即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。下载4:leetcode算法开源书
在「小白学视觉」公众号后台回复:leetcode,即可下载。每题都 runtime beats 100% 的开源好书,你值得拥有!交流群欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~

学好算法?不花钱好好看这个 GitHub 项目就够了!相关推荐

  1. 双麦克风语音去混响算法C代码实现(附github项目链接)

    1. 算法依据 算法的依据是论文<Multi-Channel Linear Prediction Speech Dereverberation Algorithm Based on QR-RLS ...

  2. 程序员书籍哪里找?有这个GitHub项目就够了

    https://github.com/Rtoax/MoreThanDocs

  3. 几个有趣的Github项目,够你玩一阵了...

    点击上方"后端技术精选",选择"置顶公众号" 技术文章第一时间送达! 来源:开源最前线 今天,给大家整理一份有意思的沙雕项目,顺带分享了我的试用成果,说实话,这 ...

  4. 如何学好算法与程序设计

    如何学好算法与程序设计呢?假如你选择了C语言和对C语言,想要学好C语言,需要把握好以下几点: 1.确立离散性思维方式,摈弃连续性思维方式 在学习计算机语言时,一定要确立离散性的思维方式,这决定着你是否 ...

  5. 算法的本质是什么?程序员如何学好算法?

    这几年来,小灰一直在用漫画的形式分享算法知识,每一次所分享的,都是一个具体的算法知识点. 今天,让我从宏观的角度来讲一讲,算法到底是什么?如何来学好算法. 1. 算法是什么 所谓算法,指的是解决实际问 ...

  6. 这是关于如何学好算法

    这是关于如何学好算法 第一阶段:练经典常用算法,下面的每个算法给我打上十到二十遍,同时自己精简代码,  因为太常用,所以要练到写时不用想,10-15分钟内打完,甚至关掉显示器都可以把程序打  出来.  ...

  7. 毕业设计有哪些可借鉴的 GitHub 项目?

    前几天写了一篇文章:你的毕业设计是 XX 管理系统吗?阅读量挺高的,很多读者还以为是推荐几个亮眼的 GitHub 项目,发现并不是. 今天老逛推荐几个项目,毕业设计可借鉴下面这几个 GitHub 项目 ...

  8. CNN架构复现实战 | 附视频和github项目

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 经常会看到类似的广告<面试算法岗,你被要求复现论文了吗?&g ...

  9. 有趣的Github项目万里挑一 !(附论文、项目链接)

    来源:PaperWeekly 本文共1000字,建议阅读5分钟. 本文为你介绍9个最新机器学习开源项目. 本文带你快速 get 每个精选Github项目的亮点和痛点,时刻紧跟 AI 前沿成果. 01 ...

最新文章

  1. 使用MLX90640自制红外热像仪(一):MLX90640介绍与API库移植
  2. Ext JS 6学习文档-第3章-基础组件
  3. 杭电1978java实现
  4. 2021互联网大厂中秋礼盒哪家强?!
  5. 同学你好,听说你想学习做硬件?
  6. Json串和java对象进行转时
  7. php 创建短地址 (var_export)
  8. 测试先知和启发式方法
  9. 合并多个word的代码_word排版技巧:如何快速按顺序合并多个文档
  10. Faster RCNN代码详解(三):数据处理的整体结构
  11. 百度AI攻略:新闻摘要
  12. 深度学习小白入门教程(一):以英雄联盟为例,爬取你感兴趣图片,构建你自己的数据集
  13. 人工神经网络理论及应用pdf,人工智能的相关书籍
  14. 记一次Process finished with exit code 1 项目异常
  15. 单片机串口连接电脑,USB转TTL线的使用
  16. 练习:对十进制正整数求平方和
  17. 【go】ssa和调用链分析
  18. 为什么我们要坚持写博客?
  19. 嘟嘟牛app算法hook
  20. Acwing活动打卡做题数统计爬虫

热门文章

  1. AI一分钟 | 程维成立滴滴股权投资公司;特斯拉董事会决定放弃私有化
  2. Redis + Tomcat + Nginx 集群实现 Session 共享
  3. NLP入门 | 通俗讲解Subword Models
  4. 2022秋招大战:算法岗挤破头,JAVA开发也被迫内卷
  5. SOTA排行榜大变天!MIT研究十个CV测试集,平均错误率超3.4%
  6. 高中生都在研究神经网络,我这个老师力不从心了
  7. 看着像学生,实为博导、教授!发过4篇CNS,刚刚又获重要大奖
  8. 教育部:不得将研究生当作廉价劳动力!也不得故意拖延毕业时间!
  9. 如何用数学追到完美情人?
  10. NLP入门竞赛,搜狗新闻文本分类!拿几十万奖金!