Tag: algorithm

从多个列表中生成所有组合

给定未知数量的列表,每个列表的长度都不知道,我需要用所有可能的独特组合来生成一个单独的列表。 例如,给出以下列表: X: [A, B, C] Y: [W, X, Y, Z] 那么我应该能够产生12种组合: [AW, AX, AY, AZ, BW, BX, BY, BZ, CW, CX, CY, CZ] 如果添加了第三个元素的列表,我会有36个组合,依此类推。 任何想法,我怎么能在Java中做到这一点? (伪代码也可以)

从集合中挑选一个随机子集的最佳方法?

我在Vector中有一组对象,我想从中select一个随机子集(例如,返回100个项目,随机选取5个)。 在我第一次(非常草率)的传球中,我做了一个非常简单的或者是非常聪明的解决scheme: Vector itemsVector = getItems(); Collections.shuffle(itemsVector); itemsVector.setSize(5); 虽然这有好处和简单的好处,我怀疑它不会很好地扩展,即Collections.shuffle()至less必须是O(n)。 我不太聪明的select是 Vector itemsVector = getItems(); Random rand = new Random(System.currentTimeMillis()); // would make this static to the class List subsetList = new ArrayList(5); for (int i = 0; i < 5; i++) { // be sure to use Vector.remove() or you may get the same item […]

从数组中获得最小值或最大值的最佳方法是什么?

假设我有一组数字: [2,3,3,4,2,2,5,6,7,2] 在数组中find最小值或最大值的最佳方法是什么? 现在,为了获得最大值,我循环访问数组,如果variables大于现有值,则将其重置为该值: var myArray:Array /* of Number */ = [2,3,3,4,2,2,5,6,7,2]; var maxValue:Number = 0; for each (var num:Number in myArray) { if (num > maxValue) maxValue = num; } 这似乎不是执行此操作的最佳方法(尽可能避免出现循环)。

删除string中的分隔符之间的文本(使用正则expression式?)

考虑要求find匹配的一组字符,并删除它们之间的任何字符, 以及那些字符/分隔符。 以下是一组分隔符: [] square brackets () parentheses "" double quotes '' single quotes 这里有一些应该匹配的string的例子: Given: Results In: ——————————————- Hello "some" World Hello World Give [Me Some] Purple Give Purple Have Fifteen (Lunch Today) Have Fifteen Have 'a good'day Have day 以及一些不应该匹配的string示例: Does Not Match: —————— Hello "world Brown]co[w Cheese'factory 如果给定的string不包含一组匹配的分隔符,则不会修改。 inputstring可能有许多匹配的分隔符对。 如果一组2个分隔符重叠(即he[llo "worl]d" )),那么这将是一个我们可以忽略的边界情况。 […]

我在哪里可以得到一个“有用的”C ++二进制searchalgorithm?

我需要一个与C ++ STL容器兼容的二进制searchalgorithm,就像标准库的<algorithm>标题中的std::binary_search ,但是我需要它返回指向结果的迭代器,而不是一个简单的布尔值来告诉我如果元素存在。 (在旁注中,当他们为binary_search定义API时,标准委员会在想什么?) 我主要关心的是,我需要二进制search的速度,所以虽然我可以用其他algorithmfind数据,但是我想利用这个事实:我的数据被sorting以获得二进制的好处search,而不是一个线性search。 到目前为止,如果数据丢失, lower_bound和upper_bound失败: //lousy pseudo code vector(1,2,3,4,6,7,8,9,0) //notice no 5 iter = lower_bound_or_upper_bound(start,end,5) iter != 5 && iter !=end //not returning end as usual, instead it'll return 4 or 6 注意:只要与容器兼容,我也可以使用不属于std命名空间的algorithm。 就像boost::binary_search 。

在string中查找最长的重复序列

我需要find一个string中最长的序列,必须重复三次或更多次。 所以,例如,如果我的string是: fdwaw4helloworldvcdv1c3xcv3xcz1sda21f2sd1ahelloworldgafgfa4564534321fadghelloworld 那么我想要返回值“ helloworld ”。 我知道一些方法来完成这个,但我面临的问题是,实际的string是荒谬的大,所以我真的在寻找一种方法,可以及时做到这一点。

find总和为特定值的所有子集

给定一组数字:{1,3,2,5,4,9},求出总和为一个特定值的子集数(例如,在这个例子中为9)。 这与子集和问题类似,只是略有不同,不是检查集合是否具有总和为9的子集,我们必须find这样的子集的数量。 我在这里遵循子集总和问题的解决scheme。 但是,我想知道如何修改它以返回子集计数。

从链表中有效地select一组随机元素

说我有一个长度为N的数字的链表。 N很大,我不知道N的确切值。 我怎样才能最有效地写一个函数,将从列表中返回k完全随机数字 ?

find两个大于或等于给定值的最小幂的algorithm

我需要find两个大于或等于给定值的最小幂。 到目前为止,我有这样的: int value = 3221; // 3221 is just an example, could be any number int result = 1; while (result < value) result <<= 1; 它工作正常,但感觉有点天真。 这个问题有更好的algorithm吗? 编辑。 有一些不错的汇编build议,所以我将这些标签添加到问题。

从前序和后序列表重构树

考虑一下你有两个节点列表,你知道的是一个是某棵树的前序遍历的表示,另一个是同一棵树的后序遍历的表示。 我相信有可能从这两个列表中完全重构树,我想我有一个algorithm来做,但没有certificate它。 因为这将是一个硕士项目的一部分,我需要绝对肯定,这是可能的和正确的(mathcertificate)。 然而,这不是项目的重点,所以我想知道是否有一个源(即纸或书),我可以引用的证据。 (也许在TAOCP?有人可能知道该段?) 简而言之,我需要一个经过validation的algorithm,使用可引用的资源从前后遍历中重构树。 注意:有问题的树可能不是二进制的,或者是平衡的,或者任何会使它变得太简单的东西。 注2:只使用前序或后序列表会更好,但我不认为这是可能的。 注3:节点可以有任意数量的子节点。 注4:我只关心兄弟姐妹的顺序。 只有一个孩子的时候,左边或右边不重要。