我们知道例如两个权的模可以这样表示: x % 2 inpower n == x & (2 inpower n – 1). 例子: x % 2 == x & 1 x % 4 == x & 3 x % 8 == x & 7 两个数字的一般无力呢? 我们说: x%7 ==?
给定一组形成一个单词的字符,给出一个有效的algorithm来颠倒单词的顺序(不是字符)。 示例input和输出: >>> reverse_words("this is a string") 'string a is this' 它应该是O(N)时间和O(1)空间( split()和推/popup堆栈是不允许的)。 拼图从这里被拿走。
有谁知道我在哪里可以find一个如何在C#中构build一个trie的例子。 我正在尝试使用字典/单词列表并创build一个trie。
我有两个2D numpy数组:x_array包含在x方向的位置信息,y_array包含在y方向的位置。 然后我有一个很长的x,y点列表。 对于列表中的每个点,我需要find最接近该点的位置(在数组中指定)的数组索引。 我天真地产生了一些代码工作,基于这个问题: 在numpy数组中find最接近的值 即 import time import numpy def find_index_of_nearest_xy(y_array, x_array, y_point, x_point): distance = (y_array-y_point)**2 + (x_array-x_point)**2 idy,idx = numpy.where(distance==distance.min()) return idy[0],idx[0] def do_all(y_array, x_array, points): store = [] for i in xrange(points.shape[1]): store.append(find_index_of_nearest_xy(y_array,x_array,points[0,i],points[1,i])) return store # Create some dummy data y_array = numpy.random.random(10000).reshape(100,100) x_array = numpy.random.random(10000).reshape(100,100) points = numpy.random.random(10000).reshape(2,5000) # […]
这是一个谷歌面试问题: 给定N * Nmatrix。 所有的行都被sorting,所有的列都被sorting。 findmatrix的第K个最大元素。 在n ^ 2中做它很简单,我们可以使用堆或合并sorting(n lg n),然后得到它,但有没有更好的方法,比(n lg n)好? 数组的示例:: 1 5 7 12 3 6 8 14 4 9 10 15 11 17 19 20 1 <5 <7 <12和1 <3 <4 <11与其他行和列相似。 现在说我们需要find第十个最小的元素,在这里它是11 ..希望这增加了一些细节问题…
对于我正在开发的游戏,我需要一个可以计算交叉点的algorithm。 我已经解决了这个问题,但是我这样做的方式真的很糟糕,我希望这里有人可能有一个更优雅的解决scheme。 一对点代表它们之间画出的一条线的终点。 给定两对点,划线是否相交,如果是,在哪一点? 例如,将线(Ax,Ay) – (Bx,By)和(Cx,Cy) – (Dx,Dy) 任何人都可以想出解决scheme吗? 任何语言的解决scheme都可以。 编辑:我应该更清楚一点,如果交点超出了线段的长度,algorithm必须返回false。
我刚刚在我的项目中遇到了一个场景,我需要将不同的树对象与已知实例进行比较,并且认为某种在任意树上运行的哈希algorithm将非常有用。 以下面的树为例: Ø / \ / \ OO / | \ | / | \ | OOOO / \ / \ OO 其中每个O表示树的一个节点,是一个任意的对象,有一个关联的散列函数。 所以问题简化为:给定树结构节点的散列码和已知的结构,计算整个树的(相对)无碰撞散列码的体面algorithm是什么? 有关散列函数属性的一些说明: 散列函数应该取决于树中每个节点的散列码以及它的位置。 重新sorting节点的子节点应该明显改变生成的散列码。 反映树的任何部分应明显改变生成的哈希码 如果有帮助的话,我在我的项目中使用C#4.0,虽然我主要是在寻找一个理论上的解决scheme,所以在另一个命令式语言中使用伪代码,描述或者代码就没有问题。 UPDATE 那么,这是我自己提出的解决scheme。 这里得到了很多答案。 每个节点(子树/叶节点)具有以下散列函数: public override int GetHashCode() { int hashCode = unchecked((this.Symbol.GetHashCode() * 31 + this.Value.GetHashCode())); for (int i = 0; i < this.Children.Count; i++) […]
我有一个结构良好的树,代表一个mathexpression式。 例如,给定string: "1+2-3*4/5" 4/5 "1+2-3*4/5" ,将其parsing为: subtract(add(1,2),divide(multiply(3,4),5)) 这是表示为这棵树: 我想要做的就是拿走这棵树,尽可能减less它。 在上面的例子中,这很简单,因为所有的数字都是常量。 然而,一旦我允许未知数(用$表示,后跟一个标识符),情况就会变得更加复杂: "3*$a/$a"变成divide(multiply(3,$a), $a) 这应该简化为3 ,因为$a条款应该互相取消。 问题是,“我怎样才能以通用的方式认识到这一点?” 我如何认识到min(3, sin($x))总会是sin($x) ? 如何识别sqrt(pow($a, 2))是否是abs($a) ? 我怎样才能认识到nthroot(pow(42, $a), $a) (42 次方的根)是42 ? 我意识到这个问题是相当广泛的,但是我一直在反对这个问题一段时间,还没有拿出足够满意的东西。
我写了一个recursion的DFSalgorithm来遍历图: void Graph<E, N>::DFS(Node n) { std::cout << ReadNode(n) << " "; MarkVisited(n); NodeList adjnodes = Adjacent(n); NodeList::position pos = adjnodes.FirstPosition(); while(!adjnodes.End(pos)) { Node adj = adjnodes.ReadList(pos); if(!IsMarked(adj)) DFS(adj); pos = adjnodes.NextPosition(pos); } } 然后我用堆栈写了一个迭代的DFSalgorithm: template <typename E, typename N> void Graph<E, N>::IterativeDFS(Node n) { Stack<Node> stack; stack.Push(n); while(!stack.IsEmpty()) { Node u = stack.Read(); stack.Pop(); […]
我遇到的一个面试问题: 给定一组数字,将数字分成两组,使得两组数字之和的差值最小。 这是我的想法,但我不确定这是否是一个正确的解决scheme: sorting数组 以前两个元素为例,把它们看作是2个元素(每个元素都有1个元素) 从数组中取下一个元素。 现在决定这个元素去哪个集合(通过计算总和应该是最小的) 重复 这是正确的解决scheme吗? 我们可以做得更好吗?