4342024 2023-10-19 22:14 采纳率: 46.7%
浏览 13
已结题

c#有没有高效输出排列组合的方法?84个取17个 输出所有的排列组合 越快越好

如题,另外有没有数据运算量很大时如何降低占用内存,提高运行速度。

  • 写回答

12条回答 默认 最新

  • 社区专家-Monster-XH 2023-10-19 22:14
    关注

    基于Monster 组和GPT的调写:

    • 生成84个元素中选择17个的所有排列组合会非常庞大。实际上,这个特定的组合数量将是84个中选择17个,也就是组合数 "84 choose 17",其结果是超过10^13的数量级。这是一个非常大的数字,常规计算机和算法在处理如此大量的数据时会遇到严重的性能和存储问题。
    1. 避免存储所有组合:先不要尝试存储所有组合。即使每个组合只是一小段内存,总量也会非常巨大。相反,你应该用一个可以一次生成一个组合的方法,这样在任何时候你都不会在内存中保存超过一个组合。

    2. 并行计算:利用C#的并行处理能力可以加速组合的生成。例如用Parallel.For或其他并行技术来尝试在多个处理器核心之间分配工作负载。

    3. 优化算法:用有效的算法来生成组合。例如,“就地”算法(不使用额外的内存空间)或使用位操作的算法可能会更快。

    4. 考虑硬件限制:即使你的算法和程序设计得非常高效,硬件可能仍是一个瓶颈。处理如此巨大的数据集可能需要特殊的硬件设置,比如更多的RAM或使用GPU进行计算(通过CUDA或OpenCL等技术)。

    5. 分布式计算:对于这样的大规模计算,你可能需要使用分布式计算。将任务分配给多台机器可以显著加快处理速度。

    6. 只在需要时生成组合:如果你的程序能够按需生成组合,而不是一开始就生成所有组合,那么你可以大大减少内存使用和计算时间。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(11条)

报告相同问题?

问题事件

  • 系统已结题 10月30日
  • 已采纳回答 10月22日
  • 修改了问题 10月19日
  • 修改了问题 10月19日
  • 展开全部

悬赏问题

  • ¥15 急matlab编程仿真二阶震荡系统
  • ¥20 TEC-9的数据通路实验
  • ¥15 ue5 .3之前好好的现在只要是激活关卡就会崩溃
  • ¥50 MATLAB实现圆柱体容器内球形颗粒堆积
  • ¥15 python如何将动态的多个子列表,拼接后进行集合的交集
  • ¥20 vitis-ai量化基于pytorch框架下的yolov5模型
  • ¥15 如何实现H5在QQ平台上的二次分享卡片效果?
  • ¥15 python爬取bilibili校园招聘网站
  • ¥30 求解达问题(有红包)
  • ¥15 请解包一个pak文件