一个字Anagram的大O.

时间:2014-01-19 03:07:06

标签: java algorithm recursion big-o binary-search

我创建了一个带有字符串的程序,例如“computer”,并输出可以从中形成的所有字典单词。但是我无法弄清楚程序的Big-O效率是什么,因为它使用了递归和binarySearch。

此外,该程序可以提高效率吗?我还没有研究过哈希映射或其他数据结构。

import java.io.File;
import java.io.FileNotFoundException;
import java.util.*;

public class WordScramble {

    static String[] dictArr;
    static int index;

    // print permutation / combination of the characters of the string s (in order)
    public static void permWord(String s) { permWord("", s); }

    private static void permWord(String prefix, String s) {
        int n = s.length();
        if (n != 0){
            for (int i = 0; i < n; i++)
               permWord(prefix + s.charAt(i), s.substring(0, i) + s.substring(i+1, n));
        }
        index = Arrays.binarySearch(dictArr, prefix);
        if (index > 0)
            System.out.println(prefix);
    }
    public static ArrayList<String> getLines(File f) throws FileNotFoundException { 
        ArrayList<String> dict = new ArrayList<String>();
        Scanner scan = new Scanner(f);
        while (scan.hasNext()){
            dict.add(scan.next());
        }
        scan.close();
        return dict;
    }
    public static void main(String[] args) throws FileNotFoundException {
        File f = new File("wordlist.txt");
        ArrayList<String> dictionary = getLines(f);
        dictArr = new String[dictionary.size()];
        dictArr = dictionary.toArray(dictArr);
        permWord("computer");       
    }
}

1 个答案:

答案 0 :(得分:0)

更好的方法是扫描字典并检查哪些字是原始字的字谜。

您可以通过匹配原始单词中每个字母的数量来进行此检查。

复杂度O(k)其中k是字典中所有单词中的字母总数。

此链接显示了解决此类问题的更多方法。 Best algorithm to find anagram of word from dictonary