社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Git

GitHub 68.8k star的硬核算法教程

Python之禅 • 4 年前 • 358 次点击  
上周末一时兴起做了半个小时的视频号直播,没有准备,没有主题,就是跟大家随性的聊了一会,整体感觉比做自己去视频要轻松很多。

今晚9:30再来一次视频号直播,这次我稍作了一下准备,主题是“读书&写作”,到时欢迎大家来捧场。另外也准备了小礼物,就是下面要介绍的这本算法小抄,这个教程在GiHub将近70k的关注。

这次一共送10本,中奖率很多比在公众号高很多,毕竟视频号直播不会比看公众号的人多。

一张图了解这本书的主要内容
作者是付东来,是微信公众号labuladong的作者,江湖人称Offer收割机,有着多年的刷题经验

书有一点和其他的书不太一样,书中并没有统一编程语言,而是混用了三种最常用的编程语言:Python、C++ 和 Java。


这么做主要是考虑到刷算法题是在养成一种思维模式,不应该局限于具体的编程语言。每一种语言都有缺点,我们到底选择用哪一种语言来解某道题目的根本依据是,解法的思路是否可以避开隐晦的语言特性,做到清晰易懂。

不用担心有的语言你不熟悉,算法根本用不到编程语言层面的技巧,本书会秉持最小化语言特性的原则,只会介绍本书中用到的数据结构和对应的 API,只要你学过任何一门编程语言,很容易就能明白。

例如在“动态规划解题套路框架”章节中,会讲到凑零钱问题,暴力解法就是遍历一棵 N 叉树:
1def coinChange(coins: List[int], amount: int):
2
3    def dp(n):
4        if n == 0return 0
5        if n 0: return -1
6
7        res = float('INF')
8        for coin in coins:
9            subproblem = dp(n - coin)
10            # 子问题无解,跳过
11            if subproblem == -1continue
12            res = min(res, 1 + subproblem)
13        return res if res != float('INF'else -1
14
15    return dp(amount)

这么多代码看不懂怎么办?直接提取框架,这样就能看出核心思路了
1def dp(n):
2    for coin in coins:
3        dp(n - coin)


欢迎大家关注下我的视频号


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/106900
 
358 次点击