http://hedgezzz.pixnet.net/blog/post/27667546

這裡使用的 hash table 運用在台股代碼 array , 共有 12957 筆資料 , 看要找某一個代碼的 array index

一億次需花多少時間 ?

#include "stringhash.hpp"

using namespace std ;

int main()
{
    FILE* logfp ;
    char filename[128],s[50] ;
    sprintf(filename,"quote.unl") ;
    logfp = fopen(filename,"r") ;

    StringHashTable hashtable(8192) ;

    int iIdx = 0 ;
    while( fgets(s,50,logfp) != NULL)
    {
        char stkid[50] ;
        sscanf(s,"%[^'|']|",stkid) ;
        //printf("(%s)\n",stkid) ;
        hashtable[stkid] = iIdx ;
        ++iIdx ;
    }

    int icnt = 0 ;
    strcpy(s,"62452") ;
    for(int idx=0;idx<100000000;idx++)
    {
        iIdx = hashtable[s] ;
        ++icnt ;
    }

}

 

共花了三秒鐘 ,  所以粗估每秒鐘可完成約 3千3百萬次查詢 !!!!

==========================================

使用 stl 的 unordered_map :

#include <unordered_map>

using namespace std ;

int main()
{
    FILE* logfp ;
    char filename[128],s[50] ;
    sprintf(filename,"quote.unl") ;
    logfp = fopen(filename,"r") ;

    unordered_map<string,int> hashtable ;

    int iIdx = 0 ;
    while( fgets(s,50,logfp) != NULL)
    {
        char stkid[50] ;
        sscanf(s,"%[^'|']|",stkid) ;
        //printf("(%s)\n",stkid) ;
        hashtable[stkid] = iIdx ;
        ++iIdx ;
    }

    int icnt = 0 ;
    strcpy(s,"62452") ;
    for(int idx=0;idx<100000000;idx++)
    {
        iIdx = hashtable[s] ;
        ++icnt ;
    }

}

 計花了 11 secs , 每秒鐘不到 1 千萬次 !!!

 

 

 

創作者介紹
創作者 hedgezzz 的頭像
hedgezzz

hedgezzz的部落格

hedgezzz 發表在 痞客邦 留言(2) 人氣()