内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

【自學(xué)筆記001】哈希表(一)-創(chuàng)新互聯(lián)

印象

一個(gè)下標(biāo)由整數(shù)、浮點(diǎn)數(shù)甚至字符串、結(jié)構(gòu)體構(gòu)成的“數(shù)組”。

專業(yè)網(wǎng)站建設(shè)公司網(wǎng)站可以采用ASP、PHP、.NET編程語言及配備的SQL SERVER、MYSQL、ACCESSS數(shù)據(jù)庫存儲來整體開發(fā)及設(shè)計(jì)各類型大中型網(wǎng)站(包括:公司、行業(yè)門戶、醫(yī)院門戶、商城、政府門戶、音樂、視頻、交友、各行業(yè)網(wǎng)站等各種類型網(wǎng)站),我們可以提供從網(wǎng)站開發(fā)、網(wǎng)站設(shè)計(jì)、網(wǎng)站安全維護(hù)及網(wǎng)站托管和網(wǎng)絡(luò)推廣一條龍服務(wù)。打造高端企業(yè)網(wǎng)站設(shè)計(jì)公司,網(wǎng)站開發(fā)周期短,質(zhì)量有保證,設(shè)計(jì)精美,價(jià)格合理。哈希函數(shù)——對應(yīng)關(guān)系的產(chǎn)生

示例

· 對每一個(gè)key,通過映射f得到f(key)作為鍵值對(key, value)的索引,即鍵值對存放在arr[f(key)]上。
例如:將長度為n的字符串s轉(zhuǎn)換為:x = s0· 1270+ s1· 1271+ ··· + sn· 127n,x對264取模得到索引。

哈希沖突

即不同的鍵值轉(zhuǎn)換后得到相同索引的情況。

解決方案一:開散列法

將同一個(gè)索引處的多個(gè)(key, value)用鏈表儲存,查詢時(shí)需要掃描整個(gè)鏈表。注意,每個(gè)存放數(shù)據(jù)的地方都會(huì)開一個(gè)鏈表。c++代碼如下:

const int SIZE = 1000000;
const int M = 999997;
struct HashTable
{//數(shù)組模擬鏈表
	struct Node
	{int next, value, key;
	} data[SIZE];
// head[M] 存放 f(key)=M 的第一個(gè)節(jié)點(diǎn)在 data 數(shù)組里的下標(biāo),即頭結(jié)點(diǎn)的下標(biāo)
	int head[M], size;
//哈希函數(shù)
	int f(int key) {return key % M; }
//查找
	int get(int key)
	{for (int p = head[f(key)]; p; p = data[p]next)
			if (data[p].key == key) return data[p].value;
			return -1;
	}
//修改
	int modify(int key, int value)
	{for (int p = head[f(key)]; p; p = data[p]next)
			if (data[p].key == key) return data[p].value = value;
	}
//添加
	int add(int key, int value)
	{//判斷鍵值對是否已經(jīng)存儲過
		if (get(key) != -1) return -1;
		data[++size] = (Node){head[f(key), value, key};
		head[f(key)] = size;
		return value;
	}
};

另一種封裝好的模板代碼如下:

struct hash_map
{//前向星結(jié)構(gòu)
	struct data
	{long long u;
		int v, nex;
	};
	data e[SZ<< 1];  // SZ 是 const int,表示大小
	int h[SZ], cnt;  //cnt記錄當(dāng)前e中存入鍵值對的個(gè)數(shù)
//哈希函數(shù),用 (u % SZ + SZ) % SZ 是為了將結(jié)果轉(zhuǎn)化為正數(shù)
	int hash(long long u) {return (u % SZ + SZ) % SZ; }
//查找,若找到則返回value,否則返回-1(不太懂這個(gè)函數(shù)的語法)
	int& operator[](long long u)
	{int hu = hash(u);  
		for (int i = h[hu]; i; i = e[i].nex)
			if (e[i].u == u) return e[i].v;
		return e[++cnt] = (data){u, -1, h[hu]}, h[hu] = cnt, e[cnt].v;
}
	hash_map()
	{cnt = 0;
		memset(h, 0, sizeof(h));
	}
};
解決方案二:閉散列法

把所有記錄直接存儲在散列表中,如果發(fā)生沖突則用某種方法(如線性探查法)繼續(xù)探查。代碼如下:

const int N = 360007;

class Hash
{private:
		int keys[N];
		int values[N];
	public:
		Hash() {memset(values, 0, sizeof(values)); }
		int& operator[](int n)
		{	int idx = (n % N + N) % N, cnt = 1;
			while (keys[idx] != n && values[idx] != 0)
			{		idx = (idx + cnt * cnt) % N;
				++cnt;
			}
			keys[idx] = n;
			return values[idx];
		}
	};

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧

分享題目:【自學(xué)筆記001】哈希表(一)-創(chuàng)新互聯(lián)
當(dāng)前網(wǎng)址:http://www.rwnh.cn/article14/epede.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供服務(wù)器托管、做網(wǎng)站、網(wǎng)站建設(shè)品牌網(wǎng)站建設(shè)、網(wǎng)站策劃、建站公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化
三河市| 龙海市| 乐清市| 杨浦区| 高碑店市| 株洲市| 克山县| 体育| 牡丹江市| 北川| 长宁区| 长寿区| 林州市| 金溪县| 张家口市| 宽甸| 兴海县| 桃源县| 吉首市| 乌鲁木齐县| 麻江县| 六安市| 新邵县| 西乡县| 金寨县| 伊金霍洛旗| 九龙坡区| 安福县| 乃东县| 巧家县| 岗巴县| 靖西县| 南靖县| 青阳县| 盈江县| 井陉县| 马公市| 清水河县| 东乡族自治县| 平果县| 谷城县|