python簡單演算法整理

2022-07-02 23:57:09 字數 3787 閱讀 6699

氣泡排序

def func(alist):

for x in range(1,len(alist)):

for i in range(0,len(alist)-x):

if alist[i] > alist[i+1]:

alist[i], alist[i+1] = alist[i+1], alist[i]

return alist

print(func([1,4,2,3,6,7,8,9,0,5]))

選擇排序

def func(alist):

for x in range(0,len(alist)):

min_num = alist[x]

for i in range(x+1,len(alist)):

if alist[i] < min_num:

alist[i], min_num = min_num, alist[i]

alist[x] = min_num

return alist

print(func([1,4,2,3,6,7,8,9,0,5]))

斐波那契

def func(n):

a = 0

b = 1

alist =

if n <= 2:

return alist

else:

for i in range(n):

a, b = b, a + b

return alist

print(func(9))

二分法

def func(alist, item):

low = 0

high = len(alist)-1

n = 0

while low <= high:

mid = int((low + high)/2)

n += 1

if alist[mid]==item:

return mid

if alist[mid]鍊錶

class node:

def __init__(self, initdata):

self.__data = initdata

self.__next = none

def getdata(self):

return self.__data

def getnext(self):

return self.__next

def setdata(self, newdata):

self.__data = newdata

def setnext(self, newnext):

self.__next = newnext

class sincyclinkedlist:

def __init__(self):

self.head = node(none)

self.head.setnext(self.head)

def add(self, item):

temp = node(item)

temp.setnext(self.head.getnext())

self.head.setnext(temp)

def remove(self, item):

prev = self.head

while prev.getnext() != self.head:

cur = prev.getnext()

if cur.getdata() == item:

prev.setnext(cur.getnext())

prev = prev.getnext()

def search(self, item):

cur = self.head.getnext()

while cur != self.head:

if cur.getdata() == item:

return true

cur = cur.getnext()

return false

def empty(self):

return self.head.getnext() == self.head

def size(self):

count = 0

cur = self.head.getnext()

while cur != self.head:

count += 1

cur = cur.getnext()

return count

if __name__ == '__main__':

s = sincyclinkedlist()

print('s.empty() == %s, s.size() == %s' % (s.empty(), s.size()))

s.add(19)

s.add(86)

print('s.empty() == %s, s.size() == %s' % (s.empty(), s.size()))

print('86 is%s in s' % ('' if s.search(86) else ' not',))

print('4 is%s in s' % ('' if s.search(4) else ' not',))

print('s.empty() == %s, s.size() == %s' % (s.empty(), s.size()))

s.remove(19)

print('s.empty() == %s, s.size() == %s' % (s.empty(), s.size()))

青蛙跳台階

乙隻青蛙一次可以跳上1級台階,也可以跳上2級……它也可以跳上n級。求該青蛙跳上乙個n級的台階總共有多少種跳法。

fib = lambda n: n if n < 2 else 2 * fib(n - 1)

快排

#! /usr/bin/env python

# -*- coding: utf-8 -*-

def quick(list):

if len(list) < 2:

return list

tmp = list[0] # 臨時變數 可以取隨機值

left = [x for x in list[1:] if x <= tmp] # 左列表

right = [x for x in list[1:] if x > tmp] # 右列表

return quick(left) + [tmp] + quick(right)

li = [4,3,7,5,8,2]

print quick(li) # [2, 3, 4, 5, 7, 8]

#### 對[4,3,7,5,8,2]排序

'''[3, 2] + [4] + [7, 5, 8] # tmp = [4]

[2] + [3] + [4] + [7, 5, 8] # tmp = [3] 此時對[3, 2]這個列表進行排序

[2] + [3] + [4] + [5] + [7] + [8] # tmp = [7] 此時對[7, 5, 8]這個列表進行排序

'''

機器學習簡單演算法整理

今天整理了一下簡單的機器學習演算法。打算按照這個提綱學習 實現,不一定按順序,但希望自己每學習乙個都能了解透徹。打算寒假前就仔細研究這塊了。一 regression 回歸 二 基於例項的方法 三 regularazation 正則化方法 四 決策 decison 樹學習 五 bayesian 貝葉斯...

半年簡單演算法整理2

目錄 主體內容 1.最小生成樹 2.最短路演算法 dij 單源最短路演算法 floyd 多源最短路演算法 bellman ford 可處理負權圖,spfa寫法 3.dfs序 快點我!4.二分圖匹配 匈牙利演算法 5.topo排序 判斷有向圖是否存在環 最短路演算法 dijkstra floyd be...

Python語法簡單整理(二)

my tuple 張三 18 70 元組 可以儲存不同型別元素 使用小括號 print my tuple 2 輸出 70 print my tuple.index 18 輸出 1 print my tuple.count 70 輸出 1 single tuple 1 5 print type sin...