一道计算机英语题目这是一道关于计算机英语的题目(好象是关于散列函数的~)the following hash table

1个回答

  • 先看1.

    26 38 17 33 48 35 25 共7个数据

    因此装载因子(Load factor)为:7/13 约等于0.54,故选C

    Load factor的计算是:所有数据总量/Hash表的表长

    上述表长应等于(或大于)13,因为采用的Hash函数是key mod 13

    但有点疑问:

    你的题目给出的hash表很不清晰,主要问题是:第一行是不是给全了,貌似应该0,2...12,而不是0..9.第二行数据与第一行地址的对应关系也看不出来.如果只是0..9,那么表长应该是10,装载因子就是:

    Load factor = 7/10 = 0.7 最接近的答案似乎就是D了.

    但根据推断,如果表长为10,地址为0..9的话,

    按照题目所说采用开放地址法线性探测(using open addressing ,liner probing),那么似乎不管以怎样的数据插入顺序,都无法得到26 38 17 33 48 35 25这样的数据顺序.

    所以,1.的答案我认为应该是C.

    再看2.

    由于前面所说,hash表的数据和地址对应关系很不清晰,所以这里只能假定表长为13,地址为0,1,2...12.

    表中38 mod 13 = 12,与它冲突的只有25(25 mod 13 = 12).

    但25已经占据了最右侧的地址,认为这个地址应该就是地址12.

    所以,38是在25之后插入hash表的,它只能从地址0开始找空位置.

    38又在26之后,所以26应该也是在38之前插入hash表的.

    这样,38其实对应的地址应该是1.

    在查找38的时候也是类似的过程,需要比较3次:

    1.根据38的hash值:12,查找地址12,发现不是;

    2.继续到表头找(12已经是表尾了),发现地址0是26,不对;

    3.继续到下一个地址1,发现值为38,于是查找成功.

    因此,应该选C.