Tuesday 15 February 2011

algorithm - How to find the inverse permutation? -


मान लीजिए मेरे पास एक अज्ञात वेक्टर v है, और एक क्रमचय p

मैं v से v (p) और p से कैसे पुनर्निर्माण कर सकता हूं?

एक बराबर प्रश्न एक क्रमचय q को खोजना होगा, जैसे कि p (q) = [1 2 ... n] ?

चूंकि ये चल रहा है एक तंग पाश में चलाने के लिए, मुझे सदिश (और कुशल) होने की आवश्यकता है।

यदि आप q के व्युत्क्रम क्रमवत्ता को पी के लिए चाहते हैं, इससे अधिक कुशल नहीं होगा:

  q (p) = 1: numel ( पी);  

आप इस प्रकार v से vp = v (p) और p से::

  q (p) = 1: numel (p); वी = वीपी (क्यू);  

या स्पष्ट रूप से q :

  v (p) = vp;  

(आपने देखा होगा कि v = vp (q) से मेल खाती है v == P ^ (- 1) * vp और v (p) = vp उपयुक्त क्रमचय ऑपरेटर (मैट्रिक्स) P = sparse (1: numel (p) के लिए P * v == vp से मेल खाती है, पी, 1) और P ^ (- 1) == पी। '== स्पार्स (पी, 1: न्यूज़ेल (पी), 1) । इस प्रकार से एक ही परिणाम देना।)

यदि आप इसे किसी लूप में उपयोग करते हैं, तो फिर से q या v क्रमशः [] को रीसेट करने के लिए मन करें यह ऑपरेशन यदि p पुराने p से कम था, तो p की लंबाई बदलने के मामले में, आप गलत परिणाम प्राप्त करेंगे।


No comments:

Post a Comment