快速查詢大量資料的hash table

2021-04-13 09:23:20 字數 1497 閱讀 4359

記得有一次面試題目:求一中rgb值最多的那個值,當時我將rgb作為索引,將這個rgb值出現的次數作為值放到std::map中,百萬級的資料插入顯得有些慢,感覺不好,前些日子我要處理100w條資料,使用的hash_table,對hash_table有所研究,今天針對這個題目花了1個多小時又寫了乙個hash_table,將一中的所有rgb中插到hash_table,查詢速度在毫秒級,很適合處理百萬組的資料

標頭檔案:

struct hashfun

;_itoa(nval, szval, 10);

const char* psz = szval;

unsigned long _hash = 0;

for (; *psz != 0; ++psz)

return _hash;}};

struct tablenode

;struct boxvec

;class cmyhastable 

inline dword getboxindex(dword key, int nnewbox) const

private:

tablenode* find(tablenode node);

void increaselevel();

void switchlevel(int nnewlevel);

void upboxmaxcount(int nindex);

};.cpp檔案

cmyhastable::cmyhastable(const int* pboxsize, int nboxcount, int nlevel)

cmyhastable::~cmyhastable()

}delete m_pboxs;

}void cmyhastable::insert(int nvale)

else

int cmyhastable::findmaxcount()

}return m_pboxs[nindex].nval;

}void cmyhastable::upboxmaxcount(int nindex)

p = p->pnext;

}m_pboxs[nindex].nmaxnum = nmax;

m_pboxs[nindex].nval = q->nvalue;

}tablenode* cmyhastable::find(tablenode node)

p = p->pnext;

}return null;

}void cmyhastable::increaselevel()

void cmyhastable::switchlevel(int nnewlevel)

}m_nhight = m_nbox = m_pboxsize[m_nlevel];

m_nlow = m_nlevel > 0 ? m_pboxsize[m_nlevel - 1]/2 : 0;

delete m_pboxs;

m_pboxs = pnewboxs;

}

快速查詢演算法

在日常的演算法中,查詢是乙個經常涉及到的話題,而如何提高查詢的速度,也是很多程式設計師 軟體研究的話題。先看乙個例子。有這樣乙個資料型別s 學生姓名 name 性別 年齡 age 現在假設有這樣乙個需求 檔案a b中分別存放大量s 的記錄,需要將a b中重複的記錄去掉。我們用c 來演示今天的話題 t...

快速查詢素數

題目 時間限制 1000 ms 記憶體限制 65535 kb 難度 3 描述 現在給你乙個正整數n,要你快速的找出在2.n這些數裡面所有的素數。輸入給出乙個正整數數n n 2000000 但n為0時結束程式。測試資料不超過100組 輸出將2 n範圍內所有的素數輸出。兩個數之間用空格隔開 樣例輸入 5...

快速查詢素數

快速查詢素數 時間限制 1000 ms 記憶體限制 65535 kb 難度 3 描述現在給你乙個正整數n,要你快速的找出在2.n這些數裡面所有的素數。輸入給出乙個正整數數n n 2000000 但n為0時結束程式。測試資料不超過100組 輸出將2 n範圍內所有的素數輸出。兩個數之間用空格隔開 樣例輸...