तरह सरणी एक द्विआधारी खोज वृक्ष जावा में जोड़ने से पहले

वोट
0

मैं स्ट्रिंग्स कि आदेश AZ में हैं की एक सरणी है। मैं उन्हें एक संतुलित द्विआधारी खोज वृक्ष के लिए छँटाई के बारे में जाने के लिए सबसे अच्छा तरीका सोच रहा था। मेरे प्रारंभिक सोचा पहली छमाही और दूसरी छमाही में सरणी को विभाजित करने और फिर उन्हें व्यक्तिगत रूप से सॉर्ट है।

नहीं मैं आधे में विभाजित पेड़ के लिए अगले नोड प्राप्त करने के लिए रखने के लिए एक पुनरावर्ती तरह से उपयोग करने में सक्षम होना चाहिए? मैं बस अभी इसके चारों ओर मेरे सिर लपेटो और सोचा कि अगर किसी भी एक किसी भी विचार किया था मैं पूछना होगा नहीं कर सकते। मुझे सही दिशा में ले जाते हैं या कुछ उदाहरण प्रदान करते हैं। धन्यवाद!

मैं अपने BinaryTree क्लास और BinaryTreeNode कक्षा उपयोग कर रहा हूँ। संपादित करें:

public class BinaryTree {
private BinaryTreeNode root;

public void insert(String text) {

root = insertNode(root, text); 

}

private BinaryTreeNode insertNode(BinaryTreeNode curNode, String text) {
if (curNode == null) {
    BinaryTreeNode newNode = new BinaryTreeNode(text);
    //newNode.value = text;
    return newNode;
} else {
    if (text.compareTo(curNode.value) < 0 ) {
        //left child
        //use of recursion to properly place Node
        curNode.left = insertNode(curNode.left, text);
        return curNode;
    }

        else {

        //right
        //use of recursion to properly place Node
        curNode.right = insertNode(curNode.right, text);
        return curNode;
    }
}

}

public BinaryTreeNode getRoot() {
return root;
}

 public void setRoot(BinaryTreeNode root) {
this.root = root;
 }
 }

यह एक स्व द्विआधारी खोज वृक्ष संतुलन पर विचार किया जाएगा?

07/11/2011 को 09:32
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


2 जवाब

वोट
0

आप एक द्विआधारी खोज वृक्ष है कि है, तो आत्म संतुलन यह काफी शायद सरणी पूर्व सॉर्ट करने के लिए प्रतिकूल है। बेहतर एक संतुलित पेड़ को हल कर डेटा जोड़ने के लिए एल्गोरिथ्म काफी अव्यवस्थित डेटा जोड़ने के लिए एल्गोरिथ्म से अलग है।

लेकिन वहाँ कुछ भी नहीं 'आत्म संतुलन' कोड आप पोस्ट के बारे में है। यह सिर्फ एक साधारण द्विआधारी पेड़ प्रविष्टि एल्गोरिथ्म है।

07/11/2011 को 09:37
का स्रोत उपयोगकर्ता

वोट
1

आपका पेड़ आत्म संतुलन होना करने के लिए प्रतीत नहीं होता। एक आत्म संतुलन BST कदम उठाएंगे, एक प्रविष्टि के बाद, या सम्मिलन की संख्या के बाद, यह सुनिश्चित करें कि यह (लगभग) संतुलित है।

आप केवल एक बार तत्व जोड़ सकते हैं और पेड़ बस के लिए पढ़ता का उपयोग करते हैं, तो आप अपने क्रमबद्ध सरणी है और उसके बाद इस प्रकार आगे बढ़ना: बीच में तत्व का चयन करें। कुंजी के रूप में इसके साथ एक जड़ बनाते हैं और फिर रिकर्सिवली अपने रूट के बाईं सबट्री के रूप में अपनी छोड़ दिया (छोटे तत्व) तक तत्वों, और तत्व अपनी सही करने के लिए सही सबट्री के रूप में क्रमशः जोड़ें। आप एक BST कम या ज्यादा संतुलित है कि के साथ पहुंचना चाहिए। उदाहरण कोड:

public class BinaryTree {

    /* ... */


    //each recursive call receives a pair of bounds for the part of the 
    //array it has to process: left and right
    public static BinaryTreeNode nodeFromSortedArray(String[]a,
                                           int left, int right){

        if (right<left) return null;

        if (right==left)
            return new BinaryTreeNode(a[left]);

        int mid = (left+right)/2;

        //create node from middle element
        BinaryTreeNode n = new BinaryTreeNode(a[mid]);

        //recursively add elements to the left as its right subtree
        n.left = nodeFromSortedArray(a, left, mid-1);

        //recursively add elements to the right as its right subtree
        n.right = nodeFromSortedArray(a, mid+1, right);

        return n;
    }

    public static BinaryTree fromSortedArray(String[]a){
        BinaryTree bt = new BinaryTree();
        bt.setRoot(nodeFromSortedArray(a,0,a.length-1));
        return bt;
    }

    /* ... */
}

हालांकि, इस मामले में, आप बस अपने तत्वों क्रमबद्ध सरणी में रखने के लिए, और एक पेड़ के बजाय इसे में सूचकांक के लिए द्विआधारी खोज का उपयोग करें, हो सकता है। जटिलता ही हे (logn) होना चाहिए, लेकिन आप कम संदर्भ पूरी बात को स्टोर करने की जरूरत है, और कैश प्रदर्शन बेहतर होना चाहिए।

यदि आप एक परिवर्तनशील पेड़ है, और इसे कुशल बनाना चाहते करने की जरूरत है, तो आप शायद यह आत्म संतुलित, जिसमें जिस क्रम में आप के लिए यह कोई बात नहीं अपने तत्वों को जोड़ने के मामले बनाने की जरूरत होगी।

07/11/2011 को 09:51
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more