ভেরিয়েবলগুলি স্থির করে অনন্য ফলাফলের সংখ্যা


9

এর মতো সূত্রের সেট দেওয়া:

bacb
bcab
cbba
abbc

একটি অ্যালগরিদম দিন যা প্রতিটি ভেরিয়েবল প্রতিটি সূত্রে "0" বা "1" এর জন্য প্রতিস্থাপিত হলে আপনি যে অনন্য ফলাফল পেতে পারেন তা পেতে পারে।

ভেরিয়েবল এবং পদগুলি (k!)^2সহ প্রতিটি সূত্র রয়েছে । শর্তাবলী আপনার অ্যাসিপটোটিকস প্রকাশ করুন ।2k-1k^2k

দ্রুততম অ্যালগরিদম জিতেছে। টাইয়ের ক্ষেত্রে সমাধানটি কম অ্যাসিপটোটিক মেমরির ব্যবহারের সাথে জয়যুক্ত। যদি এখনও টাই হয় তবে প্রথম পোস্টটি জয়ী।


উপরের উদাহরণের জন্য নিম্নলিখিত ফলাফলগুলি ভেরিয়েবলগুলি স্থাপন করে অর্জিত হতে পারে:

1110, 0110, 1001, 0100, 1000, 0000, 0010, 1101, 1111, 0001, 1011, 0111

সুতরাং সঠিক উত্তরটি 12 1010টির মধ্যে, উপরের সূত্রগুলি ব্যবহার করে তৈরি করা যায় না।

230 , 12076 এবং 1446672 এর সম্পর্কিত সমাধান সহ আমি আরও তিনটি পরীক্ষার মামলা করেছি ।


স্পষ্টতা: প্রশ্নে কে কী? এটি কি কিছু বিমূর্ত ধ্রুবক?
isaacg

হ্যাঁ উদাহরণস্বরূপ, কম তবে বৃহত্তর সূত্রগুলির জন্য দ্রুততর সমাধানগুলির মধ্যে সম্পর্কগুলি প্রতিরোধ করা।
orlp

সুতরাং প্রতিটি অক্ষর a, b... একটি পরিবর্তনশীল ? এবং আমরা সবসময় কেবল মাত্র একটি অসম সংখ্যক ভেরিয়েবল? ভেরিয়েবলের ক্রম কত দীর্ঘ এবং আপনি কতগুলি সূত্র দেওয়া হচ্ছে তা বিবেচনা করে না?
flawr

@ ফ্লোয়ার ভেরিয়েবলের সংখ্যা, পদগুলির সংখ্যা এবং সূত্রের সংখ্যার মধ্যে সঠিক সম্পর্কটি প্রশ্নটিতে দেওয়া হয়েছে।
orlp

'কি হতে পারে' এর অর্থ কি আপনি $ (কে!) ^ 2 $ সূত্র পেতে পারেন বা সেখানে ঠিক $ (কে!) ^ 2 $ সূত্র রয়েছে? তা ছাড়া, আপনার কাছে সেই স্পেসিফিকেশন সহ কোনও অ্যালগরিদমের জন্য কোনও অ্যাপ্লিকেশন রয়েছে? আমি কেবল জিজ্ঞাসা করছি কারণ চশমাগুলি বেশ স্বেচ্ছাচারী বলে মনে হচ্ছে।
flawr

উত্তর:


2

গণিত, ও (কে ^ 2 (কে!) ^ 2) সময়

Length[Union@@(Fold[Flatten[{StringReplace[#,#2->"0"],StringReplace[#,#2->"1"]}]&,#,Union[Characters[#]]]&/@#)]&

আশা করি সময় জটিলতা সঠিকভাবে গণনা করেছি। ইনপুট যেমন সূত্রের একটি তালিকা {"bacb","bcab","cbba","abbc"}। আমার মেশিনে প্রতিটি পরীক্ষার ক্ষেত্রে 30 সেকেন্ডেরও কম সময় চলে তবে কে নিরঙ্কুশ সময় সম্পর্কে চিন্তা করে?

ব্যাখ্যা:

  • প্রথম প্রথমটি, &শেষে #প্রথম যুক্তিকে উল্লেখ #2করে দ্বিতীয় যুক্তি ইত্যাদি উল্লেখ করে এটি একটি খাঁটি ফাংশন করে etc.
  • Length[*..*] এর ভিতরে থাকা তালিকার দৈর্ঘ্য গ্রহণ করে।
  • Union@@(*..*)অন্তর্ভুক্ত তালিকাটি গ্রহণ করে এবং এটি আর্গুমেন্ট হিসাবে সরবরাহ করে Union, যা এর কোনও যুক্তিতে অনন্য উপাদানের একটি তালিকা ফেরত দেয়।
  • *..*&/@#একটি খাঁটি ফাংশন নেয় এবং সূত্রের তালিকার উপরে এটি ম্যাপ করে, যাতে এটি {a,b,c}হয়ে যায় {f[a],f[b],f[c]}। মনে রাখবেন যে নেস্টেড খাঁটি ফাংশনগুলিতে #nএর অভ্যন্তরীণ আর্গুমেন্টগুলিকে বোঝায়।
  • Fold[*..*&,#,*..*]একটি সংযোজক ফাংশন নেয়, শুরুর মান এবং তালিকা এবং ফেরত দেয় f[f[...[f[starting value,l_1],l_2],...],l_n]
  • Union[Characters[#]] বর্তমান সূত্রে সমস্ত চরিত্র গ্রহণ করে এবং আমাদেরকে ভেরিয়েবলগুলি দিয়ে সমস্ত অনন্য উপাদান পেয়ে যায়।
  • Flatten[*..*]তার যুক্তি চ্যাপ্টা, যাতে {{{a},b},{{c,{d}}}}হয়ে যায় {a,b,c,d}
  • {*..*,*..*}উপরেরটি ব্যবহার করে দুটি ফলাফল একত্রিত করার সহজ উপায় Flatten
  • StringReplace[#,#2->"0/1"]পূর্ববর্তী ফলাফলটি গ্রহণ করে এবং এটি বর্তমান ভেরিয়েবলের সাথে হয় 0বা দুটি দ্বারা প্রতিস্থাপন করে 1

আপনি কেন kআপনার সময়ে পরিবর্তনশীল হিসাবে ব্যবহার করছেন ? তবুও ফ্যাক্টরিয়াল সময়! রাম রাম!
theonlygusti

অপ্টটি বলেছে: "শর্ত অনুযায়ী আপনার অ্যাসিম্পটিকগুলি প্রকাশ করুন k।" এছাড়াও, GeneralUtilities`Benchmarkব্যবহৃত প্রতিটি পদ্ধতির জন্য আমাকে একটি করতে হয়েছিল ।
LegionMammal978

আপনার অ্যালগরিদমের একটি সরল ইংরেজী বিবরণ যুক্ত করতে যত্নশীল? আমি গণিতের সাথে অপরিচিত তাই আমি আপনার সমাধানটি যাচাই করতে পারি না।
orlp
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.