ম্যাট্রিক্স চেইন গুণকে অনুকূলকরণ করুন


9

এই চ্যালেঞ্জটি হ'ল বেশ কয়েকটি ম্যাট্রিকের একটি পণ্যের জন্য সবচেয়ে দক্ষ গুণগত অর্ডার গণনা করা ।

ম্যাট্রিকগুলির আকার স্ট্যান্ডার্ড ইনপুটটির একক লাইনে নির্দিষ্ট করা হয়। মোট গুণন ব্যয়কে হ্রাস করতে গুণমানটি করতে হবে এমন ক্রম নির্দেশ করে পূর্ণসংখ্যার একটি তালিকা স্ট্যান্ডার্ড আউটপুটে আপনার মুদ্রণ করা উচিত।

উদাহরণ 1

ইনপুট

5x6 6x12 12x100 100x7

আউটপুট

3 2 1

ইনপুট লাইনটি ম্যাট্রিক্স আকারের একটি স্থান-বিভাজিত তালিকা হবে, যার প্রতিটি সারি সংখ্যা, তার পরে একটি xএবং কলামের সংখ্যা অনুসারে। উদাহরণস্বরূপ, একসাথে গুণ করার জন্য 4 টি ম্যাট্রিক রয়েছে (সুতরাং 3 টি মোট গুণ), এবং যেহেতু ম্যাট্রিক্সের গুণটি সহযোগী হয় সেগুলি কোনও ক্রমে করা যায়।

মোট ব্যয় হ্রাস করার জন্য আউটপুটটি ক্রম হওয়া উচিত। এটি পরবর্তী সম্পাদনের জন্য গুণনের সূচক উপস্থাপন করে পূর্ণসংখ্যার একটি স্থান-বিভাজিত তালিকা হওয়া উচিত। এন ম্যাট্রিক্সের জন্য, এই তালিকায় এন-1 এর মাধ্যমে 1 সহ সংখ্যাটি থাকা উচিত। উদাহরণস্বরূপ 1, আউটপুট 3 2 1মানে আপনার 12x100 * 100x7প্রথমে গুণ করা উচিত , তার পরে 6x12 * 12x7গুণ (দ্বিতীয় ম্যাট্রিক্স আগের ধাপের ফলাফলের চেয়ে বার), তারপরে অবশেষে ফলাফলটি 5x6 * 6x7গুণক।

ম্যাট্রিক্সের গুণগুলি সর্বদা সামঞ্জস্যপূর্ণ হবে, অর্থাৎ কোনও ম্যাট্রিক্সের কলামগুলির সংখ্যা পরবর্তী ম্যাট্রিক্সের সারিগুলির সংখ্যার সাথে মিলবে। দুটি ম্যাট্রিক্সের গুন খরচ ধরে AxB * BxCহয় A*B*C

আপনার কোডে 1009 টি পর্যন্ত ম্যাট্রিকের প্রতিটি 999 অবধি মাত্রার তালিকা পরিচালনা করতে হবে এবং যুক্তিযুক্ত সময়ে তা করতে হবে।

উদাহরণ 2

ইনপুট

5x10 10x5 5x15 15x5

আউটপুট

1 3 2

অথবা

3 1 2

উদাহরণ 3

ইনপুট

22x11 11x78 78x123 123x666 666x35 35x97 97x111 111x20 20x50

আউটপুট

2 3 4 5 6 7 8 1

দ্রষ্টব্য: যাচাইকরণের জন্য, তিনটি উদাহরণের জন্য সেরা মোট ব্যয় হ'ল 9114, 750 এবং 1466344।

সবচেয়ে কম কোড জয়!


আপনি শেষ উদাহরণটি সম্পর্কে নিশ্চিত? আমার কোড দ্বারা প্রদত্ত মোট ব্যয় 1466344
হাওয়ার্ড

@ হাওয়ার্ড: হ্যাঁ, আপনি ঠিক বলেছেন, আমার কোডে একটি বাগ। সংশোধন করা হয়েছে।
কীথ র্যান্ডাল

উত্তর:


1

রুবি, 176 172 205 টি অক্ষর

এখানে আরও একটি সংস্করণ রয়েছে (বেশ কয়েকটি অক্ষর দীর্ঘ) যা যুক্তিসঙ্গত সময়ে বড় ইনপুটটির জন্যও চলবে।

q=(gets.split<<$_[/\d+$/]).map &:to_i
r=Hash.new{|h,i|h[i]=Hash.new{|h,j|h[j]=1e12;h[j]=i==j ?[0,[]]:(i...j).map{|k|a,c=r[i][k];b,d=r[k+1][j];[a+b+q[i-1]*q[k]*q[j],c+d+[k]]}.min}}
$><<r[1][q.size-1][1]*' '

প্রথম সংস্করণ: রুবিতে সরাসরি পুনরাবৃত্তি বাস্তবায়ন। এটি একটি সম্পূর্ণ অনুসন্ধান করে এবং এর ফলে বড় ইনপুটগুলি ধীর হতে পারে।

k=->m{m[2]?(1..m.size-2).map{|l|s=k[m[0,l]+m[l+1..-1]];[m[l-1]*m[l]*m[l+1]+s[0],[l]+s[1].map{|u|u<l ?u:u+1}]}.min: [0,[]]}
$><<k[(gets.split<<$_[/\d+$/]).map &:to_i][1]*' '

চ্যালেঞ্জের অংশ হ'ল একটি যুক্তিসঙ্গত সময়ে 100 টি ম্যাট্রিকেস হ্যান্ডেল করা, যা এই কোডটি করে না।
কিথ র্যান্ডাল

@ কিথরান্ডাল আহ, আমি এই বাক্যটি পড়িনি (এবং এটি আমার পছন্দ নয় - এটি একটি খুব দৃ rest় সংযম)। আমি একটি সমাধান তৈরি করার চেষ্টা করব যা এই কেসটিও পরিচালনা করতে পারে।
হাওয়ার্ড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.