问题标签 [heaps-algorithm]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
algorithm - 堆的排列算法
我正在准备面试,我正在努力记住 Heap 的算法:
这个算法是一个非常有名的生成排列的算法。它简洁而快速,并与代码一起生成组合。
问题是:我不喜欢背诵一些东西,我总是试图保留这些概念以便以后“推断”算法。
这个算法真的很不直观,我无法找到一种方法来向自己解释它是如何工作的。
有人可以告诉我在生成排列时该算法为何以及如何按预期工作?
c# - 堆算法的实现
请我似乎不知道我的堆置换算法的 C# 实现有什么问题。它没有给出输入数组的正确排列。有人可以帮帮我吗?
这是伪代码
这是我的 C# 实现
javascript - 递归函数——堆的算法函数逻辑
我试图理解这个函数背后的逻辑:
此函数返回传递的数组的排列。它正在工作,但我真的不明白它是如何工作的。如果结果数组只有一个推送调用,它的排列究竟如何?另外, perm 函数被调用 4 次或更少?我只是想了解这件事的逻辑。交换功能是不言自明的。我只是在 perm 函数的 else 语句中遇到了问题。
提前致谢..
arrays - Clojure中堆的算法(能不能高效实现?)
堆的算法枚举数组的排列。维基百科关于该算法的文章称,Robert Sedgewick 得出结论,该算法是“当时通过计算机生成排列的最有效算法”,因此尝试实施自然会很有趣。
该算法是关于在可变数组中进行连续交换,所以我正在考虑在 Clojure 中实现它,它的序列是不可变的。我将以下内容放在一起,完全避免了可变性:
对于 11 个字符的输入字符串,算法在 7.3 秒内(在我的计算机上)运行(平均超过 10 次运行)。
使用字符数组的等效 Java 程序在 0.24 秒内运行。
所以我想让 Clojure 代码更快。我使用了带有类型提示的 Java 数组。这是我尝试过的:
嗯,它比较慢。现在,11 个字符的数组平均需要 9.1 秒(即使有类型提示)。
我知道可变数组不是 Clojure 的方式,但是有什么方法可以接近 Java 的这种算法的性能吗?
sorting - 为什么计算机需要更多时间来安排不同的排列?
我刚刚学习了堆的算法。好吧,对象的数量越大,系统将它们安排在所有可能的排列中的时间就越多。但是当我在计算器中计算该数量对象的阶乘时,结果是即时的。为什么会发生同样的情况。排列比计算阶乘花费更多时间?
javascript - javascript非递归置换算法性能
if (tl;dr) {
转到https://jsfiddle.net/y5v0ur4p/60/
关于如何更快地运行这种排列模式的任何想法?
} else {
我想知道是否有可能在 javascript 中编写一个非递归置换函数,以跟上递归置换函数的性能(例如堆算法)。几周后,我有了一个想法,到目前为止效果很好。这是解释https://jsfiddle.net/u68wyvzk/6/
如果解释留下不清楚的地方,请问:)
}
javascript - 堆的算法排列 JavaScript 和递归的堆栈?
我有一个任务是根据堆的算法排列来计算重复的字符串。我要做的第一件事是输出交换的字符串,我从jake 的回答中找到了这段代码,有人可以帮我理解循环中这段代码中的递归吗?此函数的输出是交换的字符串。
我一直在调试器上对其进行试验,但仍然无法了解发生了什么。
javascript - Javascript Heap 的算法(非递归)
我已经在 JavaScript 中实现了 Heap 的非递归算法。当检查排列时,console.log(arr)
一切都按预期工作。但是当我尝试将每个排列推送到结果数组时,一切都会崩溃。它只返回填充了最后一次迭代排列的结果。
c - 我的堆算法代码有什么问题?
我的作业要求我编写一个程序,从终端(argc 和 argv)获取字符串并打印所有可能的排列。我曾尝试使用堆的算法,但它似乎并没有奏效。下面是我的功能。
该函数必须返回指向指令指定的字符指针的指针。这也是为什么有这么多变量的原因(虽然,我不太确定如何处理字符串的副本。我很确定我需要它)。测试表明程序会循环,通常会循环太多,最终会遇到段错误。看起来交换后的字符串并没有将其放入返回的数组中。