我想编写一个程序来加载一个包含大量随机类型随机数据的键值存储。假设键值存储支持三种类型(字符串,列表和集合),则存在对于对字符串无效的集合(例如,union)有效的操作。
#define SUBSTR 0 // substring, only on strings
#define SEARCH 1 // search, only on strings
#define PUSH 3 // only on lists
#define ADD 4 // only on sets
#define UNION 5 // only on sets
我正在使用随机操作填充表,但是要确保在正确类型的键上执行这些操作。例如,确保始终对类型为set的键执行union操作。
int optab[100];
optab[0] = ADD
optab[1] = SUBSTR
.
.
.
optab[99] = UNION
对于要执行的每个操作,我可以在我的程序中首次创建密钥时本地记录每个密钥的类型,或者保持遍历密钥空间,直到找到正确类型的密钥。但我也不想这样做。
使用第一个选项时,用于维护细节的结构大小随着新键(和类型)的添加而增长。使用第二个选项,为类型找到正确的密钥所需的时间随着密钥(和类型)的增加而增长。
是否有一种巧妙的方法可以正确匹配类型和操作,而不依赖于键空间的大小或支持的类型数量?
我希望给定一个操作,我可以生成一个随机密钥名称(例如,key90876),其中90876
是正确类型的随机部分。
答案 0 :(得分:1)
如果每个操作仅对一种类型有效,则不需要任何额外的空间或时间 - 您只需根据键入类型将键加载到不同的列表中,每个操作都可以在相应的列表中使用。
如果相同的操作可能适用于多种类型,则没有任何特别“聪明”的方法来执行此操作。这是时空权衡的问题,你应该选择最适合你的方法。随机选择键直到它与操作匹配将起作用,但无法保证在获得正确类型的键之前需要多少次尝试。