You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android平台vector排列栈溢出问题:如何实现13元素列表的排列?

解决13元素全排列的内存/栈溢出问题

首先必须明确:13个元素的全排列总数是13! = 6227020800(约62亿),试图将所有排列存储到vector<vector<int>>中是完全不现实的——仅计算内存占用:每个排列是13个int(按4字节算),总内存约为62亿 × 13 ×4 ≈ 324GB,这远超任何设备的内存上限,也是你之前栈溢出/崩溃的核心原因。

正确的处理思路

放弃存储所有排列的方案,改为生成一个排列就立即处理一个,处理完成后丢弃该排列,这样内存仅需维持一个vector<int>的空间,完全不会出现内存溢出问题。

修改后的代码示例

#include <vector>
#include <algorithm>

// 定义处理单个排列的函数,根据你的业务需求实现逻辑
void process_permutation(const std::vector<int>& perm) {
    // 这里写你对当前排列的处理逻辑,比如计算、数据传输、业务校验等
    // 示例:遍历排列元素执行操作
    for (int num : perm) {
        // 替换为你的业务代码
    }
}

int main() {
    std::vector<int> uuid_list_index;
    for (size_t i = 0; i < 13; ++i) {
        uuid_list_index.push_back(i);
    }

    // 处理第一个排列
    process_permutation(uuid_list_index);
    // 生成并处理后续所有排列
    while (std::next_permutation(uuid_list_index.begin(), uuid_list_index.end())) {
        process_permutation(uuid_list_index);
    }

    return 0;
}

额外注意事项

  • 如果业务必须保留部分排列,只能按需筛选存储(比如仅保留满足特定条件的排列),但依然不可能存储全部62亿个排列。
  • Android平台栈空间有限(通常几MB),确保uuid_list_index为堆分配(比如全局变量或动态创建),避免因大数组放在栈上导致溢出(原代码中全局变量已为堆分配,核心问题还是存储全排列的内存过载)。

内容的提问来源于stack exchange,提问作者Qi Huaping

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 08:15:52