學習 Python和演算法(一)

2021-09-28 21:29:15 字數 1378 閱讀 2017

本演算法的思想為對於字串s1中的每乙個字元,分別遍歷字串s2中的字元尋找是否有相同的字元,如果有,則該字元匹配,在匹配s1的下乙個字元時,s2中第一次匹配過的字元不參與。

def anagramsolution1(s1, s2):

alist = list(s2)

pos1 = 0

stillok = true

while pos1假設輸入詞中包含n個字元,演算法主要部分在於兩重迴圈,當檢查s1的第1個字元時,需要遍歷s2的n個字元,檢查s1的第2個字元時,需要遍歷s2的n-1個字元……,所以,該兩重迴圈執行的總次數是n+(n-1)+……+1=1/2*n2+1/2,所以其數量級為o(n2)。

本演算法的思想為分別對兩個字串按照字母的順序進行排序,然後一一對比其中每個位置的字元是否相等

def anagramsolution2(s1, s2):

alist1 = list(s1)

alist2 = list(s2)

alist1.sort()

alist2.sort()

pos = 0

match = true

while pos該演算法只有乙個迴圈,彷彿其數量級為o(n),但其中還隱藏了排序演算法在,排序演算法的數量級最大為o(n2),最小為o(nlogn)。無論是何種排序演算法,其執行時間的數量級比o(n)要大,所以本演算法的執行時間的數量級取決於排序演算法。

本演算法的思想為構建乙個26位的計數器,分別表示a~z在字串**現的個數,檢查s1中每個字母出現的次數,遍歷s2,在s2中每出現乙個字母,該字母在26位計數器中相應的位置減1。最後檢查計數器的每一位是否都是0即可。

def anagramsolution3(s1, s2):

c = [0] * 26

for i in range(len(s1)):

pos = ord(s1[i]) - ord('a')

c[pos] = c[pos] + 1

# print(c)

for i in range(len(s2)):

pos = ord(s1[i]) - ord('a')

c[pos] = c[pos] - 1

# print(c)

j = 0

stillok = true

while j<26 and stillok:

if c[j] == 0:

j = j + 1

# print(stillok)

else:

stillok = false

return stillok

在計數比較重,有三個迴圈迭代,前兩個迴圈對字串進行計數,其操作次數均為n,第三個迴圈用於檢查計數器,其操作次數為乙個定值26,所以本演算法執行時間的數量級為o(n)。

python機器學習(一)KNN演算法

k最近鄰 k nearest neighbor,knn 分類演算法可以說是最簡單的機器學習演算法了。它屬於監督學習的一種。它採用測量不同特徵值之間的距離方法進行分類。它的思想很簡單 如果乙個樣本在特徵空間中的k個最相似 即特徵空間中最鄰近 的樣本中的大多數屬於某乙個類別,則該樣本也屬於這個類別。上圖...

Python學習筆記(一) Python介紹和應用

python的設計哲學是 優雅 明確 簡單 python開發者的哲學是 用一種方法,最好是只有一種方法來做一件事 致力於開發效率的最優化 簡潔的語法 內建工具包 無需編譯。由於這種設計觀念的差異,python源 通常被認為比perl具備更好的可讀性,並且能夠支撐大規模的軟體開發。這些準則被稱為 py...

Python演算法學習day2 查詢和排序 一

排序演算法是 資料結構與演算法 中最基本的演算法之一。排序演算法可以分為內部排序和外部排序 內部排序是資料記錄在記憶體中進行排序。而外部排序是因排序的資料很大,一次不能容納全部的排序記錄,在排序過程中需要訪問外存。常見的內部排序演算法有 插入排序 希爾排序 選擇排序 氣泡排序 歸併排序 快速排序 堆...