问题标签 [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 投票
23 回答
63391 浏览

performance - 获取 π 值的最快方法是什么?

我正在寻找获得 π 值的最快方法,作为个人挑战。更具体地说,我使用的方法不涉及使用#define常量,如M_PI,或硬编码数字。

下面的程序测试了我所知道的各种方法。理论上,内联汇编版本是最快的选择,但显然不可移植。我已将其作为基线与其他版本进行比较。在我的测试中,使用内置插件,该4 * atan(1)版本在 GCC 4.2 上是最快的,因为它会自动将 折叠atan(1)成一个常量。-fno-builtin指定后,版本atan2(0, -1)最快。

这是主要的测试程序(pitimes.c):

fldpi.c以及仅适用于 x86 和 x64 系统的内联汇编内容 ( ):

还有一个构建脚本,它构建了我正在测试的所有配置(build.sh):

除了在各种编译器标志之间进行测试(我也比较了 32 位和 64 位,因为优化不同),我还尝试过切换测试的顺序。但是,该atan2(0, -1)版本仍然每次都名列前茅。

0 投票
8 回答
18362 浏览

algorithm - 创建色轮的功能

这是我多次伪解决的问题,但从未完全找到解决方案。

问题是想出一种方法来生成N颜色,尽可能区分N参数在哪里。

0 投票
30 回答
69235 浏览

performance - 前 10000 个素数的最有效代码?

我想打印前 10000 个素数。谁能给我最有效的代码?说明:

  1. 如果您的代码在 n > 10000 时效率低下,则无关紧要。
  2. 代码的大小无关紧要。
  3. 您不能以任何方式对值进行硬编码。
0 投票
8 回答
3403 浏览

algorithm - 有效地获得排序列表的排序总和

你有一个数字的升序列表,你能想到的最有效的算法是获取该列表中每两个数字之和的升序列表。结果列表中的重复项无关紧要,您可以删除它们或根据需要避免它们。

需要明确的是,我对算法感兴趣。随意以您喜欢的任何语言和范式发布代码。

0 投票
9 回答
2749 浏览

algorithm - 跟进:按独特性“排序”颜色

原始问题

如果给你 N 个最大距离的颜色(以及一些相关的距离度量),你能想出一种方法来将这些颜色排序成某种顺序,使第一个 M 也合理地接近最大不同的集合吗?

换句话说,给定一堆不同的颜色,想出一个排序,这样我就可以从一开始就使用我需要的尽可能多的颜色,并合理地确保它们都是不同的,并且附近的颜色也非常不同(例如,蓝红色不在红蓝色旁边)。

随机化是可以的,但肯定不是最优的。

澄清:给定一些大型且视觉上不同的颜色集(比如 256 或 1024),我想对它们进行排序,以便当我使用第一个,比如 16 种颜色时,我得到一个视觉上相对不同的颜色子集。这大致相当于说我想对这个 1024 的列表进行排序,以便单个颜色在视觉上越接近,它们在列表中的距离越远。

0 投票
10 回答
5467 浏览

algorithm - 使用图和树可以解决或更容易解决哪些问题?

这两种数据结构可以解决的最常见问题是什么?

对我来说,对以下书籍也有建议会很好:

  • 实施结构
  • 实施并解释使用它们的算法的推理
0 投票
24 回答
479364 浏览

algorithm - Big O,您如何计算/近似它?

大多数拥有 CS 学位的人肯定知道Big O 代表什么。它可以帮助我们衡量算法的可扩展性。

但我很好奇,你如何计算或近似算法的复杂性?

0 投票
9 回答
59785 浏览

algorithm - 测量信号的峰值检测

我们使用数据采集卡从设备中获取读数,该设备将信号增加到峰值,然后回落到原始值附近。为了找到峰值,我们目前在数组中搜索最高读数,并使用索引来确定我们计算中使用的峰值时间。

如果最大值是我们正在寻找的峰值,则此方法效果很好,但如果设备无法正常工作,我们可以看到第二个峰值,该峰值可能高于初始峰值。我们在 90 秒的时间内从 16 个设备中每秒读取 10 个读数。

我最初的想法是循环检查读数以查看前一个点和下一个点是否小于当前点以找到一个峰值并构建一个峰值数组。也许我们应该查看当前位置两侧的多个点的平均值,以考虑系统中的噪声。这是最好的方法还是有更好的技术?


我们确实使用 LabVIEW,我查看了LAVA 论坛,有很多有趣的例子。这是我们测试软件的一部分,我们正在努力避免使用过多的非标准 VI 库,因此我希望获得有关所涉及的流程/算法而不是特定代码的反馈。

0 投票
4 回答
44131 浏览

algorithm - 图序列化

我正在寻找一种简单的算法来“序列化”有向图。特别是我有一组文件,它们的执行顺序相互依赖,我想在编译时找到正确的顺序。我知道这一定是一件相当普遍的事情——编译器一直都在这样做——但我的 google-fu 今天一直很弱。什么是“首选”算法?

0 投票
10 回答
18473 浏览

algorithm - 两颗弹珠和一座 100 层的建筑

那些经典的编程面试问题之一......

给你两颗弹珠,并告诉它们从某个特定高度掉落时会破裂(如果从该高度以下掉落,可能不会受到损坏)。然后你被带到一栋 100 层的建筑物(大概高于特定高度),并被要求找到你可以在不破坏大理石的情况下掉落的最高楼层。

额外信息

  • 您必须找到正确的楼层(不是可能的范围)
  • 弹珠都保证在同一楼层破裂
  • 假设您更换地板的时间为零——仅计算大理石滴的数量
  • 假设正确的楼层随机分布在建筑物中