Модули OCaml и производительность

Вот является простое слово C# рекурсивное решение:

Метод:

public ArrayList CalculateWordPermutations(string[] letters, ArrayList words, int index)
        {
            bool finished = true;
            ArrayList newWords = new ArrayList();
            if (words.Count == 0)
            {
                foreach (string letter in letters)
                {
                    words.Add(letter);
                }
            }

            for(int j=index; j<words.Count; j++)
            {
                string word = (string)words[j];
                for(int i =0; i<letters.Length; i++)
                {
                    if(!word.Contains(letters[i]))
                    {
                        finished = false;
                        string newWord = (string)word.Clone();
                        newWord += letters[i];
                        newWords.Add(newWord);
                    }
                }
            }

            foreach (string newWord in newWords)
            {   
                words.Add(newWord);
            }

            if(finished  == false)
            {
                CalculateWordPermutations(letters, words, words.Count - newWords.Count);
            }
            return words;
        }

Вызов:

string[] letters = new string[]{"a","b","c"};
ArrayList words = CalculateWordPermutations(letters, new ArrayList(), 0);
7
задан hectorpal 11 November 2009 в 19:07
поделиться

1 ответ

Вы можете немного потерять производительность. Однако есть два смягчающих фактора:

  • Компилятор собственного кода OCaml может выполнять межмодульное встраивание, поэтому код может быть встроен даже в отдельные блоки компиляции (с парой предостережений - рекурсивные функции и аргументы функций являются не встроены в модули [1]).
  • Код все еще, вполне возможно, будет достаточно быстрым, а выигрыш в удобочитаемости и удобстве сопровождения вполне вероятно перевесит любые (предельные) затраты на производительность.

Я не знаю, дефункторизирует ли OCaml код, в котором функторы определены в одном исходном файле. Если это не так, то модули не должны добавлять никакого снижения производительности сверх того, которое уже понесли функторы.

В общем,

9
ответ дан 7 December 2019 в 03:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: