网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
05月21日漏签0天
mathematica吧 关注:19,810贴子:73,834
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 5回复贴,共1页
<<返回mathematica吧
>0< 加载中...

要如何实现一个有效率的组合函数?(即m选n问题)

  • 只看楼主
  • 收藏

  • 回复
  • asdasd1dsadsa
  • 小吧主
    10
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
Tuples是区分元素顺序的,Subsets忽视重复元素也不能生成重复元素。非要搞Orderless的Tuples的话似乎效率也不高。有没有什么好的解决方案?


  • 草红样
  • 小吧主
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
以前贴吧讨论过这个问题,你找的函数应该是python中的itertools.combinations_with_replacement吧,现在那个帖子找不到了。下面是一种方法,速度一般
combinWithRep[list_List, k_Integer] := Block[{v, it, cf},
v = Table[Unique[], {k}];
it = Thread[{v, {1}~Join~Most@v, Length@list}];
cf = {it, First /@ it} /. {{iter__}, var_} :>
Hold@Block[{bag = Internal`Bag@Rest@{0}},
Do[Internal`StuffBag[bag, var, 1], iter];
bag~Internal`BagPart~All] /. Hold[x_] :> Compile[{}, x];
Part[list, cf[]]~Partition~k
];


2025-05-21 16:32:39
广告
  • 草红样
  • 小吧主
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
另一种比较简洁的实现,速度慢一些
combinationsWithReplacement[A_List,k_Integer]:=Extract[A,{#-Range[0,k-1]}&/@Subsets[Range[Length[A]+k-1],{k}]];


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 5回复贴,共1页
<<返回mathematica吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示