演算法基礎第一章

2021-09-25 01:45:35 字數 1080 閱讀 5070

不同常數時間的操作(加或定址運算或位運算)執行時間不一樣

選擇最小的數,放到陣列的第乙個位置

時間複雜度:c*n+c*(n-1)+c*(n-2)+…+c*1

o(n^2), 額外空間複雜度:o(1)

兩兩比較並交換,直到無交換

時間複雜度:o(n^2), 額外空間複雜度:o(1)

左邊序列有序,右邊新加入乙個數,從右往左找到合適的位置插進去。

從0-0有序,0-1有序…到0-n有序

時間複雜度:最差o(n^2),最好:o(n)

無進製相加,性質:

0和任何數異或為這個數

任何數和自己異或為0

滿**換率和結合率

例1、應用swap(交換a,b的值):

a和b不能為同一記憶體位置

a = a^b

b = a^b

a = a^b

例2、陣列中兩個數出現奇數次,其他數都是偶數次

先從左到右異或得到 eor=a^b 不為0

找到某一位eor不為0的位數再選擇性的和原陣列異或,該位為1還是為0把陣列分成了兩個部分。

eor』 ^ eor得到另乙個數。

得到最右側的1: eor & (~eor +1) 與運算自己取反加一
時間複雜度:o(logn)

例1、在有序陣列中找某個數是否存在

例2、在有序陣列中找大於等於某個數最左側的位置

例3、區域性最小值問題

無序陣列中任意兩個相鄰的數不相等,求返回任意乙個區域性最小值。

時間複雜度小於o(n)

自己生成隨機數測試,使用兩種不同方法比較結果是否正確(遞迴和正太規劃、系統函式)。

求陣列的最大值,求解左右兩個子陣列的最大值再比較。

t(n) = 2*t(n/2) + o(1)

master 公式:

所以滿足第一種情況,時間複雜度位o(n),和普通遍歷時間複雜度一樣。

第一章 基礎演算法(一)

題目 給定乙個按照公升序排列的長度為n的整數陣列,以及 q 個查詢。對於每個查詢,返回乙個元素k的起始位置和終止位置 位置從0開始計數 如果陣列中不存在該元素,則返回 1 1 輸入格式 第一行包含整數n和q,表示陣列長度和詢問個數。第二行包含n個整數 均在1 10000範圍內 表示完整陣列。接下來q...

python第一章筆記 第一章 基礎

參與除法的兩個數中有乙個數為浮點數,結果也為浮點數 如 1.0 2,1 2.0,1.0 2.0 python print 1.0 2 結果 0.5 print 1 2.0 結果 0.5 print 1.0 2.0 結果 0.5 整數 整數,計算結果的小數部分被截除,只保留整數部分 不會四捨五入 如 ...

第一章 基礎

1單選 2分 該張量的維度是 1.3688478 1.0125661 0.17475659 0.02224463 正確答案 a你選對了 解析 b tf.tensor 1.3688478 1.0125661 0.17475659 0.02224463 shape 2,2 dtype float32 2...