algorithm - 查找具有给定体积的所有大小的长方体

标签 algorithm

我有一个整数区间,我需要找到所有体积在所述区间内的唯一长方体。

我想出了一个循环遍历 3 个数字(长方体的大小)(1x1x1、1x1x2、...;2x1x1 也被认为与 1x1x2 相同)的所有唯一组合,从 1 到间隔,然后检查计算的体积是否落在间隔内。如果上限不是太大,则此解决方案非常有效。但如果间隔以千结尾,解决方案就会变得非常慢。

我对代码并不感兴趣,因为我对如何以不同方式解决这个问题的算法感兴趣。你会如何解决这个问题?

最佳答案

如果您的代码很慢,它可能正在尝试可以立即丢弃的值范围,或者它过于复杂并在循环条件等情况下计算平方根或立方根。尝试像下面的代码示例这样简单的操作,其中我确保 a ≤ b ≤ c 以避免重复:

if (Math.cbrt == undefined) // cubic root fix for older browsers
    Math.cbrt = function(x) {var n = 1; while (n * n * n <= x) ++n; return n - 1;}

function cuboids(min_volume, max_volume) {
    var results = [];
    var cr = Math.cbrt(max_volume);
    for (var a = 1; a <= cr; a++) {
        var sr = Math.sqrt(max_volume / a);
        for (var b = a; b <= sr; b++) {
            var lower = Math.ceil(min_volume / (a * b));
            var upper = Math.floor(max_volume / (a * b));
            for (var c = Math.max(b, lower); c <= upper; c++) {
                results.push([a, b, c]);
            }
        }
    }
    return results;
}

var results = cuboids(99900, 100000);
for (var i in results) document.write(results[i].join("*") + "<br>");

关于algorithm - 查找具有给定体积的所有大小的长方体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47243447/

相关文章:

java - 缩小数字的好方法

algorithm - ROT13 算法有哪些实际应用?

algorithm - 如何比较两条路径

algorithm - 类似于 Unblock Me 的游戏的关卡生成算法

ruby - 打印文件中出现次数最多的 n 个单词(字符串)

string - 通过后缀数组 : do we really need unique sentinels? 的最长公共(public)子串

寻找最佳区域覆盖的算法

c - 如何使用 XOR 查找数组中出现次数为奇数的单个元素?

PHP (OOP) - 从调用的函数中获取对象

c - 翻译结构项的有效方法,避免 C 中的 switch-case