我正在经历one code on net。
我不明白以下逻辑。这段代码非常有效。
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);
}
但我不明白使用start_range
和end_range
背后的逻辑是什么。这里使用了什么基础算法或理论。
答案 0 :(得分:1)
你真的应该发布更多行 - 我们肯定需要检查整个代码才能理解。
据我所知,'源'字是按大小排序的。 “候选”字词可能比其潜在匹配更短或更长。这就是start_range和end_range的用途。
虽然我很难弄清楚为什么作者不使用
start_range = 0;
end_range = src_word_max_len;
编辑: 好的,这只是他的部分优化(引用readme.txt):
我首先使用python和php解决了这个问题,然而,我的解决方案一直被拒绝,因为它需要太多时间来解决它(我的猜测)。在“cpp”目录中,我使用STL上传了我的解决方案,最后接受了(算法的基本思路几乎相同:扫描源文件的扫描范围)目前,我打算用其他语言尝试这个问题。作为java下次。可在此处找到问题陈述:http://www.facebook.com/careers/puzzles.php?puzzle_id=17
他只是随意定义一个足够大的范围,以便有足够的概率找到合适的匹配词。