代码小工蚁的#《算法图解》#学习笔记-C1

代码小工蚁的#《算法图解》#学习笔记-C1

什么是算法

算法是一组完成任务的指令。任何代码片段都可视为算法。
计算机科学的名句:

算法+数据结构=程序

大神的故事:牛B轰轰的存在
算法+数据结构=程序(Algorithms + Data Structures = Programs),
它由瑞士计算机科学家、Pascal之父Nicklaus Wirth(尼克劳斯·埃米尔·维尔特,有译作尼古拉斯·沃斯或尼克劳斯·威茨)提出,此名句是其1976一学术著作的名字。
大神Nicklaus Wirth提出了“结构化程序设计”的概念,他是Pascal、Modula-2等几种编程语言的主设计师!!!
Modula语言中提出了“模块化”、“进程”等概念。
同时他还参与开发了世界上第一个具有图形用户界面的个人计算机系统Alto。[1]

算法使用示例

图算法:计算前往目的地的最短路径
图算法:编写跟踪游戏用户的AI系统
动态规划:编写国际跳棋的AI算法
K最近邻算法:编写推荐系统

猜数游戏玩一玩———我的“心灵感应术”

你在1-100的数字中随便选一个,你最多只要回答我7个问题,我就能“感应”到你心中的数字。

二分查找

简单查找Simple search
二分查找binary search
结论:一般而言,对于包含n个元素的列表,用二分查找最多需要log2n步,而简单查找最多需要n步。
二分查找的速度比简单查找快得多。

代码片断:二分查找

def binary_search(list, item):
    low = 0
    high = len(list) - 1
    while low <= high:
        mid = (low + high) // 2
        guess = list[mid]
        if guess == item:
            return mid
        if guess > item:
            high = mid -1
        else:
            low = mid + 1
    return None

my_list = [1, 3, 5, 7, 9]
print(binary_search(my_list, 7))
print(binary_search(my_list, -1))

相关数学知识:幂与对数[2]
24 = 16
log216 = 4
对数是幂运算的逆运算
以10为底的,叫做常用对数(common logarithm)
以无理数e=2.71828……为底的对数,称为自然对数(natural logarithm)

python中的对数实现:
python算术运算符//(取整除,返回商的整数部分,数据类型可能是整数,也可能是浮点数,取决于运算数据)

python交互环境下使用:

import math
math.log(100)  # 默认是以e为底的自然对数
math.log(100,2)  # 以2为底的对数
math.log2(100)  # 以2为底的对数
math.log(100,10)  # 以10为底的常用对数
math.log10(100)  # 以10为底的常用对数

# 四舍五入处理,round()遵循向偶数舍入,即向最靠近的偶数舍入
round(3.5)  # 3
round(3.6)  # 4
round(2.5)  # 2
round(2.6)  # 3

# 取整处理,返回整数
int(3.5)  # 3
int(-3.5)  # -3
math.floor(3.5)  # 3
math.floor(-3.5)  # -4

# 阶乘n!
math.factorial(5)  # 120
math.factorial(100)  # 长达158位的惊天数字,作者说,太阳都要毁灭

# 太阳的寿命约100亿年,100e8=1e10
life = math.factorial(100)
life_year = life / 1000 /3600 / 24 /365
life_year / 1e10  # 需要多少个太阳呢,哈哈

大O表示法Big O notation

时间复杂度:time-complexity[3]
大O表示法标示出算法的(操作)数量,它能反映出随着数量增加,算法运行时间的变化关系。
大O表示法指出了算法在最糟情况下的运行时间。

五种常见的大O运行时间:
O(logn),对数时间,如:二分查找
O(n),线性时间,如:简单查找
O(n * logn),如:快速排序(速度较快)
O(n2),如:选择排序(速度较慢)
O(n!),如:旅行商问题(非常慢的算法)

(注意:此书log约定以2为底。python默认以e为底的。)

注意:
算法的速度不以秒来衡量,而是指(操作)数量的增长。
当我们谈论算法的速度时,实际上是在说,随着输入数据的增加,算法运行时间将以多快的速度增加。


参考:
[1]Niklaus Wirth的主页,老先生1999年4月已退休。
https://www.inf.ethz.ch/personal/wirth/
http://www.baike.com/wiki/%E5%B0%BC%E5%8F%A4%E6%8B%89%E6%96%AF%C2%B7%E6%B2%83%E6%96%AF

[2]对数的视频教程:
https://www.khanacademy.org/math/algebra2/exponential-and-logarithmic-functions/introduction-to-logarithms/a/intro-to-logarithms

[3]python数据操作的时间复杂度:time-complexity
https://wiki.python.org/moin/TimeComplexity

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,470评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,393评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,577评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,176评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,189评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,155评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,041评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,903评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,319评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,539评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,703评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,417评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,013评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,664评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,818评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,711评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,601评论 2 353

推荐阅读更多精彩内容

  • 查找是在大量的信息中寻找一个特定的信息元素,在计算机应用中,查找是常用的基本运算,例如编译程序中符号表的查找。本文...
    北方蜘蛛阅读 2,884评论 1 4
  • 小鸟在歌唱 鸣声清脆 沉默的树林焕发生机 溪水在歌唱 叮叮咚咚 唤醒了那片沉睡的山谷 夏虫在歌唱 啾啾低语 连成一...
    一叶微岚阅读 1,641评论 28 46
  • 【撒上15:17】撒母耳对扫罗说:“从前你虽然以自己为小,岂不是被立为以色列支派的元首吗?耶和华膏你作以色列的王。...
    义不容迟阅读 1,389评论 0 2
  • 一、电能计量装置分类 运行中的电能计量装置按其所计量电能量的多少和计量对象的重要程度分五类(Ⅰ、Ⅱ、Ⅲ、Ⅳ、Ⅴ)进...
    木垚一夕阅读 13,801评论 0 0