gpt4 book ai didi

algorithm - 基于输入的高效数据库查找,其中并非所有数字都有意义

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:29:03 26 4
gpt4 key购买 nike

我想根据 10 位数字值进行数据库查找,其中只有前 n 位数字有效。假设没有办法通过查看值来提前确定 n

例如,我收到值 5432154321。相应的条目(如果存在)可能具有键 54 或 543215 或基于 n 介于 1 和 10 之间的任何值。

除了简单地尝试所有 10 种可能性之外,是否有任何有效的方法来匹配这样的字符串?

一些背景

该值来自条形码扫描。条形码是 EAN13 限制流通编号,因此它们具有以下结构:

02[1234567890]C

其中 C 是校验和。 02 和校验和之间的 10 位数字由一个项目标识符和一个项目度量组成。项目标识符后可能有一个校验位。

由于我不能依靠数据来遵守任何单一标准,我希望能够在临时基础上定义特定条形码的结构方式,这意味着 10 位数字的部分我提取,可以是1到10之间的任意长度。

最佳答案

这里只是一些想法:

1)也许将这些数字以相反的形式存储在您的数据库中。如果您有 N = 54321,则将其作为 N = 12345 存储在数据库中。假设 N 是您存储它的列的名称。

当你读到 K = 5432154321 的时候,把这个也反过来,你得到 K1 = 1234512345,现在检查 DB 列 N(假设其值为 P),如果 K1 % 10^s == P,其中 s=floor(Math.log(P) + 1)。注意:floor(Math.log(P) + 1) 是一个公式数字 P > 0 的位数。值 floor(Math.log(P) + 1) 你也可以作为预先计算的存储在数据库中,以便你不需要每次都计算它。

2) 因为这个 1) 有点恶心(但也许是这里 3 个想法中最好的),也许您只是将它们存储在字符串列中并使用'像运营商'。但这是微不足道的,你可能考虑过已经。

3) 或者……你存储的数字是相反的,但你也对于 k=1...10,存储它们所有的残差 mod 10^k。列 1、列 2、...、列 10然后你几乎可以直接比较数字,支票类似于

N % 10 == col1
or
N % 100 == col2
or
...
(N % 10^10) == col10.

虽然仍然不是很优雅(而且不太确定如果适用于您的情况)。


我决定检查我的想法 1)。所以这是一个例子(我是在 SQL Server 中完成的)。

insert into numbers
(number, cnt_dig)
values
(1234, 1 + floor(log10(1234)))


insert into numbers
(number, cnt_dig)
values
(51234, 1 + floor(log10(51234)))

insert into numbers
(number, cnt_dig)
values
(7812334, 1 + floor(log10(7812334)))



select * From numbers

/*

Now we have this in our table:

id number cnt_dig
4 1234 4
5 51234 5
6 7812334 7

*/

-- Note that the actual numbers stored here
-- are the reversed ones: 4321, 43215, 4332187.
-- So far so good.

-- Now we read say K = 433218799 on the input
-- We reverse it and we get K1 = 997812334
declare @K1 bigint

set @K1 = 997812334

select * From numbers
where
@K1 % power(10, cnt_dig) = number

-- So from the last 3 queries,
-- we get this row:
-- id number cnt_dig
-- 6 7812334 7
--
-- meaning we have a match
-- i.e. the actual number 433218799
-- was matched successfully with the
-- actual number (from the DB) 4332187.

所以这个想法 1) 看起来并没有那么糟糕。

关于algorithm - 基于输入的高效数据库查找,其中并非所有数字都有意义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20219010/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com