查找表(Lookup table)

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

是啥

wiki定义:

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

翻译一下:

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

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

a736b4a780181abd3c88308b9283a65a.png

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

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

63c162c9fa37af745025942c839ce2fe.png

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

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

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

基本原理就是这!

总结

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

8238841f04d57e484df1ac9febcc359a.png

  • 10
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Simulink的1D查找(1D Lookup Table)是一种在模拟系统中进行数据查找和插值的工具。它常用于根据输入信号的值获取对应的输出值,以便对模型进行控制和调整。 使用1D查找时,需要先创建一个查找对象,可以手动输入数据,或者导入外部数据文件。一般来说,查找的输入信号是一维的,即只有一个变量,例如时间或位置。查找的输出是根据输入信号值查找得到的结果。 在模拟过程中,1D查找会通过线性插值或者阶梯插值的方式获得输入信号对应的输出值。线性插值将根据输入信号的比例关系,在查找中找到最近的两个数据点,并通过线性插值计算出准确的输出值。而阶梯插值则直接将输入信号对应的最近的输出值作为结果。 1D查找也可以具有多个输出端口,适用于多变量的场景。此时,每个输出端口都对应一个查找。这种情况下,查找的输入信号可以是多个变量的组合,例如时间和位置。 通过使用查找,可以简化模型中需要根据不同输入信号值进行参数调整的部分。将这些参数整合到查找中,不仅可以提高模型的可读性,还能够在模拟过程中快速获取正确的输出结果。 总之,Simulink的1D查找是一种用于进行数据查找和插值的工具,通过输入信号的值查找对应的输出值,并可以进行线性插值或者阶梯插值。使用查找可以简化参数调整,提高模型的可读性和模拟的效率。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值