【发布时间】:2014-11-20 11:51:57
【问题描述】:
从字符数组中找到所有可能单词的最佳算法是什么。
这里是一个例子:
来自这个数组:[[A],[B,C,D],[E,F],[G,H]]
作为回报,我需要一个包含 12 个有序可能性的数组 [[A,B,E,G],[A,C,E,G], ... , [A,D,F,H]]
你知道如何实现这个算法吗?如果您知道它并且您提供了任何语言(C、JAVA、Javascript、...)的示例,请随时分享,因为这是我尝试找到它的一天...
这里我是如何尝试实现它的(“array”是一个char数组):
+ (NSArray*) possibleReading:(NSMutableArray*)array {
int nbPossibilities = 1;
for(int i = 0; i < [array count]; i++) {
nbPossibilities *=[[array objectAtIndex:i] count];
}
NSMutableArray *possArr = [[NSMutableArray alloc] initWithCapacity:nbPossibilities];
for (int i=0; i < nbPossibilities; i++) {
NSMutableArray *innerArray = [[NSMutableArray alloc] initWithCapacity:[array count]];
[possArr addObject:innerArray];
}
for (int i=0; i< [array count]; i++) {
//
for(int nbPoss = 0; nbPoss < nbPossibilities; nbPoss++) {
NSMutableArray * arr = [possArr objectAtIndex:nbPoss];
NSNumber * num = [NSNumber numberWithInt:nbPoss % [[array objectAtIndex:i] count]];
NSString * literal = [[array objectAtIndex:i] objectAtIndex:[num intValue]];
[arr insertObject:literal atIndex:i];
}
}
return possArr;
}
【问题讨论】:
-
在漫长的一天之后,您有什么输出可以给我们看吗? [我想你在这里不是新人,所以...]
-
这是 1*3*2*2 = 12 种可能性 - 不是 16 种,您要查找的术语称为“笛卡尔积”。
-
@BenjaminGruenbaum 问题已更新,谢谢
-
@BenjaminGruenbaum 谢谢本杰明!笛卡尔积是神奇的词;)
标签: objective-c arrays algorithm loops