问题描述
|
我正在网上查看一个代码。
我不明白以下逻辑。此代码可以正常工作,并且运行非常迅速。
for (int i = 0; i < typo_word_vec.size(); i++)
{
float each_typo_word_len = (float)typo_word_vec[i].size();
int start_range = each_typo_word_len - floor((each_typo_word_len / lower_bound_word_size) * each_typo_word_len) - 1;
if (start_range < 1)
start_range = 1;
int end_range = each_typo_word_len + ceil((each_typo_word_len / upper_bound_word_size) * each_typo_word_len) + 1;
if (end_range > src_word_max_len)
end_range = src_word_max_len - 1;
call_get_dist(i,start_range,end_range);
}
但是我不明白使用ѭ1和ѭ2背后的逻辑是什么。
解决方法
您确实应该再发布几行-我们绝对需要检查整个代码以了解某些内容。
据我了解,“源”字按大小排序。 “候选”字可能比其潜在的匹配短或长。那就是start_range和end_range的用途。
尽管我很难弄清楚为什么作者不使用
start_range = 0;
end_range = src_word_max_len;
编辑:
好的,这只是他的部分优化(引用readme.txt):
我首先使用python和php解决了此问题,但是由于需要花费太多时间解决它(我的猜测),所以我的解决方案一直被拒绝。在\“ cpp \”目录中,我使用STL使用c ++上传了我的解决方案,并最终被接受(算法的基本思想几乎是相同的:修剪源文件的扫描范围)目前,我计划使用其他方法尝试解决此问题。下次使用Java之类的语言。问题的陈述可以在这里找到:http://www.facebook.com/careers/puzzles.php?puzzle_id=17
他只是任意地定义一个范围,该范围要足够大,以便有足够的可能性在其中找到正确的匹配词。