代码理解问题

时间:2011-05-26 18:54:54

标签: c++ algorithm data-structures

我正在经历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_rangeend_range背后的逻辑是什么。这里使用了什么基础算法或理论。

1 个答案:

答案 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

他只是随意定义一个足够大的范围,以便有足够的概率找到合适的匹配词。