यदि लोगों को यह सवाल लगता है और Node.js या ब्राउज़र के लिए कुछ लागू करने की आवश्यकता है, तो मैं एक कार्यान्वयन के लिए एक लिंक और कोड उदाहरण प्रदान कर रहा हूं, जो मैंने लिखा है कि आप यहां github पर पा सकते हैं: ( https://github.com) / Pyonto/jqgram.git ) मौजूदा PyGram पायथन कोड ( https://github.com/Sycondaman/PyGram ) पर आधारित है ।
यह एक ट्री एडिट डिस्टेंस एंबेडिकेशन एल्गोरिदम है, लेकिन यह सच एडिट डिस्टेंस को खोजने की कोशिश की तुलना में बहुत तेज है। सन्निकटन O (n लॉग एन) समय और O (n) स्पेस में प्रदर्शन करता है जबकि सही एडिट डिस्टेंस अक्सर O (n ^ 3) या O (n ^ 2) होता है, जो ट्रू एडिट डिस्टेंस के लिए ज्ञात एल्गोरिदम का उपयोग करता है। वह शैक्षणिक पेपर देखें जिसमें से PQ-Gram एल्गोरिथम आता है: ( http://www.vldb2005.org/program/paper/wed/p301-augsten.pdf )
तो jqgram का उपयोग करना:
उदाहरण:
var jq = require("jqgram").jqgram;
var root1 = {
"thelabel": "a",
"thekids": [
{ "thelabel": "b",
"thekids": [
{ "thelabel": "c" },
{ "thelabel": "d" }
]},
{ "thelabel": "e" },
{ "thelabel": "f" }
]
}
var root2 = {
"name": "a",
"kiddos": [
{ "name": "b",
"kiddos": [
{ "name": "c" },
{ "name": "d" },
{ "name": "y" }
]},
{ "name": "e" },
{ "name": "x" }
]
}
jq.distance({
root: root1,
lfn: function(node){ return node.thelabel; },
cfn: function(node){ return node.thekids; }
},{
root: root2,
lfn: function(node){ return node.name; },
cfn: function(node){ return node.kiddos; }
},{ p:2, q:3 },
function(result) {
console.log(result.distance);
});
और यह आपको 0 और 1. के बीच एक संख्या प्रदान करता है। शून्य के जितना करीब, उतने ही अधिक निकटता से संबंधित दो पेड़ जख्मी दिखते हैं। एक दृष्टिकोण इसकी गति को देखते हुए कई पेड़ों के बीच से कई नज़दीकी पेड़ों पर संकीर्ण करने के लिए jqgram का उपयोग करने के लिए हो सकता है, फिर बचे हुए कुछ पेड़ों पर सही संपादित दूरी का उपयोग करें, जिन्हें आपको बारीकी से निरीक्षण करने की आवश्यकता है, और इसके लिए आप अजगर को ढूंढ सकते हैं उदाहरण के लिए झांग और शाशा एल्गोरिदम के संदर्भ या पोर्ट के लिए कार्यान्वयन।
ध्यान दें कि lfn और cfn पैरामीटर निर्दिष्ट करते हैं कि प्रत्येक पेड़ को नोड लेबल नामों और प्रत्येक पेड़ की जड़ के लिए बच्चों की स्वतंत्र रूप से सरणी कैसे निर्धारित करनी चाहिए ताकि आप किसी ऑब्जेक्ट की तुलना किसी ब्राउज़र जैसे ब्राउज़र DOM की तुलना में कर सकें। आपको बस इतना करना है कि प्रत्येक रूट के साथ उन कार्यों को प्रदान करना है और jqgram बाकी काम करेगा, अपने lfn और cfn को कॉल करके कार्य करता है ताकि पेड़ों का निर्माण किया जा सके। तो इस अर्थ में यह (मेरी राय में वैसे भी) PyGram की तुलना में उपयोग करने के लिए बहुत आसान है। इसके अलावा, इसका जावास्क्रिप्ट, इसलिए इसे क्लाइंट या सर्वर-साइड का उपयोग करें!
ALSO, साइकिल का पता लगाने के संबंध में जवाब देने के लिए, jqgram के अंदर क्लोन विधि की जाँच करें, वहाँ चक्र का पता लगाना है, लेकिन इसके लिए श्रेय नोड-क्लोन के लेखक को जाता है जिसमें से उस टुकड़े को थोड़ा संशोधित किया गया था और शामिल किया गया था।
MOVE(A,B)
ऐसा ही प्रतीत होता है जैसेINSERT(A,B)
किA
कोई बच्चा नहीं है।A
अगर कोई करता है तो उसके बच्चों का क्या होता हैINSERT(A,B)
? (क्या वेA
माता-पिता से जुड़े होंगे ?)