學習札禮 資料結構

2022-09-21 00:39:08 字數 855 閱讀 9902

雜湊表

把-10e9~10e9的數對映為0~10e5,xmodn(要把n設定為第乙個大於的質數,減少衝突)

開放定址法

核心就是先找個乙個位置,如果這個位置上有數就往看下乙個位置,直到找到沒得數的位置。一般把陣列開成原來的2~3倍大小。

const int n=200003,null=0x3f3f3f3f;

int h[n];

int find(int x)// 如果x在雜湊表中,返回x的下標;如果x不在雜湊表中,返回x應該插入的位置

return k;

}

拉鍊法在每個餘數下拉一條鍊錶

int h[n], e[n], ne[n], idx;

// 向雜湊表中插入乙個數

void insert(int x)

// 在雜湊表中查詢某個數是否存在

bool find(int x)

字串雜湊

注意:不能對映成0

核心思想:將字串看成p進製數,p的經驗值是131或13331,取這兩個值的衝突概率低

小技巧:取模的數用2^64,這樣直接用unsigned long long儲存,溢位的結果就是取模的結果

typedef unsigned long long ull;

ull h[n], p[n]; // h[k]儲存字串前k個字母的雜湊值, p[k]儲存 p^k mod 2^64

// 初始化

p[0] = 1;

for (int i = 1; i <= n; i ++ )

// 計算子串 str[l ~ r] 的雜湊值

ull get(int l, int r)

學習資料結構

佇列 queue 先進先出 fifo queue.push為入隊,pueue.shift為出隊,由這兩項組成佇列 棧 stack 後進先出 lifo 順序儲存資料 鍊錶linked list 雙向鍊錶 每個節點有乙個previous指向上乙個節點 迴圈鍊錶 最後乙個節點的next指向頭節點 定義 是...

資料結構學習

什麼是資料結構 對計算機記憶體中的資料的一種安排。資料結構有那些?優缺點?1.陣列 插入快 知道下標 查詢慢,刪除慢,大小固定 2.有序陣列 比無序的查詢塊,刪除和插入慢,大小固定 3.棧 吃多了吐 個人理解 4.佇列 吃多了拉 個人理解 5.鍊錶 插入快,刪除快,查詢慢 6.二叉樹 查詢 插入 刪...

資料結構 Merkle tree學習

學習位元幣的資料結構看到的,原來以為是一種剛出來的資料結構,閱讀了一些文件後才發現這個資料結構是蠻經典的。比如在下小電影的時候也會用到這個東西。用到這個首先要先知道hash,關於hash的原理和生成我不清楚,這個太底層了。一般可以理解是某一些特定的演算法可以為某個檔案生成指定長度的唯一字串,而這個字...