美文网首页
No42.检索--自组织线性表

No42.检索--自组织线性表

作者: 赫尔特 | 来源:发表于2019-12-21 20:02 被阅读0次

    线性表在大多数情况下根据关键码值进行排序,再进行检索。但是我们也可以不通过排序,而是估算记录被访问的频率更改记录在线性表中的位置。

    三个估算方法(启发式规则):

    1.\color {red}{计数方法}。类似于LFU(最不经常使用),每当访问一条记录时,若这条记录的访问数大于排在它前面的记录的访问数,这条记录就会在线性表中向前移动。
    缺点:一旦一条记录被访问了很多次,不管将来的访问历史如何,它都会一直在线性表的前面。

    2.\color{green}{移至前端方法(move-to-front)}。类似于LRU(最近最少使用),若找到一条记录,就把它放在线性表的最前面。移至前端方法对访问频率的局部变化能很好地反应,因为当一条记录在一段时间内被频繁访问时,那么在这段时间它会靠近线性表的前端。

    3.\color{orange}{转置方法(transpose)}。若找到一条记录,则把这条记录与它在线性表中的前一条记录交换位置。

    例子:

    假定有八条记录,其关键码值为从A到H,并且最初的排列顺序为:A,B,C,D,E,F,G,H(字母顺序)。当按照下面的字符流对这八条记录进行访问时,上面三种不同的启发式方法分别需要进行多少次比较。
    F D F G E G F A D F G E

    1.按照计数方法,

    第一次:F1 A0 B0 C0 D0 E0 G0 H0
    第二次:F1 D1 A0 B0 C0 E0 G0 H0
    第三次:F2 D1 A0 B0 C0 E0 G0 H0
    第四次:F2 D1 G1 A0 B0 C0 E0 H0
    第五次:F2 D1 G1 E1 A0 B0 C0 H0
    第六次:F2 G2 D1 E1 A0 B0 C0 H0
    第七次:F3 G2 D1 E1 A0 B0 C0 H0
    第八次:F3 G2 D1 E1 A1 B0 C0 H0
    第九次:F3 G2 D2 E1 A1 B0 C0 H0
    第十次:F4 G2 D2 E1 A1 B0 C0 H0
    第十一次:F4 G3 D2 E1 A1 B0 C0 H0
    第十二次:F4 G3 D2 E2 A1 B0 C0 H0
    最后线性表中的记录顺序为:F G D E A B C H
    需要比较的次数为:6+5+1+7+7+3+1+5+3+1+2+4=45

    2.按照移至前端方法,

    第一次:F A B C D E G H
    第二次:D F A B C E G H
    第三次:F D A B C E G H
    第四次:G F D A B C E H
    第五次:E G F D A B C H
    第六次:G E F D A B C H
    第七次:F G E D A B C H
    第八次:A F G E D B C H
    第九次:D A F G E B C H
    第十次:F D A G E B C H
    第十一次:G F D A E B C H
    第十二次:E G F D A B C H
    最后线性表中的记录顺序为:E G F D A B C H
    需要比较的次数为:6+5+2+7+7+2+3+5+5+3+4+5=54

    3.按照转置启发式规则

    第一次:A B C D F E G H
    第二次:A B D C F E G H
    第三次:A B D F C E G H
    第四次:A B D F C G E H
    第五次:A B D F C E G H
    第六次:A B D F C G E H
    第七次:A B F D C G E H
    第八次:A B F D C G E H
    第九次:A B D F C G E H
    第十次:A B F D C G E H
    第十一次:A B F D G C E H
    第十二次:A B F D G E C H
    最后线性表中的记录顺序为:A B F D G E C H
    需要比较的次数为:6+4+5+7+7+7+4+1+4+4+6+7=62

    相关文章

      网友评论

          本文标题:No42.检索--自组织线性表

          本文链接:https://www.haomeiwen.com/subject/qrzgnctx.html