總結(jié)算法圖解知識(shí)點(diǎn)

二分查找

  • O(log2*n)
  • 有序的元素列表
import math
#導(dǎo)入math
#math.ceil(ˇ?ˇ) 向上取整
#math.floor     向下取整
#math.round  四舍五入
#均返回float型
def binary_search(arr,key):
    head=0
    tail=len(arr)
    middle=int(math.ceil((head+tail)/2))
    while tail>head:
        if arr[middle]==key:
            print "got it at "+str(middle)
            return
        elif arr[middle]<key:
            head=middle+1
        elif arr[middle]>key:
            tail=middle-1
        middle=int(math.ceil((head+tail)/2))
    
arr=[1,2,3,4,5,6,7,8,9]
binary_search(arr,6)
-----output-----
got it at 5

選擇排序

  • O(n^2)
def findSmallest(arr):
    smallest = arr[0]
    smallest_index = 0
    for i in range(1,len(arr)):
        if smallest > arr[i]:
            smallest = arr[i]
            smallest_index = i
    return smallest_index

def select_sort(arr):
    newArr = []
    for i in range(len(arr)):
        smallest = findSmallest(arr)
        newArr.append(arr.pop(smallest))
    return newArr

快速排序

def quicksort(arr):
    if len(arr)<2:
        return arr
    else:
        pivot = arr[0]
        less =[i for i in arr if i<pivot]
        geter = [i for i in arr if i>pivot]
        return quicksort(less)+[pivot]+quicksort(geter)

print quicksort([2,1,3,4,5,6])

廣度優(yōu)先查找

from collections import deque

graph = {}
graph["you"] = ["alice", "bob", "claire"]
graph["bob"] = ["anuj", "peggy"]
graph["alice"] = ["peggy"]
graph["claire"] = ["thom", "jonny"]
graph["anuj"] = []
graph["peggy"] = []
graph["thom"] = []
graph["jonny"] = []
def person_is_seller(person):
    return person[-1] == 'm'

def search(name):
    search_queue = deque()
    search_queue += graph[name]
    searched = []
    while search_queue:
        person = search_queue.popleft()
        if not person in searched:
            if person_is_seller(person):
                print person +" is a mango seller"
                return True
            else:
                search_queue += graph[person]
                searched.append(person)
    return False

search('you')

迪克斯特拉算法

graph = {}
graph["start"] = {}
graph["start"]["a"] = 5
graph["start"]["b"] = 2
graph["a"] ={}
graph["a"]["c"] = 4
graph["a"]["d"] = 2
graph["b"] = {}
graph["b"]["a"] = 8
graph["b"]["d"] = 7
graph["c"] = {}
graph["c"]["fin"] = 3
graph["c"]["d"] = 6
graph["d"] = {}
graph["d"]["fin"] = 1
graph["fin"] = {}
infinity = float("inf")
costs = {}
costs["a"] = 5
costs["b"] = 2
costs["c"] = 9
costs["d"] = 9
costs["fin"] = infinity
partents = {}
partents["a"]="start"
partents["b"] = "start"
partents["c"] = "a"
partents["d"] = "b"
partents["fin"] = None
processed = []

def fine_lowest_cost_node(costs):
    lowest_cost = infinity
    lowest_cost_node = None
    for node in costs:
        cost = costs[node]
        if cost<lowest_cost and node not in processed:
            lowest_cost = cost
            lowest_cost_node = node
    return lowest_cost_node
node = fine_lowest_cost_node(costs)

while node is not None:
    cost = costs[node]
    neightbors = graph[node]
    for n in neightbors.keys():
        new_cost = cost+neightbors[n]
        if costs[n] > new_cost:
            costs[n] = new_cost
            partents[n] = node
    processed.append(node)
    node = fine_lowest_cost_node(costs)
print costs

K鄰近算法

#-*-coding:utf-8-*-
import heapq
from math import sqrt
day = [1,2,3,4,5]
holiday = [0,1]
activity = [0,1]
history_data = {'a':[5,1,0,300],'b':[3,1,1,225],'c':[1,1,0,75],
                'd':[4,0,1,200],'e':[4,0,0,150],'f':[2,0,0,50]}

today = [4,1,0,0]
disposed = {}
for letter,data in history_data.items():
    r = 0
    for i in range(len(data)-1):
        r +=pow(data[i]-today[i],2)
    
    print letter+" : "+ str(r)
    disposed[letter]=r
result = 0
h= heapq.nsmallest(4,zip(disposed.values(),disposed))
for i in h:
    for a in history_data[i[-1]][-1:]:
        print a
        result += a
print result/4.0

二叉查詢樹

class Node():
    def __init__(self,key=-1):
        self.key = key
        self.rnode = None
        self.lnode = None

def insert(root,key):
    if root==None:
        root=Node(key)
    else:
        if key <root.key:
            root.lnode = insert(root.lnode,key)
        elif key >root.key:
            root.rnode = insert(root.rnode,key)
    return root

def query(root,key):
    if root == None:
        print 'no'
        return -1
    elif root.key == key:
        print 'yes'
        return 1
    else:
        if key <root.key:
            return query(root.lnode,key)
        elif key >root.key:
            return query(root.rnode,key)
            
def show(root):
    if root==None:
        return  
    print root.key
    show(root.lnode)
    
    show(root.rnode)

root = Node(3)
insert(root,1)
insert(root,4)
insert(root,2)
query(root,1)
show(root)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市截驮,隨后出現(xiàn)的幾起案子笤喳,更是在濱河造成了極大的恐慌起宽,老刑警劉巖贸宏,帶你破解...
    沈念sama閱讀 206,482評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件渴庆,死亡現(xiàn)場(chǎng)離奇詭異裳涛,居然都是意外死亡咐吼,警方通過(guò)查閱死者的電腦和手機(jī)疫向,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門咳蔚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人搔驼,你說(shuō)我怎么就攤上這事谈火。” “怎么了舌涨?”我有些...
    開封第一講書人閱讀 152,762評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵糯耍,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我泼菌,道長(zhǎng)谍肤,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,273評(píng)論 1 279
  • 正文 為了忘掉前任哗伯,我火速辦了婚禮荒揣,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘焊刹。我一直安慰自己系任,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,289評(píng)論 5 373
  • 文/花漫 我一把揭開白布虐块。 她就那樣靜靜地躺著俩滥,像睡著了一般。 火紅的嫁衣襯著肌膚如雪贺奠。 梳的紋絲不亂的頭發(fā)上霜旧,一...
    開封第一講書人閱讀 49,046評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音儡率,去河邊找鬼挂据。 笑死以清,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的崎逃。 我是一名探鬼主播掷倔,決...
    沈念sama閱讀 38,351評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼个绍!你這毒婦竟也來(lái)了勒葱?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,988評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤巴柿,失蹤者是張志新(化名)和其女友劉穎凛虽,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體篮洁,經(jīng)...
    沈念sama閱讀 43,476評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡涩维,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,948評(píng)論 2 324
  • 正文 我和宋清朗相戀三年殃姓,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了袁波。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,064評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蜗侈,死狀恐怖篷牌,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情踏幻,我是刑警寧澤枷颊,帶...
    沈念sama閱讀 33,712評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站该面,受9級(jí)特大地震影響夭苗,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜隔缀,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,261評(píng)論 3 307
  • 文/蒙蒙 一题造、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧猾瘸,春花似錦界赔、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至揽思,卻和暖如春袜腥,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背钉汗。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工羹令, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留锡宋,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,511評(píng)論 2 354
  • 正文 我出身青樓特恬,卻偏偏與公主長(zhǎng)得像执俩,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子癌刽,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,802評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容