我得到N个C布尔阵列.我想将这些组织成一个数据结构,允许我尽可能快地执行以下操作:给定一个新数组,如果此数组是任何存储数组的"超集",则返回true.对于超集,我的意思是:如果A [i]对于B [i]为真的每个i都为真,则A是B的超集.如果B [i]为假,那么A [i]可以是任何东西.
或者,就集合而不是数组而言:
将N个集合(每个都有C个可能的元素)存储到数据结构中,这样您就可以快速查找给定集合是否是任何存储集合的超集.
构建数据结构可能需要尽可能长的时间,但查找应该尽可能高效,并且数据结构不能占用太多空间.
我认为这本身就是一个有趣的问题,但对于我真正想要解决的问题,你可以假设如下:
对于O(NC)查找:只需迭代所有数组.但这太慢了.
对于O(C)查找:我在这里有一个很长的描述,但正如Amit在评论中指出的那样,它基本上是一个BDD.虽然这具有很高的查找速度,但它具有指数数量的节点.N和C如此之大,这需要太多空间.
我希望在这个O(N*C)和O(C)解决方案之间,可能有一个不需要指数空间的O(log(N)*C)解决方案.
对于O(sqrt(N)C)查找:将数组存储为前缀trie.查找数组A时,如果A [i] = 0,则转到相应的子树,但如果A [i] = 1 ,则访问两个子树.
我的直觉告诉我,如果你假设存储的数组是随机的,那么这应该使查找O(sqrt(N)C)的(平均)复杂度.但是:1.他们不是,阵列稀疏.2.这只是直觉,我无法证明.
我将尝试这个新想法和BDD方法,看看哪两个最好.
但与此同时,这个问题不会经常发生吗?它没有名字吗?还没有以前的研究吗?我真的觉得我在这里重新发明轮子.
algorithm complexity-theory set time-complexity data-structures
在Java中,我应该如何找到数组元素与特定值K的最接近(或相等)可能的总和?
例如,对于数组{19,23,41,5,40,36}和K = 44,最接近的可能总和是23 + 19 = 42.几个小时以来我一直在努力奋斗; 我对动态编程几乎一无所知.顺便说一下,数组只包含正数.
嘿大家.我有个问题.我正在使用Visual Basic Express,我应该从事务中计算更改.
现在我会使用什么代码?我有一部分工作,但它开始有点混乱.
谢谢.
对于想要了解更多信息的人:
假设我有一美元,我去商店买东西.我必须要求用户输入他们花费的金额,然后计算更改并打印到屏幕上.
然后我应该使用最少数量的季度,硬币和硬币,并将其打印到屏幕上.
任何帮助将不胜感激.