[已解决] MATLAB 排列组合问题: 已知有11个位置,任取5个位置,这五个位置有1-15个数选择,相求所有可能的情况

[复制链接]
GraveLcici 发表于 2021-9-8 10:12:47
MATLAB 排列组合问题: 已知有11个位置,任取5个位置,这五个位置有1-15个数选择(数字可重复),其余位置用0填充,求所有可能的情况

最佳答案


15631202458 发表于 2021-9-8 15:00:11
本帖最后由 15631202458 于 2021-9-8 15:07 编辑

可能结果有5C11*15^5=462*759375=350831250种情况,全部列举额出来非常耗时我修改了下参数也要运行将近6分钟,要用你问题中的数字估计需要好几天抑或更久,不知道了!!!还可能内存溢出,如果不在乎时间的话,可以将计算出的结果每一行存到文件中,应该不会出现内存溢出,但是也不知道文本的数据是否有数据量限制。。
仅供参考。
  1. clear;
  2. %% 总数
  3. mm=11;
  4. nn=15;
  5. kk=5;
  6. sum=nchoosek(mm,kk)*nn^kk

  7. %% 非常耗时,取如下参数的话可进行验证,那么按照你设定的参数的话运行时间估计是指数被,而且可能会存在内存溢出。
  8. mm=8;
  9. nn=6;
  10. kk=5;
  11. %% list
  12. tic
  13. list1=nchoosek(1:mm,kk);
  14. index=1;
  15. for i=1:nn
  16.     for j=1:nn
  17.         for k=1:nn
  18.             for m=1:nn
  19.                 for n=1:nn
  20.                     list2(index,1:5)=[i,j,k,m,n];
  21.                     index=index+1;
  22.                 end
  23.             end
  24.         end
  25.     end
  26. end
  27. toc
  28. index=1;
  29. tic
  30. for i=1:length(list1)
  31.     for j=1:length(list2)
  32.         JG(index,1:mm)=0;
  33.         JG(index,list1(i,:))=list2(j,:);
  34.         index=index+1;
  35.     end
  36. end
  37. toc
  38. xlswrite('out.xlsx',JG);
复制代码

回复此楼

2 条回复


15631202458 发表于 2021-9-8 15:00:11
本帖最后由 15631202458 于 2021-9-8 15:07 编辑

可能结果有5C11*15^5=462*759375=350831250种情况,全部列举额出来非常耗时我修改了下参数也要运行将近6分钟,要用你问题中的数字估计需要好几天抑或更久,不知道了!!!还可能内存溢出,如果不在乎时间的话,可以将计算出的结果每一行存到文件中,应该不会出现内存溢出,但是也不知道文本的数据是否有数据量限制。。
仅供参考。
  1. clear;
  2. %% 总数
  3. mm=11;
  4. nn=15;
  5. kk=5;
  6. sum=nchoosek(mm,kk)*nn^kk

  7. %% 非常耗时,取如下参数的话可进行验证,那么按照你设定的参数的话运行时间估计是指数被,而且可能会存在内存溢出。
  8. mm=8;
  9. nn=6;
  10. kk=5;
  11. %% list
  12. tic
  13. list1=nchoosek(1:mm,kk);
  14. index=1;
  15. for i=1:nn
  16.     for j=1:nn
  17.         for k=1:nn
  18.             for m=1:nn
  19.                 for n=1:nn
  20.                     list2(index,1:5)=[i,j,k,m,n];
  21.                     index=index+1;
  22.                 end
  23.             end
  24.         end
  25.     end
  26. end
  27. toc
  28. index=1;
  29. tic
  30. for i=1:length(list1)
  31.     for j=1:length(list2)
  32.         JG(index,1:mm)=0;
  33.         JG(index,list1(i,:))=list2(j,:);
  34.         index=index+1;
  35.     end
  36. end
  37. toc
  38. xlswrite('out.xlsx',JG);
复制代码

回复此楼

GraveLcici 发表于 2021-9-8 15:23:29
15631202458 发表于 2021-9-8 15:00
可能结果有5C11*15^5=462*759375=350831250种情况,全部列举额出来非常耗时我修改了下参数也要运行将近6分 ...

感谢感谢:hug:我先学习学习
您需要登录后才可以回帖 登录 | 注册

本版积分规则

相关帖子
相关文章
热门教程
站长推荐
快速回复 返回顶部 返回列表