栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

信息检索——可变字节码编码与解码

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

信息检索——可变字节码编码与解码

实验目的:通过实验,使学生掌握索引压缩的可变字节码VB的编码和解码算法。
实验内容:检索系统中的倒排记录表所占空间巨大,因此索引压缩非常关键,可变字节码VB编码利用整数个字节对间距编码和解码,能够在时间和空间上达到一个非常好的平衡点。本实验通过编程实现这个VB的编码和解码过程。
实验要求:
1.VB编码:
输入:倒排记录表
输出:倒排记录表的VB编码
2.VB解码
输入:倒排记录表的VB编码
输出:倒排记录表
编程语言:python

def code(n):#编码
    dp=[bin(n[0])[2:]]
    for c in range(1,len(n)):
        dp.append(bin(n[c]-n[c-1])[2:])
        
    for i in range(len(dp)):
        dp[i] = (7-len(dp[i]) % 7)*'0' + dp[i]  
        tem = list(dp[i])
        count = 0
        for j in range(len(dp[i]) // 7):
            if j == len(dp[i]) // 7 - 1:
                tem.insert(7 * j+count, '1')
            else:
                tem.insert(7 * j+count, '0')
                count += 1
        tem = ''.join(tem)
        dp[i] = tem
    #print("VB编码结果:n",dp)
    return dp
n=[777,17743,294068,31251336]
code(n)

def uncode(dp):#解码
    n=[]
    for i in range(len(dp)):
        tem_list = []
        for j in range(len(dp[i])//8):
            tem_list.append(dp[i][j*8: (j+1)*8])
        tem_list = [tem_list[i][1:] for i in range(len(tem_list))]
        for k in range(len(tem_list[0])):#处理一下前面的几位数字0
            if tem_list[0][k] != '0':
                tem_list[0] = tem_list[0][k:]
                break
        tem = ''.join(tem_list)
        n.append(int(tem, 2))
        if i>0:
            n[i]+=n[i-1]
    print("解码后的倒排记录表:n",n)
    return n
n=[777,17743,294068,31251336]
uncode(code(n))

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/971936.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号