一、Hacker rank

hacker rank上有很多算法题,难度从低到高,除此之外,还有各种算法和数据结构(甚至是SQL)的题。你可以直接在上面编写代码,直接运行并查看结果,还可以查看评论看看看其他人都是如何解题的。

网站地址:https://www.hackerrank.com/
image.png
图1. Hacker rank网站

二、TopCoder

TopCoder是最早的程序设计比赛网站之一,其中就有算法挑战赛,你可以使用其代码编辑器在线进行操作。 单轮比赛每月在特定时间进行几次,编码员相互竞争,根据分数和解题时间排名。
image.png
图2. TopCoder网站

在TopCoder上排名靠前的用户都是非常优秀的程序员,并且是经常参加各种编程竞赛的人。排名最高的人将拥有自己的博客,在那里他们可以写有关编程竞赛、算法、数学等所有他们想和大家分享的东西。

网站地址:https://www.topcoder.com/challenges/

三、Geekforgeeks

如果你在执行算法时遇到难题,在Google上搜索解决方案时,你可能会经常看到以下页面。
image.png
图3. Geekforgeeks网站

这个页面说实话看起来有点丑,分类也不是很好,但是,它有许多常见算法练习的解决方案。每个解决方案包括许多不同的方法,以及每种方法的复杂性,这是一种非常有帮助的网站。

网站地址:https://practice.geeksforgeeks.org/

四、Daily Coding Problem

image.png
图4. Daily Coding Problem网站

和其他网站不同的是,Daily Coding Problem上面没有习题列表,但是,如果你输入自己的电子邮箱,他会每天向你发送一种算法面试题给你尝试解答。题型同样也根据难易程度划分,Amazon / Google等公司的一些面试题就出自这里,假如你购买了高级套餐,就会获得解决方案。

网站地址:https://www.dailycodingproblem.com/

五、Exercism.io

如果说以上网站是让你刷算法题的网站,那么Exercism就是让你学习编程的好地方。
image.png
图5. Exercism.io网站

尽管Exercism.io上面也有很多习题,但这些练习并不侧重于算法,而是侧重于编程语言的某一方面:

  • 使用if / else循环
  • 日期处理,字符串处理
  • 如何处理错误,编写异步代码等

我使用此网站来了解有关Golang和Elixir的更多信息,如果你已经编程了一段时间,想学习一种新的语言,学习一种新的思维方式,那就去Exercism.io吧!

网站地址:https://exercism.io/

六、Data Structure Visualization

一个数据可视化和算法可视化的网站,用它可以生成各种各样的数据结构,模拟它们添加和删除的过程,而且还可以用它来演示算法的执行过程。

内容演示:比如,我们用它来模拟一个二叉搜索树,如下图所示:
微信图片_20200805145834.gif
图6. Data Structure Visualization网站
网站特点:Data Structure Visualizations 包含了很多的内容,如:常见的数组、链表、队列、二叉搜索树、红黑树、各种排序等。

网站地址:https://www.cs.usfca.edu/~galles/visualization/Algorithms.html

七、VisuAlgo

我们都知道,在人体的直接感官体验上,动画与图形相对于文字代码往往能带来更有冲击感的视觉效果,也更容易加深大脑对某项事物的认知程度。

而像算法这类,拥有完整逻辑推理计算链条的知识,用动画来展示是再好不过了。

说到这里,便不得不提到那个非常经典的算法可视化网站:VisuAlgo
image.png
图7. VisuAIgo网站
该网站由 Steven Halim 博士推行建立,其初衷是为了帮助新加坡国立大学的学生们,更好的理解数据结构与算法,并进一步强化对各项知识点的吸收。

到了今天,这个网站已被越来越开发者所知晓,并拿来作为学习算法的辅助工具。

网站里面包含了排序链表哈希表二叉搜索树递归树循环查找等常见算法动画,而部分高级算法,现今也只能在 VisuAlgo 上找到具体的动画展示效果。

image.png
图8. 具体算法展示

在动画执行的过程中,还会在网站右下角高亮显示当前动画的代码逻辑。下面我以最为经典的冒泡排序算法为例,给大家做下展示:
1.gif
图9. 冒泡算法排序

不仅于此,该网站还提供了一些算法练习题供学生训练,以便更进一步巩固自己的算法知识。

令人称赞的是,这些问题都是可以直接通过系统自动生成与评测的。问题通过一些规则随机产生,学生答案提交后后台服务器会自动评测。据网站管理员透露,类似这种在线评测系统,已被世界各校的 CS 讲师采用,仅通过设置系统的在线测验权重,便能很快了解学生的算法掌握程度。

当前网站上共提供 12 个可视化算法模块的问题测验,剩余 8 个可视化模块正在研发中,相信未来 VisuAlgo 的每个可视化模块都能拥有在线测验组件。
image.png
图10. 模块展示

由于 VisuAlgo 的使用人群足够广,地理位置跨度大,因此平台管理员也很贴心的添加了各个国家的语言,这其中便包含了中文。所以,英语能力不太好的同学也无需担心,直接撸起袖子举手手,干就完事儿了。

网站地址:https://visualgo.net/zh

八、algorithm-visualizer

此网站也支持很多算法,并且此网站提供算法的具体代码实现,它支持的语言有:Java,C++,JS 等,还有控制台也会输出整个执行的过程,能帮你更好的理解算法,如下图所示:
image.png
图11. algorithm-visualizer网站展示
内容演示:我们用它来演示一下冒泡排序的执行过程,如下图所示:
微信图片_20200805150041.gif
图12. 冒泡排序
网站地址:https://algorithm-visualizer.org/

九、Github算法项目介绍

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

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

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

网站地址:https://github.com/TheAlgorithms

十、总结

有了这些可视化工具之后,我们就可以更简单的学习算法了,这三个网站各有春秋.

可以使用 Data Structure Visualizations 来了解数据结构,使用 VisuAlgo 和 algorithm-visualizer 来查看算法的具体执行过程,并使用 algorithm-visualizer 来查看算法的具体实现代码,真是非常方便。