ধরুন আমাদের কাছে দুটি অ্যারে আছে rowSum এবং colSum যেখানে নন-নেগেটিভ মান রয়েছে যেখানে rowSum[i]-এ ith সারির উপাদানগুলির যোগফল রয়েছে এবং colSum[j]-এ একটি 2D ম্যাট্রিক্সের jth কলামের উপাদানগুলির যোগফল রয়েছে। আমাদেরকে সাইজের অ-নেতিবাচক মানের (rowSum size x colSum size) সহ যে কোনো ম্যাট্রিক্স খুঁজে বের করতে হবে যা প্রদত্ত rowSum এবং colSum মানকে সন্তুষ্ট করে।
সুতরাং, ইনপুট যদি rowSum =[13,14,12] colSum =[9,13,17] এর মত হয়, তাহলে আউটপুট হবে
9 | 4 | 0 |
0 | 9 | 5 |
0 | 0 | 12 |
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- ম্যাট্রিক্স :=খালি ম্যাট্রিক্স তৈরি করুন
- পরিদর্শন করেছেন :=একটি নতুন সেট
- একটি ফাংশন ন্যূনতম() সংজ্ঞায়িত করুন। এটি r,c লাগবে
- মিনিট_টোটাল :=ইনফিনিটি
- টাইপ :=ফাঁকা স্ট্রিং
- আমি 0 থেকে r - 1 এর পরিসরে, কর
- যদি r[i]
- সূচক :=i
- টাইপ :='সারি'
- মিনিট_টোটাল :=r[i]
- যদি r[i]
- যদি c[i]
- মিনিট_টোটাল :=c[i]
- টাইপ :='col'
- সূচক :=i
- r[index] :=অসীম
- আমি 0 থেকে c - 1 এর পরিসরে,
- করুন
- যদি c[i] অসীম এবং c[i]>=মিনিট_মোট সমান না হয়, তাহলে
- c[i] :=c[i] - min_total
- ম্যাট্রিক্স[ইনডেক্স, i] :=মিনিট_মোট
- লুপ থেকে বেরিয়ে আসুন
- যদি c[i] অসীম এবং c[i]>=মিনিট_মোট সমান না হয়, তাহলে
- c[index] :=অসীম
- আমি 0 থেকে r - 1 এর পরিসরের জন্য, কর
- যদি r[i] অসীম এবং r[i]>=মিনিট_মোট সমান না হয়, তাহলে
- r[i] :=r[i] - মিনিট_মোট
- ম্যাট্রিক্স[i, সূচক] :=মিনিট_মোট
- লুপ থেকে বেরিয়ে আসুন
- যদি r[i] অসীম এবং r[i]>=মিনিট_মোট সমান না হয়, তাহলে
উদাহরণ
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
def solve(r, c): matrix = [[0]*len(c) for _ in range(len(r))] visited = set() def minimum(r,c): min_total = float('inf') type = '' for i in range(len(r)): if(r[i] < min_total): index = i type = 'row' min_total = r[i] for i in range(len(c)): if(c[i] < min_total): min_total = c[i] type = 'col' index = i if(type == 'row'): r[index] = float('inf') for i in range(len(c)): if(c[i] != float('inf') and c[i] >= min_total): c[i] -= min_total matrix[index][i] = min_total break if(type == 'col'): c[index] = float('inf') for i in range(len(r)): if(r[i] != float('inf') and r[i] >= min_total): r[i] -= min_total matrix[i][index] = min_total break visited.add((index,type)) while len(visited) != len(r)+len(c): minimum(r,c) return matrix rowSum = [13,14,12] colSum = [9,13,17] print(solve(rowSum, colSum))
ইনপুট
[13,14,12], [9,13,17]
আউটপুট
[[9, 4, 0], [0, 9, 5], [0, 0, 12]]