美文网首页
OC 笛卡尔积算法《转》

OC 笛卡尔积算法《转》

作者: 每天刷两次牙 | 来源:发表于2018-03-23 18:22 被阅读95次

    递归求笛卡尔积 求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的个数

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

    相关文章

      网友评论

          本文标题:OC 笛卡尔积算法《转》

          本文链接:https://www.haomeiwen.com/subject/yggxcftx.html