散列(hash)是常用的算法思想之一,在很多程序中都会有意无意地使用到. 先来看一个简单的问题:给出N个正整数,再给出M个正整数,问这M个数中每个数分别是否在N个数中出现过. 例如N=5,M=3,N个正整数{8,3,7,6,2},欲查询的M个正整数为{7,4,2},于是后者只有7和2在N个正整数中出现过, 而4是没有出现过的. 对于这个问题,最直观的思路是:对每个欲查询的正整数x,遍历所有的N个数,看是否有一个数与x相等.这种 做法的时间复杂度为O(MN),当N和M都很大时,时间复杂度显然太大!…