Как бы вы рассчитали пространственную сложность этой функции? - PullRequest
0 голосов
/ 24 февраля 2019

Меня попросили вычислить сложность пространства для созданной мной функции «машина анаграммы».Функция возвращает все возможные комбинации строк, заменяя буквы.И имеет объект «памятки», чтобы помочь в выполнении расчетов.Итак, вопрос: как бы вы вычислили сложность пространства этой функции?

const arrangeLetters = (function () {
    let dat = {
        memoization: {}
    };
    const arrange = (word) => {
        if (word.length < 2) {
            dat.memoization[word] = [word];
            return [word]
        }
        let curLetter, restOfWord;
        let newEntry = '';
        let allAnswers = [];
        let index = 0;
        let anagrams = [];
        let i, j;
        for (i = 0; i < word.length; i++) {
            curLetter = word[i];
            restOfWord = word.substr(0, i) + word.substr(i + 1, word.length - 1);
            let shortwordArray = dat.memoization[restOfWord] || arrange(restOfWord);

            for (j = 0; j < shortwordArray.length; j++) {
                newEntry = curLetter + shortwordArray[j];
                anagrams[index++] = newEntry;
                dat.memoization[curLetter + restOfWord] = anagrams;
                allAnswers.push(newEntry);
            }
        }
        return allAnswers;
    };
    return arrange;
})();

console.log(arrangeLetters('abefghi'));
...