雜湊表模板 兩種實現方式

2022-09-19 06:54:09 字數 1032 閱讀 2821

雜湊表分為開放定址法拉鍊法。時間複雜度近似o(1),一般僅進行新增和查詢,一般不刪除(用陣列標記)。

作用是使較大的定義域 對映到乙個較小範圍的集合

離散化是一種保持有序性的特殊雜湊。

拉鍊法:用鄰接表儲存,把e[n]拆成很多個鍊錶。

開放定址法:僅乙個陣列,但長度比輸入長度(目標小集合)大2,3倍。上廁所找坑位一樣,插入時先取模得對映下標k,察看k處是否為空,為空插入,否則k++直到找到空位。查詢時find 取模得下標k,檢視k處是否為目標x,不為空但不是x則k++,為空則x不存在,不為空為x則true。

例題 :

拉鍊法

#include #include using namespace std;  

//拉鍊法

//開槽範圍只需要比輸入範圍大且最好是質數

const int n=100003;

//h[n]是開的槽位,後三個就是單鏈表的內容

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

void insert(int x)

bool find(int x)

return false;

}int main()

}return 0;

}

開放定址法:

#include#includeusing namespace std;

//開放定址法

//n取輸入資料範圍的2,3倍以上,最好是質數可以減少衝突

//null 是定義域之外的數來標記為空

const int n=200003,null =0x3f3f3f3f;

int h[n]; //定義凹槽

int find(int x)

return t; //返回凹槽下標

}int main()

}return 0;

}

模板 離散化實現的兩種方式

第一種 利用結構體實現離散化 這種方法的弊端是無法辨別重複元素 例如 1 2 2 3 3 離散化之後是 1 2 3 4 5 使用時應注意 include using namespace std const int n 5e5 10 int n int b n struct node sort arr...

兩種方式實現checkBox readonly功能

今天在做開發的時候遇到了這樣乙個問題 有乙個checkbox選項是不能被改變的。但是checkbox又是沒有readonly屬性的,這個時候我就想到了另外乙個屬性disabled,但是disabled的物件是不能提交到後台的,所以這個又被排除掉了。想了想,只能新增事件來搞定了。於是在checkbox...

TabHost兩種實現方式

第一種 繼承tabactivity,從tabactivity中用gettabhost 方法獲取tabhost。只要定義具體tab內容布局就行了.package com.example.testtabhost import android.os.bundle import android.view.l...