前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >查找表(Lookup table)

查找表(Lookup table)

作者头像
Apache IoTDB
发布2020-09-27 10:38:48
4.4K0
发布2020-09-27 10:38:48
举报
文章被收录于专栏:Apache IoTDB

查找表(look-up-table)这个名字很好听,缩写 LUT,听起来很高端,其实是一种很简单高效的索引操作,今天简单介绍一下。

是啥

wiki定义:

a lookup table is an array that replaces runtime computation with a simpler array indexing operation

翻译一下:

查找表就是一个数组,用来替代计算,加速查询的索引操作。

举个例子,以前我们算对数基本都需要计算器,很多时候数学考试不让带计算器,只给你一个表来查,最大的优点就是节约时间。

计算机中很多概念都是来源于生活。因此把这种需要复杂计算的操作提前计算好,保存到一个数组里,用的时候不需要重新计算,直接查表,这就是查找表,典型的以空间换时间。

举一个在数组查询中用到的例子:

首先看第二行,我有一堆01数字的数组,在这个数组上的需要执行一个操作:查看某个位置之前有几个1。没有额外结构时,每次给一个位置,就需要从开头遍历,逐个判断是不是 1,时间复杂度O(N)。

下面引入第一行的查找表。提前将数据按固定长度分组,这里 5 个一组,并计算每组的起始位置之前有几个 1。这样,再给我一个下标 n=11,可以先计算 下取整(n/5)=2 ,然后找到查找表位置为 2 的值为 7,再从原始数组上查找 下标从 2*5=10 到 11位置,共有 1 个 1。这样,总的返回值就是 8 。

通过这样一个简单的查找表,将这个操作的时间降为了常数项。

基本原理就是这!

总结

查找表本质上是用 “预计算+空间” 换取 “时间” 的一种索引技术,效率很高。如果程序中有经常需要重复计算操作,且结果的空间占用不大,可以考虑使用查找表替换掉。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-07-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Apache IoTDB 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档