2010-07-30 13 views
8

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

उदाहरण के लिए, मेरी डेटाबेस/तालिका (इस डेटा fudged है) इस तरह दिखता है:

GBP x USD = 1.5 
USD x GBP = 0.64 
GBP x EUR = 1.19 
AUD x USD = 1.1 

सूचना है कि (GBP, अमरीकी डालर) = 1/(USD, GBP)!।

मैं निम्नलिखित परिणाम उम्मीद करेंगे:

print rate('GBP','USD') 
> 1.5 

print rate('USD','GBP') 
> 0.64 

print rate('GBP','EUR') 
> 1.19 

#now in the absence of an explicit pair, we imply one using the inverse 
print rate('EUR','GBP') 
> 0.84 

ये साधारण मामलों रहे हैं, इसे और अधिक दिलचस्प हो जाता है:

#this is the implied rate from (GBP,EUR) and (GBP,USD) 
print rate('EUR','USD') 
> 1.26 

या एक और भी जटिल उदाहरण सबसे कारगर अनुवाद 3 का उपयोग हो रही है या अधिक जोड़े:

print rate('EUR','AUD') 
> 1.38 

मुझे लगता है कि प्रोग्रामिंग का विवरण इस समस्या के अंतराल पहलुओं। मुझे लगता है कि एक कुशल या चालाक रिकर्सन है जो यहां किया जा सकता है। एकमात्र आवश्यकता यह है कि जोड़े के लिए जोड़े जाने के लिए कम से कम जोड़े का उपयोग किया जाता है (यह त्रुटि को कम करने के लिए है)। यदि कोई स्पष्ट उलटा नहीं दिया जाता है, तो एक जोड़ी को बदलने से आपको कुछ भी लागत नहीं होती है।

प्रेरणा
आदर्श वित्तीय दुनिया में, मुद्रा बाजार कुशल हैं। हकीकत में, यह 99% सच है। अक्सर बार, अजीब मुद्रा जोड़े उद्धृत नहीं किए जाते हैं या उन्हें निरंतर उद्धृत किया जाता है। यदि कोई स्पष्ट उद्धरण मौजूद है, तो हमें इसे अपने मनमानी गणनाओं में उपयोग करना होगा। यदि नहीं, तो हमें सबसे सटीक जोड़ी को इंगित करना चाहिए, जितना हम कर सकते हैं उतने दशमलव स्थानों तक। इसके अलावा, वे हमेशा 1 तक गुणा नहीं करते (वास्तव में, वे कभी 1 तक गुणा नहीं करते हैं); यह बाजार में फैल बोली/पूछताछ को दर्शाता है। इसलिए हम दोनों दिशाओं में जितने जोड़े जोड़ सकते हैं, लेकिन सभी मुद्राओं के लिए सामान्य रूप से कोड करने में सक्षम होना चाहते हैं।

मुझे लगता है कि मेरे पास एक सभ्य, क्रूर बल समाधान लागू है। यह काम करता है, लेकिन मैंने सोचा कि समस्या दिलचस्प थी और सोच रहा था कि क्या किसी और ने सोचा कि यह दिलचस्प/चुनौतीपूर्ण था। मैं व्यक्तिगत रूप से पायथन में काम कर रहा हूं लेकिन यह एक कार्यान्वयन से अधिक व्यायाम है, इसलिए psuedo कोड "काफी अच्छा" है।

+1

यह ProLog :) में एक बहुत ही आसान काम है। प्रक्रियात्मक एल्गोरिदम में अधिक विचार की आवश्यकता है। मेरा अनुमान है कि आपको रूपांतरणों का एक पेड़ बनाना होगा, शीर्ष नोड स्रोत मुद्रा है, और पत्ते - इस स्थिति में अंतिम संभावित मुद्रा है कि प्रत्येक शीर्ष-से-नीचे सर्किट के लिए प्रत्येक मुद्रा केवल एक बार दिखाई देती है। एल्गोरिदम तब प्राप्त न्यूनतम परिणामी विनिमय दर उठाएगा। रिकर्सिव विधियां। – AlexanderMP

उत्तर

12

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

+0

ओह, मैं ग्राफ के बारे में सब भूल गया। बिंगो! आपने उसे जवाब दिया है :) – AlexanderMP