优化这个小函数,它将在C中运行大量次
以下是函数每个部分的最坏情况:优化这个小函数,它将在C中运行大量次,c,algorithm,performance,optimization,C,Algorithm,Performance,Optimization,以下是函数每个部分的最坏情况: 当size等于9时,while循环运行53402次 这意味着find_square()的每次调用都会调用find_square()自身53402次,直到row==size,在本例中为9 因此,对find_square()的调用总数为(53402)^10= 188四分之一 这甚至不是最终函数的全部,但是如果它已经这么慢了,我想首先修复它。显然,这是一个可笑的电话数量,但我真的看不到一个办法来解决它。我愿意接受任何想法,这里的任何帮助都会很好,谢谢 void fi
- 当
等于9时,size
循环运行53402次while
- 这意味着
的每次调用都会调用find_square()
自身53402次,直到find_square()
,在本例中为9row==size
find_square()
的调用总数为(53402)^10=
188四分之一
这甚至不是最终函数的全部,但是如果它已经这么慢了,我想首先修复它。显然,这是一个可笑的电话数量,但我真的看不到一个办法来解决它。我愿意接受任何想法,这里的任何帮助都会很好,谢谢
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];
}
}
void find\u square(字符***散列、字符***分组、字符**square、整数大小、整数行){
如果(行==大小){
返回;
}
int i=0;
while(分组dict[size-1][i]!=NULL){
填充行(正方形、行、大小、分组的[size-1][i]);
查找平方(散列、分组、平方、大小、行+1);
i++;
}
}
空白填充行(字符**正方形,整数行,整数大小,字符*字){
对于(int i=0;i
您关于创建“字格”的评论意味着您想打印或以其他方式报告9⨉9个方块,其中每一行和每一列都是grouped\u dict
中的一个单词。在这种情况下,如果到目前为止填充的字符包含无法用单词完成的部分行或列,则至少应该从find_square
返回
一种方法是在检查列的fill_row
调用之后,在find_square
中添加代码。在填充\u行
之后,每列至少部分填充。对于每一列,检查grouped\u dict
中是否至少有一个单词与该列匹配。如果没有,则从find_square
返回,不再尝试填充
这将极大地加快您的程序,但也可能进行其他优化。你应该考虑的事情包括:
- 排序
,以便在其中快速搜索匹配项分组\u dict
- 索引
,以复杂的方式搜索匹配项,甚至更快grouped_dict
- 交替地填充行和列,试图增加可能显示无法更快完成状态的冲突
- 使用通过检查
找到的部分匹配,以限制填充下一行或列时尝试的可能性grouped_dict
- 重点关注分组词典中的不常见字母
(53402)^10
递归调用,你需要一个更好的算法,而不是更快的代码。除非我弄错了,否则这段代码确实有明显的效果;它修改了正方形数组中的值。@JimMischel:谢谢,我错过了。我编辑过。