AVL树 - 在每个节点上操作

时间:2014-07-02 15:15:55

标签: c++ avl-tree

我知道这可能很模糊,但我不得不问!

所以......我今晚必须完成一项功课,而且我差不多完成但是我无法弄清楚我应该怎么做这个功能......

像标题所说的作业是一个AVL树形式的字典,一切正常,但现在我写了一个名为校正器的函数。它返回一个带有来自词典的10个建议的向量来纠正错字。

这是我必须编写函数的例子:

corrector("homeworrk");

return ->

1. homeworker
2. homeworking
3. homey
4. homicidal
5. homesickness
6. homespun
7. homestead
8. homesteader
9. homeward
10. homework

所以我开始写一个函数,它会返回0-1范围内的双精度来量化2个单词之间的相似性。

double Dictionnaire::similitude(const std ::string& mot1, const std ::string& mot2)
     {
        int minL = min(mot1.length(), mot2.length());
        int maxL = max(mot1.length(), mot2.length());

        double result = 0;

        for (int i = 0; i < minL; i++)
        {
           if (tolower(mot1[i]) == tolower(mot2[i]))
               result++;
        }


        return (result / maxL);
     }

现在..我不知道如何应用这个功能!我试过这个:但它很难实现......

std::vector<std::string>  Dictionnaire::recherche(NoeudDictionnaire *root,const std::string &motMalEcrit,std::vector<std::string> correction)
        {
            if ((root == 0) || (correction.size() == 10))
            {
                return correction;
            }
            if ( root->mot > motMalEcrit )
            {
                if(similitude(root->mot,motMalEcrit) >= 0.3)
                {
                    correction.push_back(root->mot);
                }
                return recherche(root->gauche, motMalEcrit,correction);
            }
            else
            {
                if(similitude(root->mot,motMalEcrit) >= 0.3)
                {
                    correction.push_back(root->mot);
                }
                return recherche(root->droite, motMalEcrit,correction);
            }

        }

我会采取任何帮助,我可以采取最糟糕的演员场景,我没有它。

谢谢你们!

0 个答案:

没有答案