问题标签 [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.
javascript - Javascript中的堆算法又名所有排列
目标:
我想为array 的每个排列执行一个特定的函数。我不需要保存中间排列。
释义:
我正在寻找堆算法的 Javascript 实现,它为每个排列调用一个函数
javascript - 具有不同回调的相同函数的不同输出(堆算法)
我正在使用堆算法,它与output
记录结果的回调函数控制台配合得很好。但是,如果我将回调函数的操作更改output
为array.push
,它会一遍又一遍地推送同一个数组。我究竟做错了什么?
swift - Swift 中的值与引用类型,使用堆置换算法的 Wikipedia 实现为例
我试图编写代码来确定排列。在 Wikipedia 中有一个简单算法的伪代码(来自 BR Heap)。我试图翻译伪代码
我的代码给出了正确数量的排列,但我可以看到有一些缺失,而另一些则加倍。
事实证明,这是基于我对 Swift 值类型与引用类型的误解。
这是我的(不正常工作)代码:
javascript - 为什么这个用于置换的堆算法不起作用;
我正在准备面试,并正在尝试使用 javascript 进行排列的堆算法。所以当我尝试打印到控制台时代码工作正常。
但是当我尝试将结果放入数组时它不起作用。
它打印这个:
performance - 量大,运行时间长。生命太短暂
需要帮忙。甚至可能是精神科帮助,甚至尝试这样做!
这个过程承诺永远运行。需要有关如何从性能角度改进它的建议,以及有关如何更有效地处理数据以便完成工作的任何想法。
我正在排列 60 个短字符串。它们与第二组 60 组配对,它们实际上是静态的。所以一切都与一切配对。然后配对值将用于进行一些数据库搜索。这种处理还没有到位,当然会增加更多的需求。我已经在 VB.Net 中实现了堆的排列算法(https://en.wikipedia.org/wiki/Heap%27s_algorithm),我很满意它的运行效率。
愚蠢地,我用 20 个弦对开始了它。3天后它还没有完成。我输入了一些诊断报告并收集了排列 5 到 14 个元素的经过时间。5 在 0.00975 秒内完成。美好的。即使是 11(阶乘值为 39,916,800),排列数也以可观的 5.6 秒完成。我收集的数据是一致的,如我所料。我用 14 个元素完成了这项工作。耗时 3 小时:22 分:14 秒。
根据这些数据,我预计我尝试运行的 20 个元素排列大约需要 10738 年。生命太短暂了……</p>
在运行时,我观察到 Windows 10 调度程序正在分配稳定的 11.5% 到 20.5% 的 CPU,这是默认设置。因此,平均约为 16%。如果它能够分配 100%,我想这个过程会快 6 倍。我的机器是联想笔记本电脑,处理器 Intel(R) Core(TM) i7-8550U CPU @ 1.80GHz 1.99GHz。不是快速机器。
所以,我想将要排列的元素数量推到 60 个。我想,在我目前的机器上,这需要数十亿年。
任何关于非常快速、多、并行的处理器的建议都非常感谢。
也欢迎任何关于数据重组、拆分、并行处理的想法。然而,这不是一个练习,这 60 个元素是现实生活中的元素。出于测试目的,我将运行一个缩减集。对于真实的东西,我需要所有 60 个排列。每个排列在生成时都需要存在并且完全可用,以进行需要进行的额外处理。
我要求太多了吗?提前感谢您的建议和经验。
c# - 堆算法的问题:并非所有排列都生成
我想使用 Heap 算法的递归版本来获得从 1 到 k 的自然数序列的所有排列,但遇到了一些困难。
对于 k = 3,程序输出 123、213、312、132,但由于某种原因,它没有考虑 231 和 321。更具体地说,根据执行 JavaScript 版本算法的视频(https://www.youtube.com/watch?v=xghJNlMibX4),通过第五次排列 k 应该等于 3(在循环中更改)。我不明白为什么在我的情况下它达到 1,并且循环停止执行。
我专注于 Wiki 上的算法变体:https ://en.wikipedia.org/wiki/Heap%27s_algorithm 。有趣的是,我从这里获取的几乎相同的一个:https ://www.geeksforgeeks.org/heaps-algorithm-for-generating-permutations/工作正常。
看起来我无法从表单的控制台应用程序正确重写它。我可以在不使用递归的情况下尝试该版本,但我仍然想找出在构建递归算法时我的错误是什么。
algorithm - 堆的算法检查奇数和偶数
有人可以解释为什么堆算法使用条件语句检查K是偶数还是奇数,并且每个交换都不同?我在网上找不到任何直观的解释
此代码来自维基百科
r - 使用堆算法生成排列
我正在尝试使用我在维基百科中找到的堆算法为数组生成所有排列。
这是我到目前为止所尝试的:
输出没有显示,如果能得到一些帮助会很棒。