代码理解问题

Code understanding Question

本文关键字:问题 代码      更新时间:2023-10-16

我在网上浏览了一段代码。

我不明白下面的逻辑。这段代码工作起来非常快。

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_rangeend_range背后的逻辑是什么。这里使用了什么底层算法或理论。

你真的应该多写几行——我们肯定需要检查整个代码才能理解一些东西。

据我所知,"源"字是按大小排列的。"候选"单词可能比其潜在匹配单词更短或更长。这就是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

他只是任意定义了一个足够大的范围,以便有足够高的概率在其中找到正确的匹配单词