高效的编码帮助 我现在正在C++中编写代码来寻找6个整数的所有可能排列,并存储最佳排列(即总的值与给定值最接近的一个)。

高效的编码帮助 我现在正在C++中编写代码来寻找6个整数的所有可能排列,并存储最佳排列(即总的值与给定值最接近的一个)。,c++,pointers,C++,Pointers,我正试图尽可能高效地编写这段代码,并希望得到任何建议或示例 我正在考虑将整数存储在数组中,并在循环中使用指针执行排列。这是一个好方法吗 看看这篇优秀的帖子@:。它有完整的代码,由一位同事编写,应该足以让您走上正确的道路。他们已经为您想到了这个: #include <algorithm> int ra[6] = { 1, 2, 3, 4, 5, 6 }; do { // whatever } while (std::next_permutation(ra, ra+6));

我正试图尽可能高效地编写这段代码,并希望得到任何建议或示例


我正在考虑将整数存储在数组中,并在循环中使用指针执行排列。这是一个好方法吗

看看这篇优秀的帖子@:。它有完整的代码,由一位同事编写,应该足以让您走上正确的道路。

他们已经为您想到了这个:

#include <algorithm>

int ra[6] = { 1, 2, 3, 4, 5, 6 };

do {
    // whatever
} while (std::next_permutation(ra, ra+6));
#包括以获取详细信息


它可能无法提供尽可能快的运行时间,因为在每一步中,它都必须检查数组以确定要更改的内容。但这无疑是程序员工作中最有效的,而且在不了解编译器和平台的情况下,实际上不可能对嵌套循环方法进行微优化。

假设重复的数字不是问题,那么就有n!n个整数的读入(一次取n)。所以无论你做什么,你的算法都会有阶乘时间行为(O(n^n))

换句话说,当n变大时,它将变慢。对不起

实际上,页面上有这样做的算法

我在考虑存储整数 在数组中执行 在一个数组中使用指针的置换 环这是一个好方法吗


不,这不是个好办法。与其交换指向数组中项目的指针,不如交换数组中的项目。指针只是一个额外的间接步骤,没有任何真正的目的。

在SO中有很多关于排列的问题。请搜索“排列”,您将得到答案;也许它们不是您正在使用的同一种语言(C++)或同一种结构(即使用字符串),但您可以进行调整。幸运的是,n是6,因此算法是O(720);-)