OC 笛卡尔积算法《转》

递归求笛卡尔积 求N个数组中元素任意组合

这两天搞一个订单多规格筛选, ,推荐了这个算法,,虽然没用上,,看上去还是挺不错的,,转载

原理:采用递归算法依次遍历数组中元素,并将组合添加到一个新的数组,最后得到一个数组,数组中存放所有组合,每个组合是一个数组

算法如下:

- (void)combine:(NSMutableArray*)result data:(NSArray*)data curr:(int)currIndex count:(int)count {

  if(currIndex == count) {

    [_combinationArr addObject:[result mutableCopy]];

    [result removeLastObject];

  }else{

    NSArray* array = [data objectAtIndex:currIndex];


    for(inti = 0; i < array.count; ++i) {

      [result addObject:[array objectAtIndex:i]];

      //进入递归循环

      [selfcombine:result data:data curr:currIndex+1 count:count];

      if((i+1 == array.count) && (currIndex-1>=0)) {

        [result removeObjectAtIndex:currIndex-1];

      }

    }

  }

}

 result 一个空数组-用来存放所有组合元素

_combinationArr 最后存放所有组合的数组

currIndex 起始位置

count需要组合数组的个数即_combinationArr的个数

建议涉及到数据量比较大的元素组合时,应当开辟子线程进行递归调用!!!

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,789评论 0 33
  • Java经典问题算法大全 /*【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子...
    赵宇_阿特奇阅读 1,952评论 0 2
  • 伊人在何方,我登楼远望 忽又凭栏苦候,寄情南风与幽梦 念起,郁郁累累 为伊人愁肠。 悲歌未彻心扉,远望似伊人归 碣...
    唐春元ok阅读 378评论 21 20
  • 培训机构,以学历教育或成人继续教育为目的的教育培训机构需要有场地的要求及师资的要求,需要教育主管部门给予认证并且取...
    汇建商学院001阅读 287评论 0 0
  • 感恩今天冒雨出行,非常难得的体验,感觉不好不坏,感恩雨水滋润大地,滋润空气。 感恩董先生做的独特口味的早饭,买的可...
    李馨兰阅读 166评论 0 0