JavaScript解決雜湊碰撞

2021-08-29 04:15:12 字數 1994 閱讀 2437

function hash() 

return total % this.hash.length

} this.put = function(key, value)

this.show = function() : `, this.hash[i]) : ''

} }}

不同鍵值可能得到相同的hash值,如下:

let myhash = new hash()

myhash.put('bc','i am curry')

myhash.put('i am the key...','i am the bucket...')

// 產生hash碰撞

myhash.put('ad','i am kyrie')

myhash.show()

每個對應hash值的hash bucket對應乙個鍊錶(此處用二維陣列模擬),鍊錶中儲存著鍵值對應的json資料,從而獲取不同key時相同hash值情況下的bucket

function hash1() 

this.******hash = function(key)

return total % this.hash.length

} // hash值相同則加入該hash值的鍊錶中

this.put = function(key, value) " : "$"}`

this.hash[pos][index] = json.parse(jsonstr)

} else

let jsonstr = `" : "$"}`

this.hash[pos][index] = json.parse(jsonstr)

} }this.get = function(key) else

index++

}return this.hash[pos][index][key]

}} else

}}

除錯

let myhash1 = new hash1()

myhash1.put('bc','i am curry')

myhash1.put('i am the key...','i am the bucket...')

// 產生hash碰撞

// hash值都為126

myhash1.put('ad','i am kyrie')

console.log(myhash1.hash[126]) //[ , ]

console.log('開鏈法:', myhash1.get('ad')) //開鏈法: i am kyrie

進行線性探測,若發生hash碰撞,則當前key的hash值自增+1尋找空值的索引.

function hash2() 

return total % this.hash.length

} this.put = function(key, value) else

else

}this.hash[pos] = key

this.bucket[pos] = value

} }this.get = function(key)

pos++

} return 'not exist'

}}

除錯:

let myhash2 = new hash2()

myhash2.put('bc','i am curry')

myhash2.put('i am the key...','i am the bucket...')

// 產生hash碰撞

// hash值都為126

myhash2.put('ad','i am kyrie')

console.log('線性探測:',myhash2.get('ad')) // 線性探測: i am kyrie

雜湊表 雜湊函式 雜湊衝突與解決

雜湊表 通過關鍵碼來對映到值的乙個資料結構 雜湊函式 鍵與值對映的乙個對映關係 常用方法 1 直接定址法 f x kx b k b都是常數 一旦確定了雜湊函式,那麼新增 獲取元素都需要通過這個雜湊函式 2 除留餘數法 f x x k k是常數,k m m為儲存位置長度 其他幾種方法 方法名說明 適合...

如何解決雜湊衝突

就不自己寫了,直接貼下吧 看了concurrenthashmap的實現,使用的是拉鍊法.雖然我們不希望發生衝突,但實際上發生衝突的可能性仍是存在的。當關鍵字值域遠大於雜湊表的長度,而且事先並不知道關鍵字的具體取值時。衝突就難免會發 生。另外,當關鍵字的實際取值大於雜湊表的長度時,而且表中已裝滿了記錄...

解決雜湊衝突的方法

在實際的應用中,選取合適的雜湊函式可減少衝突,但衝突是不可避免的。所以我就想給大家說幾種解決雜湊衝突的方法啦 首先就是開放定址法,用這個方法處理衝突的核心思想就是在衝突發生的時候,形成乙個位址序列,順著這個序列挨個去檢查探測,一直等到找到乙個 空 的開放位址。把我們發生衝突的關鍵字值存放到這個 空 ...