ধরুন আমাদের কাছে মুদ্রা বিনিময় হারের একটি N x N টেবিল আছে। আমাদের চেক করতে হবে যে ট্রেডের কিছু সিকোয়েন্স আছে কি না আমরা করতে পারি। এখন যে কোনো মুদ্রার কিছু পরিমাণ A দিয়ে শুরু করে, আমরা সেই মুদ্রার A-এর থেকেও বেশি কিছু পরিমাণে শেষ করতে পারি। কোন লেনদেনের খরচ নেই এবং আমরা ভগ্নাংশের পরিমাণও ট্রেড করতে পারি।
এই ম্যাট্রিক্সে এন্ট্রিতে থাকা মান [I, j] মুদ্রা j এর পরিমাণকে প্রতিনিধিত্ব করে যা আমরা মুদ্রা i এর একক দিয়ে কিনতে পারি। এখন বিবেচনা করুন মুদ্রা 0 হল USD, 1 হল CAD এবং 2 হল EUR। আমরা নিম্নলিখিত -
দিয়ে একটি সালিশ করতে পারি-
0.65 EUR
এ 1 CAD বিক্রি করুন -
0.65 ইউরো 0.7865 USD (0.65 * 1.21) এ বিক্রি করুন
-
0.7865 USD বিক্রি করুন 1.00672 CAD (0.65 * 1.21 * 1.28)
সুতরাং, যদি ইনপুট মত হয়
1 | 1.28 | 0.82 |
0.78 | 1 | 0.65 |
1.21 | 1.55 | 1 |
তাহলে আউটপুট হবে True।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
আমি 0 থেকে ম্যাট্রিক্সের আকারের মধ্যে, কর
-
j এর জন্য রেঞ্জ 0 থেকে ম্যাট্রিক্সের আকার[0], করুন
-
ম্যাট্রিক্স[i,j] :=−log বেস 2 এর মান (ম্যাট্রিক্স[I, j])
-
-
-
v :=ম্যাট্রিক্সের সারি গণনা
-
k এর জন্য 0 থেকে v রেঞ্জে, করুন
-
0 থেকে v রেঞ্জের জন্য, করুন
-
0 থেকে v রেঞ্জের মধ্যে j এর জন্য, করুন
-
ম্যাট্রিক্স[I, j] :=ম্যাট্রিক্স[I, j] এবং (ম্যাট্রিক্স[I, k] + ম্যাট্রিক্স[k,j])
-
-
-
-
ম্যাট্রিক্সের কর্ণের যেকোন আইটেম অ-শূন্য হলে True ফেরত দিন।
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
পাইথন
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