有人可以告诉我为什么Dijkstra的单源最短pathalgorithm假定边缘必须是非负的。 我只谈论的不是负面的重量周期。
我有兴趣创build一个类似于支持以下操作的堆栈的Java数据结构,尽可能高效: Push,在堆栈顶部添加一个新元素, Pop,删除堆栈的顶层元素, Find-Max,返回(但不删除)堆栈的最大元素 Find-Min,返回(但不删除)堆栈的最小元素 这个数据结构最快的实现是什么? 我怎样才能用Java编写它?
我有一个无向图,有大约100个节点和大约200个边。 一个节点被标记为“开始”,一个是“结束”,并且大约有一打标记的“必须通过”。 我需要find通过这个图的最短path,从“开始”开始,结束于“结束”, 并通过所有“必须”节点(以任意顺序)。 ( http://3e.org/local/maize-graph.png/ http://3e.org/local/maize-graph.dot.txt是图中的问题 – 它代表宾夕法尼亚州兰开斯特的玉米迷宫)
我最近遇到了一个问题: 假设你有一个1001整数的数组。 整数是随机的,但是你知道每个整数在1到1000之间(包含)。 另外,每个数字在数组中只出现一次,除了一个数字出现两次。 假设你只能访问数组的每个元素一次。 描述一个algorithm来find重复的数字。 如果你在algorithm中使用了辅助存储,你能find一个不需要它的algorithm吗? 我感兴趣的是第二部分 ,即不使用辅助存储 。 你有什么主意吗?
input:短语1,短语2 输出:语义相似度值(在0和1之间),或者这两个短语谈论同一事物的概率
一个有趣的采访问题,我的一个同事使用: 假设给出了一个非常长,未sorting的无符号64位整数列表。 你会如何find不在列表中出现的最小的非负整数? 后续:现在已经提出了sorting的明显解决scheme,你能比O(n log n)更快吗? 后续操作:你的algorithm必须在有1GB内存的计算机上运行 澄清:列表在RAM中,虽然它可能会消耗大量的内存。 你预先给N的名单的大小。
我目前正在研究一种algorithm来实现C中滚动中值滤波器(类似于滚动平均滤波器)。从我的文献search中,似乎有两种合理有效的方法来实现它。 首先是对初始值窗口进行sorting,然后执行二进制search以插入新值,并在每次迭代中删除现有值。 第二个(来自Hardle和Steiger,1995,JRSS-C,algorithm296)构build了一个双头堆结构,一头是maxheap,另一头是minheap,中间是中间的。 这产生一个线性时间algorithm,而不是O(n log n)。 这是我的问题:执行前者是可行的,但是我需要在数百万个时间序列上运行这个,所以效率非常重要。 后者certificate很难实施。 我在R的stats包的代码的Trunmed.c文件中发现了代码,但这是相当难以理解的。 有没有人知道线性时间滚动中值algorithm的一个精心编写的C实现? 编辑:链接到Trunmed.c代码http://google.com/codesearch/p?hl=zh-CN&sa=N&cd=1&ct=rc#mYw3h_Lb_e0/R-2.2.0/src/library/stats/src/Trunmed.c
我正在寻找一种简单的algorithm来执行任意大小的matrix[NxM]的快速DCT (types2)以及用于逆变换IDCT (也称为DCTtypes3)的algorithm。 我需要一个DCT-2Dalgorithm,但即使是一个DCT-1Dalgorithm也足够好,因为我可以使用DCT-1D来实现DCT-2D(和IDCT-1D来实现IDCT-2D)。 PHP代码是可取的,但任何足够清晰的algorithm都可以。 当前matrix大小大于[200×200]的我用于实现DCT / IDCT的PHP脚本非常慢。 我正在跳跃寻找一种方法来在不到20秒的时间内完成[4000×4000]的DCT。 有谁知道如何做到这一点?
可能重复: C中的滚动中值algorithm 鉴于整数是从数据stream中读取的。 查找以有效方式读取的元素的中位数。 解决方法我读过:我们可以使用左侧的最大堆来表示小于有效中值的元素,右侧的最小堆表示大于有效中值的元素。 在处理一个传入元素之后,堆中元素的数量最多相差1个元素。 当两个堆包含相同数量的元素时,我们将堆的根数据的平均值作为有效中值。 当堆不平衡时,我们从包含更多元素的堆的根部中select有效中位数。 但是,我们将如何构build一个最大堆和最小堆,即我们如何知道这里的有效中位数? 我认为我们会在max-heap中插入1个元素,然后在min-heap中插入下一个元素,以此类推所有元素。 纠正我如果我在这里错了。
我在Swift中实现了一个algorithm,注意到性能非常差。 深入挖掘之后,我意识到其中一个瓶颈就像分类数组一样简单。 相关部分在这里: let n = 1000000 var x = [Int](repeating: 0, count: n) for i in 0..<n { x[i] = random() } // start clock here let y = sort(x) // stop clock here 在C ++中,类似的操作在我的电脑上需要0.06秒 。 在Python中,它需要0.6秒 (没有技巧,只是y =sorting(x)的整数列表)。 在Swift中,如果使用以下命令编译它,则需要6秒 : xcrun swift -O3 -sdk `xcrun –show-sdk-path –sdk macosx` 如果我用下面的命令编译它需要多达88秒的时间 : xcrun swift […]