gpt4 book ai didi

data-structures - 与布隆过滤器相反?

转载 作者:行者123 更新时间:2023-12-03 01:19:14 26 4
gpt4 key购买 nike

我正在尝试优化一个基本上运行数百万次测试的软件。这些测试的生成方式可以有一些重复。当然,如果我可以有效地避免它,我不想花时间运行我已经运行过的测试。

所以,我正在考虑使用布隆过滤器来存储已经运行的测试。然而,布隆过滤器对我来说是不安全的。它会产生误报。也就是说,它可能会报告我已经运行了一项我没有运行的测试。虽然这在我正在研究的场景中是可以接受的,但我想知道是否有与布隆过滤器等效的东西,但在相反的方面犯了错误,即只给出假阴性。

我浏览了一下文献,但没有任何运气。

最佳答案

是的,有损哈希表或 LRUCache 是一种具有快速 O(1) 查找的数据结构,只会给出假阴性 - 如果您询问“我是否运行测试 X”,它会告诉您"is" ,你肯定有”,或者“我不记得了”。

请原谅极其粗糙的伪代码:

setup_test_table():
create test_table( some large number of entries )
clear each entry( test_table, NEVER )
return test_table

has_test_been_run_before( new_test_details, test_table ):
index = hash( test_details , test_table.length )
old_details = test_table[index].detail
// unconditionally overwrite old details with new details, LRU fashion.
// perhaps some other collision resolution technique might be better.
test_table[index].details = new_test_details
if ( old_details === test_details ) return YES
else if ( old_details === NEVER ) return NEVER
else return PERHAPS

main()
test_table = setup_test_table();
loop
test_details = generate_random_test()
status = has_test_been_run_before( test_details, test_table )
case status of
YES: do nothing;
NEVER: run test (test_details);
PERHAPS: if( rand()&1 ) run test (test_details);
next loop
end.

关于data-structures - 与布隆过滤器相反?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/635728/

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