问题标签 [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.

0 投票
3 回答
9540 浏览

algorithm - 堆的排列算法

我正在准备面试,我正在努力记住 Heap 的算法:

这个算法是一个非常有名的生成排列的算法。它简洁而快速,并与代码一起生成组合。

问题是:我不喜欢背诵一些东西,我总是试图保留这些概念以便以后“推断”算法。

这个算法真的很不直观,我无法找到一种方法来向自己解释它是如何工作的。

有人可以告诉我在生成排列时该算法为何以及如何按预期工作?

0 投票
3 回答
2167 浏览

c# - 堆算法的实现

请我似乎不知道我的堆置换算法的 C# 实现有什么问题。它没有给出输入数组的正确排列。有人可以帮帮我吗?

这是伪代码

这是我的 C# 实现

0 投票
0 回答
195 浏览

javascript - 递归函数——堆的算法函数逻辑

我试图理解这个函数背后的逻辑:

此函数返回传递的数组的排列。它正在工作,但我真的不明白它是如何工作的。如果结果数组只有一个推送调用,它的排列究竟如何?另外, perm 函数被调用 4 次或更少?我只是想了解这件事的逻辑。交换功能是不言自明的。我只是在 perm 函数的 else 语句中遇到了问题。

提前致谢..

0 投票
1 回答
272 浏览

arrays - Clojure中堆的算法(能不能高效实现?)

堆的算法枚举数组的排列。维基百科关于该算法的文章称,Robert Sedgewick 得出结论,该算法是“当时通过计算机生成排列的最有效算法”,因此尝试实施自然会很有趣。

该算法是关于在可变数组中进行连续交换,所以我正在考虑在 Clojure 中实现它,它的序列是不可变的。我将以下内容放在一起,完全避免了可变性:

对于 11 个字符的输入字符串,算法在 7.3 秒内(在我的计算机上)运行(平均超过 10 次运行)。

使用字符数组的等效 Java 程序在 0.24 秒内运行。

所以我想让 Clojure 代码更快。我使用了带有类型提示的 Java 数组。这是我尝试过的:

嗯,它比较慢。现在,11 个字符的数组平均需要 9.1 秒(即使有类型提示)。

我知道可变数组不是 Clojure 的方式,但是有什么方法可以接近 Java 的这种算法的性能吗?

0 投票
1 回答
70 浏览

sorting - 为什么计算机需要更多时间来安排不同的排列?

我刚刚学习了堆的算法。好吧,对象的数量越大,系统将它们安排在所有可能的排列中的时间就越多。但是当我在计算器中计算该数量对象的阶乘时,结果是即时的。为什么会发生同样的情况。排列比计算阶乘花费更多时间?

0 投票
1 回答
387 浏览

javascript - javascript非递归置换算法性能

if (tl;dr) {

转到https://jsfiddle.net/y5v0ur4p/60/

关于如何更快地运行这种排列模式的任何想法?

} else {

我想知道是否有可能在 javascript 中编写一个非递归置换函数,以跟上递归置换函数的性能(例如堆算法)。几周后,我有了一个想法,到目前为止效果很好。这是解释https://jsfiddle.net/u68wyvzk/6/

如果解释留下不清楚的地方,请问:) }

0 投票
0 回答
14 浏览

javascript - 无法从递归置换函数返回正确的值

我正在尝试修改这个博主的堆算法版本。

我的问题是这个函数可以很好地打印出每个排列,但是如果我尝试将这些排列添加到我在函数运行后打印出来的数组中,我会为数组中的每个元素得到相同的值。

这是JSFiddle,我在下面粘贴了我的代码。有谁知道我为什么会出现这种行为?

0 投票
1 回答
520 浏览

javascript - 堆的算法排列 JavaScript 和递归的堆栈?

我有一个任务是根据堆的算法排列来计算重复的字符串。我要做的第一件事是输出交换的字符串,我从jake 的回答中找到了这段代码,有人可以帮我理解循环中这段代码中的递归吗?此函数的输出是交换的字符串。

我一直在调试器上对其进行试验,但仍然无法了解发生了什么。

0 投票
2 回答
1034 浏览

javascript - Javascript Heap 的算法(非递归)

我已经在 J​​avaScript 中实现了 Heap 的非递归算法。当检查排列时,console.log(arr)一切都按预期工作。但是当我尝试将每个排列推送到结果数组时,一切都会崩溃。它只返回填充了最后一次迭代排列的结果。

0 投票
1 回答
122 浏览

c - 我的堆算法代码有什么问题?

我的作业要求我编写一个程序,从终端(argc 和 argv)获取字符串并打印所有可能的排列。我曾尝试使用堆的算法,但它似乎并没有奏效。下面是我的功能。

该函数必须返回指向指令指定的字符指针的指针。这也是为什么有这么多变量的原因(虽然,我不太确定如何处理字符串的副本。我很确定我需要它)。测试表明程序会循环,通常会循环太多,最终会遇到段错误。看起来交换后的字符串并没有将其放入返回的数组中。