演算法與資料結構最優解例項總結

2021-09-30 19:55:35 字數 2109 閱讀 2418

1.棧與佇列

1.1 貓狗佇列

新增佇列物件 class petenterqueue     count 為時間戳

----》class dogcatqueue

1.2 漢諾塔 

process(num,lef,middle,right,from,to)

4.2  最小路徑   new 乙個  d[i][j] = min(d[i-1][j] + d[i][j-1]) + m[i][j]

4.3最長公共子串行:

d[i][j]  即str1[0~i]跟str2[0~j]的最長

d[i][j] = max(d[i-1][j], d[i][j-1])

if str1[i] = str2[j]        d[i][j] = max[dp[i-1][j-1]+1 , d[i][j]]

4.4最長公共子串  if(str1[i]==str2[j])   d[i][j] = d[i-1][j-1] + 1

4.5  n 皇后問題

int  record  =  new int[n]

process (0 , record ,n )

public   process( i ,record ,n ){

for j = 0  ;j if (isvalid(i,j,record )){

process( i+1,record,n) //  i+1 是因為再下一行的意思,j+1在j全都遞迴回來之後,再+1

is valid( i , j ,record){

for k if (record[k]==j or   abs(k-i) ==abs(record[k] - j)  )      return false     //同一列  ,或同一斜線    a-i  == b-j

return true 

5.字串問題

變行詞: 用map來count  str1 ,再遍歷str 不斷 map--  ,如果有負則返回

數字字串求和:  num = num*10 +cur        ->  res = res + num  and num =0 (及下次如果是字母,res + 0)

字串轉整數  :  判斷是否大於   2*32 / 10 或者  等於 2*32 /10 但是  後一位 > 2*32 %10 考慮負數則很有趣

-2147483648   2147483647 則轉為負數來處理。

字串匹配問題:

6. 大資料與空間限制

2gb 從20億個整數中找到次數最多的。

2^ 32 = 4,294,967,296     = 43億

假設每個數字都不同 ,則hash  key用32位能解決。假設1個數字20億,也能用32位解決。也就是說一條記錄要4b*2 = 8b

8b *1億   <  8億b   =0.8gb  ,所以  20 *0.8 =16gb    所以分成8份即可,每份 大約就2gb記憶體。是否需要考慮hash的效果,所以取16份?

7. 位操作

swap(a,b)  ->   a = a^b      b = b^a       a = a^b

獲取不同      與b不同就是 a(交換得到a)        與 b(此時已經是a,再次取反)不同就是a 

8.陣列和矩陣

求最短通路

1 1 1  1  1

1 0 1  0   1

1  1 1  0  1

0  0  0  0  1

關鍵在於兩個佇列來記錄走通的位置,然後不斷pop出來,用佇列是因為要寬度優先。比如 (1,3)這個點肯定是直接往右最快,然後另一條迴路到打此點時,發現已經被標記則放棄,這是因為寬度優先,保證了被標記的點必定之前的路徑不大於此時的路徑。

while(){

1.walkup

2.walk down

3.walk left

4. walk right

walk(int pre ,int tor,int toc,int rect ,int map, quer,quec){

到達目的地或者 rect [tor][toc] ==0 或者 map!=0

return

map = pre +1 

quer.add(tor)

quec.add(toc)

資料結構與演算法總結

本教材共十一章 第一章為資料結構與演算法概述,為本書學習基礎和預備知識。資料的邏輯結構是對資料之間關係的描述,有時就把邏輯結構簡稱為資料結構。邏輯結構形式地定義為 k,r 或 d,s 其中,k是 資料元素的有限集,r是k 上的關係的有限集。邏輯結構有四種基本型別 集合結構 線性結構 樹狀結構和網路結...

資料結構與演算法總結

class solution return void bubblesort vector int arr if flag break void selectsort vector int arr if minpos i swap arr minpos arr i void insertsort ve...

資料結構與演算法 排序演算法總結

排序演算法 1 冒泡 對資料的有序性 敏感,一旦排序完成就會 立刻停止,如果待排序的資料是基本有序的,他的排序效率是非常高的。也是實現最簡單的排序,不易出錯,安全性高。2 插入 在已經有序的資料中,新增新的資料,對這個組資料再進行排序比較適合插入排序。3 選擇 是氣泡排序的變種,不是正統的排序方法,...