专栏首页奔跑的键盘侠Python——关于算法与数据结构

Python——关于算法与数据结构

这是奔跑的键盘侠的第94篇文章

去年末啃了一点数据结构的书和视频,感觉收获蛮多的,趁着最近学python刚好学到相关内容,就整理一下分享给大家。

其实一个问题通常有很多种答案和解法,虽说计算机运行速度已经够快了,但是要处理比较非常复杂的问题时,计算时间往往就没有那么乐观了。

比如百度搜索引擎,如果要我们自己做一个的话,你会怎么设计?面对互联网茫茫宇宙数据,如何在比较短的时间内,为客户提供相对满意的搜索结果,这就不是几十行代码就能实现的。就需要运用到高效的算法,下面就简单聊一下算法吧。

1

什么是算法

算法就是解决问题

问题是什么 Problem

我们有什么 Input

我们想要得到什么 Output

尝试最简单的方法 Simple Solution

看看如何改进 Develop Incrementally

是不是很简单的说,的确,算法就是从简到复杂,面对不同的数量级,不断优化自己的代码,举个简单的例子,随机给一个100以内的数字,要用多少次可以猜中(每次都会提示偏大还是偏小,或者猜中),最快捷的方法就是每次从中间的数字猜,不断缩小范围。2的七次方是128,也就是最多7次就可以猜中100以内的数字。

如果你要用其他天马星空的方法去猜,比如从1数到100,最多可能要猜100次。

上述2种方法都能猜中数字,但是孰优孰劣一目了然。这就是算法。

当要猜的数字范围不断变大,比如猜100万以内的数字,折中取数字猜,最多只需要20次即可(2的10次方是1024,20次方刚好100万多一点),如果再用第二种思路去猜,就费劲了。

2

一个常用的计时器函数

#!/usr/bin/env python3.6
# _*_ coding:utf-8 _*_
# __author__: Ed Frey
# DATE: 2019/3/14
from time import clock

def timer(f):
    def _f(*args):
        t0 = clock()
        f(*args)
        return clock() - t0
    return _f

def func(date):
    for i in range(10):
        print(i**3,date)
if __name__ == "__main__":
    time = timer(func)("2019-3-14")
    print(time)

通过上面的timer来运行func函数,就可以直接get到func函数的运行时间。至于timer后面两个括号,第一个是函数名,第二个相应的函数参数,会稍微有点绕哈。

大家以后就可以通过这种方式来检测自己代码运行效率,记得收藏哦!

对于业余码农来讲,如果要有质的飞跃,学习算法和数据结构是必不可少的。这许多年来,虽然我也做过不少脚本、代码,但是如果扪心自问一下,有技术含量吗?微乎其微,能认识到这点,我觉得就很弥足珍贵了。

本文分享自微信公众号 - 奔跑的键盘侠(runningkeyboardhero)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-03-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 月薪25k大牛教你,如何快速入手C++

    我们的事业就是学习再学习,努力积累更多的知识,因为有了知识,社会就会有长足的进步,人类的未来幸福就在于此。

    诸葛青云
  • C/C++的人转Go都说很爽,Java转Go的人,觉得有时候写的很别扭,为啥?

    先说说go语言的来源,算是编程语言里面的富二代了,创始团队本身就是精通多种编程语言的大神,而且背靠着谷歌公司这座大庙,go语言的相比主流的几种编程语言都有明显的...

    程序员互动联盟
  • 生成一个C++对象的成本

    最近两年C用得多了,C++有些生疏,又常常用Python,或者阅读些Java的代码,感觉C的开发者们由于C语言在软件工程上的先天缺陷,导致开发效率不高,所以决定...

    陶辉
  • 在你迷茫时不如学好一门语言(送给大一的学弟学妹)

                           C    C++    JAVA    Pathon       HTML       javasprict   ...

    泰斗贤若如
  • C语言很难吗?学习C语言基本思路与参考书籍

    计算机行业发展非常快,大学里的教育基本都跟不上实际的社会需求。如果你所在的学校还在指定大家使用谭浩强的教材,或使用VC6.0来教大家上机实验,那你不妨看看本文,...

    诸葛青云
  • 世界上最难学的编程语言,C语言只排第三,第一你绝对想不到!

    本次参与最难学编程语言排名的选手我从以上榜单中筛选了10位大家比较熟知的,他们分别是:Java、C、Python、C++、.NET、JavaScript、PHP...

    闫小林
  • Python 为何能坐稳 AI 人工智能 的 头牌语言

    在这里我要明确表个态,对于希望加入到 AI 和大数据行业的开发人员来说,把鸡蛋放在 Python 这个篮子里不但是安全的,而且是必须的。或者换个方式说,如果你将...

    一墨编程学习
  • Java跨语言调用,使用JNA访问Java外部接口

    先说JNI(Java Native Interface)吧,有过不同语言间通信经历的一般都知道,它允许Java代码和其他语言(尤其C/C++)写的代码进行交互,...

    朝雨忆轻尘
  • 你在B站追剧看番,我在B站学编程!

    很多人提到B站,首先想到的就会是二次元或者鬼畜,上个月,我们公众号也发表了一篇关于B站鬼畜视频的文章:大数据解读B站火过蔡徐坤的“鬼畜“区巨头们。

    叫我龙总
  • 设计模式在C语言中的应用–读nginx源码

    市面上的“设计模式“书籍文章,皆针对Java/C++/C#等面向对象语言,似乎离开了面向对象的种种特性,设计模式就无法实现,没有用武之地了。

    陶辉

扫码关注云+社区

领取腾讯云代金券