संपादित करें: मुझे यकीन नहीं है कि मेरा मूल प्रश्न पर्याप्त स्पष्ट है। मुझे एक एल्गोरिदम की आवश्यकता है जो एक सरणी को एक ऑर्डर से दूसरे में पुनर्व्यवस्थित करने के लिए चाल के न्यूनतम अनुक्रम की गणना करेगा। यह ज्ञात है कि दोनों सरणी में एक ही तत्व (कोई डुप्लिकेट नहीं) होगा और समान लंबाई होगी। उदाहरण के लिए:एल्गोरिदम: एक आदेश से दूसरे क्रम में एक सूची को पुनर्व्यवस्थित करने का इष्टतम तरीका?
reorder(
['d', 'a', 'c', 'b', 'e'],
['a', 'b', 'c', 'd', 'e']
)
की तरह कुछ लौट जाना चाहिए:
[
{move:'d', after:'b'},
{move:'c', after:'b'}
]
जो इंगित करता है कि मैं पहली बार के बाद 'बी' के तत्व 'प' बढ़ना चाहिए, तो के बाद 'बी' में ले जाएँ 'सी' और सरणी वांछित क्रम में होगा।
पृष्ठभूमि: मैं (, क्लाइंट साइड करने के लिए rtgui में कार्यक्षमता के सबसे चलती वास्तव में) एक परियोजना पर काम कर रहा हूँ। अभी मैं सॉर्टिंग पर काम कर रहा हूं। असल में मेरे पास divs की एक सूची है जिसे मैं कुछ मनमाने ढंग से क्रमबद्ध करना चाहता हूं। मैं वांछित क्रम इस प्रकार प्राप्त कर सकते हैं:
var hashes = {
before: [],
after: [],
};
var els = $('div.interesting-class').toArray();
var len = els.length;
for(var i = 0; i < len; i++) hashes.before.push(els[i].id);
els.sort(getSortComparator());
for(var i = 0; i < len; i++) hashes.after.push(els[i].id);
अब hashes.before
और hashes.after
अव्यवस्थित होते हैं और आदेश दिया तत्व आईडी की सूची। सूची को पुन: व्यवस्थित करते समय, सबसे महंगी ऑपरेशन, वास्तव में, वास्तव में डीओएम तत्वों को चारों ओर ले जा रहा है। इस प्रकार मैं यह कर दिया गया था:
var c = $('#container-id');
$(els).each(function() {
c.append(this);
});
यह काम करता है, लेकिन, आवश्यक की तुलना में धीमी औसतन के बाद से, केवल 2 या 3 तत्वों वास्तव में स्थानांतरित करने की जरूरत है। इसलिए, मुझे एक एल्गोरिदम की आवश्यकता है जो एक क्रम से दूसरे क्रम में एक सरणी को पुन: व्यवस्थित करने के लिए चाल के न्यूनतम अनुक्रम की गणना करेगा (इस मामले में, hashes.before
और hashes.after
पर चल रहा है)। क्या कोई सुझाव दे सकता है या कोई विचार दे सकता है?
मैंने अब तक कई सामान्य उद्देश्य "diff" एल्गोरिदम की कोशिश की है, लेकिन उन्होंने वास्तव में मुझे वह नहीं दिया जो मैं चाहता था। मुझे लगता है कि मुझे इसकी जरूरत है, लेकिन अधिक विशिष्ट है।
हां, मैं देख सकता हूं कि यह वही करेगा जो मैं चाहता हूं। ऐसा लगता है कि मैं इस तरह के लिए धैर्य छंटनी का उपयोग करने के लिए भी आगे बढ़ सकता हूं, क्योंकि इससे सूची क्रमबद्ध हो जाएगी और बाद में एक ही समय में मिल जाएगा। धन्यवाद! – jnylen