0
我決定我會嘗試讓我自己的HashMap(here)性能改進我的HashMap的執行
對於讀取它比標準庫的實現慢28%,我不知道是否有可能加快以下代碼,指數()其是用於查找關鍵:
const numOnes = uint8(20)
const ones = uint32(1 << numOnes - 1)
func (m *Map) Index(num uint64) uint32 {
part := uint32(num) & ones
remaining := num >> numOnes
start := m.starts[part]
bitsNum := m.bitNums[part]
matchedBits := bitsNum & uint16(remaining)
offset := BitScoreCache[bitsNum][matchedBits]
return start + uint32(offset)
}
音符BitScoreCache是var BitScoreCache [5000][5000]uint16
這應該是隻讀的,多個不同的地圖實例之間共享。
用法示例:
func (pa PrimeAdvancedAnagrammar) GetAnagrams(word string) []string {
return pa.m[pa.locator.Index(PrimeProduct(word))] //pa.m is an [][]string
}
與標準庫:
func (pba PrimeBasicAnagrammar) GetAnagrams(word string) []string {
return pba.m[PrimeProduct(word)] //pba.m is a map[uint64][]string
}
主要有哪些原因,它比爲這麼幾個操作標準庫慢?
https://www.youtube.com/watch?v=Tl7mi9QmLns –
那麼,內置映射的實現對Go非常重要,因此它經過了大量優化。優化某些東西是一個難題。例如。你的BitScoreCache非常大,查找內存不友好(這可能是一個瓶頸,雖然看起來很無辜)。 – Volker
由於此問題屬於另一個站點,所以無法正常工作:[codereview](http://codereview.stackexchange.com/) – icza