0

以下の機能のようなクラス(関数、メソッドなど)はありますか?

受胎の例)

すべてのケースを組み合わせたクラス。

    NSString *sourceString = [[NSString alloc] initWithString:@"ABC"];
    NSArray *sourceArray = [[NSArray alloc] initWithObjects:@"A", @"B", @"C"];

    someClass *someClass1 = [[someClass alloc] init];

    NSString *caseResultAsString = [someClass1 makeAllCaseCombinationToStr:sourceString pair:2];
    NSArray *caseResultAsArray = [someClass1 makeAllCaseCombinationToArray:sourceArray pair:2];

caseResultAsStringの値は"AAAB AC BA BB BC CA CB CC"です(ペア引数は2です)

caseResultAsArrayの値は{"AA"、 "AB"、 "AC"、 "BA"、 "BB"、 "BC"、 "CA"、 "CB"、 "CC"}

入力ソースと出力結果が任意のタイプまたは方法である場合、それは問題ではありません。

上記の概念の特徴を備えたクラスがあるかどうか知りたいです。

4

1 に答える 1

0

非常に単純なNSSetカテゴリは次のとおりです。

@interface NSSet(Permutations)

-(NSSet *) setWithPermuations:(int) n;

@end

@implementation NSSet(Permutations)

// data should be NULL the first time through
static void for_loop(int count, int levels, void (^block)(int *levels), int *data)
{
    int freeData = 0;
    if (!data)
    {
        data = malloc(sizeof(int) * levels);
        freeData = 1;
    }

    for (int i = 0; i < count; i++) {
        data[levels - 1] = i;

        if (levels)
            for_loop(count, levels - 1, block, data);
        else {
            if (block)
                block(data);
        }
    }

    if (freeData)
        free(data);
}

-(NSSet *) setWithPermuations:(int)n
{
    NSMutableArray *returnArray = [NSMutableArray array];
    NSArray *thisArray = [self allObjects];

    for_loop(thisArray.count, n, ^(int *levels) {
        NSMutableString *concat = [NSMutableString string];

        for (int i = 0; i < n; i++) {
            [concat appendFormat:@"%@", [thisArray objectAtIndex:levels[i]]];
        }

        [returnArray addObject:concat];

    }, NULL);

    return [NSSet setWithArray:returnArray];
}

@end

明らかに、アルゴリズムの時間はですO((N^T) + O(N))。ここNで、はセット内の要素であり、Tは透過ごとのオブジェクトの数です。これは、必要に応じてNSArrayのNSSetを持つように簡単に変更できますが、現在は文字列のみを使用しています。

于 2012-04-22T17:22:44.557 に答える