在BST中添加数据时获得最少的比较次数

时间:2015-10-23 01:14:40

标签: java arrays binary-tree binary-search-tree minimum

我需要计算BST实现的最小比较次数,给定一个长度为N的数字数组,并改变添加元素的顺序。

例如,如果我有一个一个数组[1 2 3] ,它将打印出与给定订单的最小比较量为2,从6种不同的方式添加数字到那个树。

我实际编写的代码可能已经计算出来了,为每个组合创建一个新树以查找比较次数,最后通过使用方法 comparisonTree.findMin(); 。它很顺利,直到数组中的元素数量更大;实施不够有效。

我用于获取组合的代码是来自Generating all permutations of a given string的代码的修改版本。我正在寻找一种更有效的方法来完成这项任务,如果有的话。

public static int[] readInts(String cad) {
    String lines[] = cad.split("");
    int arr[] = new int[lines.length];
    for (int i = 0; i < arr.length; i++) {
        arr[i] = Integer.parseInt(lines[i]);
    }
    return arr;
}

public static int findMinimumComp(String str, BinarySearchTree<Integer> t) throws Exception {
    BinarySearchTree<Integer> compTree = new BinarySearchTree<>();
    int compAux = 100;
    findMinimumComp("", str, t, compTree, compAux);
    return compTree.findMin();
}

private static BinarySearchTree<Integer> findMinimumComp(String prefix, String str, BinarySearchTree<Integer> t, BinarySearchTree<Integer> compTree, int compAux) throws Exception {
    int n = str.length();
    int arr[] = new int[n];
    int comparation;

    if (n == 0) {
            arr = readInts(prefix);
            for (int a = 0; a < arr.length; a++) { // add elements
                t.insert(arr[a]);
            }
            comparation = t.getCompareCount(); //method for getting number of comparisons

            if (comparation < compAux || compTree.isEmpty()){
                compTree.insert(comparation); //comparisons tree
                compAux = comparation;
            }

            t.initializeCompareCount();
            t.makeEmpty();
    } else {
        for (int i = 0; i < n; i++) {
            findMinimumComp(prefix + str.charAt(i), str.substring(0, i) + str.substring(i + 1, n), t, compTree, compAux);
        }
    }
    return compTree;
}

0 个答案:

没有答案