雜湊表分為開放定址法和拉鍊法。時間複雜度近似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...