优化这个小功能,这将在运行C的倍数量庞大
这里是该函数的每个部分中的最坏的情况下:优化这个小功能,这将在运行C的倍数量庞大
- 的
while
循环运行53402倍时size
等于9 - 这意味着
find_square()
每个呼叫调用find_square()
本身53402次,直到row == size
,在此情况下是9
所以呼叫到find_square()
总数为因此(53,402)^ 10 = 188 quattuordecillion。
这甚至不是最终功能的全部,但如果它已经很慢了,我想先解决它。显然这是一个可笑的数量的电话,但我真的不能看到它的方式。我愿意接受任何想法,这里的任何帮助都会很棒,谢谢!
void find_square(char*** hashed_dict, char*** grouped_dict, char** square, int size, int row) { if (row == size) {
return;
}
int i = 0;
while (grouped_dict[size - 1][i] != NULL) {
fill_row(square, row, size, grouped_dict[size - 1][i]);
find_square(hashed_dict, grouped_dict, square, size, row + 1);
i++;
}
}
void fill_row(char** square, int row, int size, char* word) {
for (int i = 0; i < size; i++) {
square[row][i] = word[i];
}
}
回答:
你有关创建“字的正方形”的评论暗示要打印或以其他方式报告9⨉9广场,其中每行和每列是grouped_dict
一个字。在这种情况下,至少应该从find_square
返回,此时填充的字符包含不可能用单词完成的部分行或列。
一种方法是在调用fill_row
来检查列后,在find_square
中添加代码。在fill_row
之后,每列至少部分被填满。对于每列,检查grouped_dict
中是否至少有一个词与目前列相匹配。如果没有,则从find_square
返回而不尝试再填充。
这会极大地加快您的程序,但其他优化也许是可能的。你应该考虑的事情包括:
排序
grouped_dict
所以它是搜索匹配的是快。索引
grouped_dict
以复杂的方式更快地搜索匹配。交替填充行和列以尝试增加可能会尽快显示无法完成状态的冲突。
使用通过检查
grouped_dict
限制可能发现部分匹配填充下一行或列时企图。重点关注
grouped_dict
中的偶尔字母作为关键点。
以上是 优化这个小功能,这将在运行C的倍数量庞大 的全部内容, 来源链接: utcz.com/qa/263172.html