是否有一个类(功能,方法等或任何功能),如下面的功能?
受孕的例子)
制作所有案例组合的类。
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的值是 “AA AB AC BA BB BC CA CB CC”(对参数为2)
caseResultAsArray的值是 { “AA”, “AB”, “AC”, “BA”, “BB”, “公元前”, “CA”, “CB”, “CC”}
如果输入源和输出结果是任何类型或任何方式,则无关紧要。
我想知道是否有一个具有上述概念特征的课程。
答案 0 :(得分: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
是每次渗透的对象数量。如果你愿意,可以很容易地将其更改为具有NSA的NSArrays,但是这当前只使用了一个字符串。