मान लीजिए कि हमारे पास मुद्रा विनिमय दरों की एक एन एक्स एन तालिका है। हमें यह जांचना होगा कि ट्रेडों का कुछ क्रम हम कर सकते हैं या नहीं। अब किसी भी मुद्रा की कुछ राशि A से शुरू करके, हम उस मुद्रा के A से कुछ अधिक राशि प्राप्त कर सकते हैं। कोई लेन-देन लागत नहीं है और हम भिन्नात्मक मात्राओं का व्यापार भी कर सकते हैं।
इस मैट्रिक्स में प्रविष्टि [I, j] का मान मुद्रा की मात्रा का प्रतिनिधित्व करता है जिसे हम मुद्रा की एक इकाई i के साथ खरीद सकते हैं। अब मान लें कि मुद्रा 0 USD है, 1 CAD है और 2 EUR है। हम निम्नलिखित के साथ मध्यस्थता कर सकते हैं -
-
1 CAD को 0.65 EUR में बेचें
-
0.7865 USD (0.65 * 1.21)
. के लिए 0.65 EUR बेचें -
1.00672 CAD (0.65 * 1.21 * 1.28) पर 0.7865 USD बेचें
तो, अगर इनपुट पसंद है
1 | 1.28 | 0.82 |
0.78 | 1 | 0.65 |
1.21 | 1.55 | 1 |
तो आउटपुट ट्रू होगा।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
मैं के लिए 0 से लेकर आव्यूह के आकार तक के लिए, करें
-
j के लिए 0 से लेकर मैट्रिक्स के आकार तक[0], करें
-
मैट्रिक्स [आई, जे]:=- (मैट्रिक्स [आई, जे]) का आधार 2 मान लॉग करें
-
-
-
v :=मैट्रिक्स की पंक्ति गणना
-
k के लिए 0 से v की सीमा में, करें
-
मैं के लिए 0 से वी की सीमा में, करते हैं
-
j के लिए 0 से v की सीमा में, करें
-
मैट्रिक्स [आई, जे]:=न्यूनतम मैट्रिक्स [आई, जे] और (मैट्रिक्स [आई, के] + मैट्रिक्स [के, जे]) पी>
-
-
-
-
यदि मैट्रिक्स के विकर्ण में कोई भी आइटम गैर-शून्य है, तो सही है।
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
पायथन
import math class Solution: def solve(self, matrix): for i in range(len(matrix)): for j in range(len(matrix[0])): matrix[i][j] = −math.log(matrix[i][j], 2) v = len(matrix) for k in range(0, v): for i in range(0, v): for j in range(0, v): matrix[i][j] = min(matrix[i][j], matrix[i][k] + matrix[k][j]) return any(matrix[i][i] < 0 for i in range(len(matrix))) ob = Solution() matrix = [ [1, 1.28, 0.82], [0.78, 1, 0.65], [1.21, 1.55, 1] ] print(ob.solve(matrix))
इनपुट
matrix = [ [1, 1.28, 0.82], [0.78, 1, 0.65], [1.21, 1.55, 1] ]
आउटपुट
True