題目大意:給定100萬個木頭名稱,相同的為乙個種類,種類不超過1萬,問每個種類出現的概率
解題思路:這題不複雜,簡單排序同類的就扎堆了,然後直接判斷也能卡時間卡過。正解是用hash求解,由於每個名稱最長是30,所以直接用個陣列記錄出現次數也不合適,會mle.那就隨機用某個hash演算法求出對應的hash值,然後對max取餘,會有些衝突,解決衝突的辦法是**vis陣列,如果之前出現過就往後比較,如果沒出現過就好辦。原來hash活用如此簡單,具體見**。
#include #include #include using namespace std;
#define max 11000
struct node arr[max];
int hash,tot;
int n,now,vis[max];;
char wood[100];
unsigned int elfhash(char *str)
} return hash % max;
}int cmp(node a,node b)
int main()
else arr[hash].cnt++;
} sort(arr,arr+max,cmp);
for (int i = max - tot; i < max; ++i)
printf("%s %.4lf\n",arr[i].str,arr[i].cnt * 100.0 / n);
}
資料結構 hash
雜湊表 hash table,也叫雜湊表 是根據鍵 key 而直接訪問在記憶體儲存位置的資料結構。分為兩個步驟 hash函式 通過乙個關於鍵值的hash函式,得到所查詢的資料對映到表中乙個位置。訪問資料 不同的key 經過hash函式 可能計算得到相同的輸出。此時叫做衝突,衝突的資料又成乙個表。一般...
資料結構之hash
hash表 雜湊表 hash table,也叫雜湊表 是根據key而直接進行訪問的資料結構。也就是說,它通過把key對映到表中乙個位置來訪問記錄,以加快查詢的速度。這個對映函式叫做雜湊函式,存放記錄的陣列叫做雜湊表。以資料中每個元素的關鍵字k為自變數,通過雜湊函式h k 計算出函式值,以該函式值作為...
資料結構hash表
看乙個實際需求,google公司的乙個上機題 有乙個公司 當有新的員工來報道時 要求將該員工的資訊加入 id,性別,年齡,住址.當輸入該員工的id時 要求查詢到該員工的 所有資訊.要求 不使用資料庫 盡量節省記憶體 速度越快越好 雜湊表 雜湊 雜湊表 hash table 也叫雜湊表 是根據關鍵碼值...