記得有一次面試題目:求一中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範圍內所有的素數輸出。兩個數之間用空格隔開 樣例輸...