原创 基本數據結構——線性結構(列表/無序表)

1.什麼是列表(List)? 一個數據項按照相對位置存放的數據集。特別的,被稱爲“無序表(unordered list)”,其中數據項只按照存放位置來索引,如第1個、第2個…、最後一個等。 如一個考試分數的集合“54,26,93,

原创 算法複雜度評價指標(大o表示法)

大O表示法(1)常見的大o數量級函數(2)其他算法複雜度表示法 基本操作數量函數T(n)的精確值並不是特別重要,重要的是Tn(n)中起決定性因素的主導部分。用動態的眼光看,就是當問題規模增大的時候,T(n)中的一些部分會蓋過其他部

原创 “變位詞”判斷問題及算法複雜度

解法1 逐字檢查 解法思路: 將詞1中的字符逐個到詞2中檢查是否存在,存在就打勾標記(防止重複檢查)。如果每個字符都能找到,則兩個詞是變位詞。只要有一個字符找不到,就不是變位詞。 實現打勾標記:將詞2對應字符設爲None,由於

原创 基本數據結構——線性結構(有序表)

1. 什麼是有序表(OrderedList) 有序表是一種數據項依照其某可比性質(如整數大小、字母表先後)來決定在列表中的位置。越“小”的數據項越靠近列表的頭,越靠“前”。 2.抽象數據類型有序表(OrderedList)定義的

原创 python兩種內置數據類型(列表list和字典dict)上各個操作的大O數量級

python兩種內置數據類型(列表list和字典dict)上各個操作的大O數量級 1.對比list和dict操作 2.list列表數據類型常用操作性能 (1)按索引取值和賦值(v=a[i],a[i]=v) 由於列表的隨機訪問特性

原创 基本數據結構——線性結構(棧)

1.什麼是線性結構 線性結構是一種有序數據項的集合,其中每個數據項都有唯一的前驅和後繼(除了第一個沒有前驅,最後一個沒有後繼)。新的數據項加入到數據集中時,只會加入到原有某個數據項之前或之後。具有這種性質的數據集,就稱爲線性結構。

原创 基本數據結構——線性結構(隊列、雙端隊列)

1. 什麼是隊列? 隊列是一種有次序的數據集合,其特徵是新數據項的添加總髮生在一端(通常稱爲“尾端”),而現存數據項的移除總髮生在另一端(通常稱爲“首front”端)。 新加入的數據項必須在數據集末尾等待,而等待時間最長的數據項則

原创 遞歸(Recursion)及其應用

1. 什麼是遞歸 遞歸是一種解決問題的方法,其精髓在於將問題分解爲規模更小的相同問題,持續分解,直到問題規模小到可以用非常簡單直接的方式來解決。 遞歸問題分解方式非常獨特,其算法方面的明顯特徵就是:在算法流程中調用自身。 2. 遞

原创 數據結構與算法七(數據結構——列表/數組、棧)

1. 數據結構 (1)什麼是數據結構 數據結構是指相互之間存在着一種或多種關係的數據元素的集合和該集合中數據元素之間的關係組成。 簡單來說,數據結構就是設計數據以何種方式組織並存儲在計算機中。 比如:列表、集合與字典都是一種數據

原创 棧和隊列的應用——迷宮問題

給一個二維列表,表示迷宮(0表示通道,1表示圍牆)。給出算法,求一條走出迷宮的路徑。 棧——深度優先搜索(一條路走到黑) 也叫回溯法 思路:從一個節點開始,任意找下一個能走的點,當找不到能走的點時,退回上一個點尋找是否有前途

原创 數據結構與算法四(快速排序、堆排序、歸併排序)

(1)快速排序 快速排序:快 快速排序思路: 取一個元素p(第一個元素),使元素p歸位 列表被p分成兩部分,左邊都比p小,右邊都比p大 遞歸完成排序 快速排序的代碼實現 #歸位函數 def partition(li,left

原创 數據結構與算法一(算法與計算複雜度)

算法:一個計算過程,解決問題的方法 1. 時間複雜度 時間複雜度:用來評估算法運行效率的一個式子(單位) 一般來說時間複雜度高的算法比複雜度低的算法慢。 常見的時間複雜度(按效率排序): O(1)<O(logn)<O(n)<O(n

原创 數據結構與算法三(冒泡排序、選擇排序、插入排序)

排序:將一組“無序”的記錄序列調整爲“有序”的記錄序列(升序與降序) 列表排序:將無序列表變爲有序列表 輸入:列表 輸出:有序列表 內置排序函數:sort() **常見的排序算法有:**冒泡排序、選擇排序、插入排序、快速排序、堆

原创 數據結構與算法六(查找排序練習)

1.給兩個字符串s和t,判斷t是否爲s的重新排列後組成的單詞 s=“anagram”,t=“nagaram”,return true s=“rat”,t=“car”,return false #排序的寫法,時間複雜度爲O(nlog

原创 數據結構與算法五(希爾排序、計數排序、桶排序、基數排序)

(1)希爾排序 希爾排序(Shell Sort)是一種分組插入排序算法 首先取一個整數d1=n/2,將元素分爲d1個組,每組相鄰量元素之間距離爲d1,在各組內進行直接插入排序。 取第二個整數d2=d1/2,重複上述分組排序過程,