গাছ গুনুন


11

একটি গাছ একটি সংযুক্ত, কোনও চক্রবিহীন অচলিত গ্রাফ। আপনার কাজটি প্রদত্ত সংখ্যার দ্বার সহ কত স্বতন্ত্র গাছ রয়েছে তা গণনা করা।

দুটি গাছ আইসোমর্ফিক না হলে স্বতন্ত্র হিসাবে বিবেচিত হয় । দুটি গ্রাফ isomorphic হয় যদি তাদের স্বতন্ত্র শিখাগুলি এমনভাবে জোড় করা যায় যে একটি গ্রাফের দুটি সূচকের মধ্যে একটি প্রান্ত থাকে এবং কেবল অন্য গ্রাফের সেই শীর্ষকোঠগুলির সাথে সংযুক্ত কোণগুলির মধ্যে একটি প্রান্ত থাকে তবেই। আরও সম্পূর্ণ বিবরণের জন্য উপরের লিঙ্কটি দেখুন।

1 থেকে 6 টি আকারের স্বতন্ত্র গাছগুলি দেখতে কীভাবে তা দেখতে এখানে একবার দেখুন ।

আপনি যে সিরিজটি আউটপুট দেওয়ার চেষ্টা করছেন সেটি হ'ল ওইআইএসে A000055

বিধিনিষেধ : আপনার সমাধানটি ইনপুটটিতে চালাতে কয়েক মিনিট বা তারও কম সময় নিতে হবে 6। এটি উদ্ঘাটিত সময় অ্যালগোরিদমগুলি অপসারণ করার উদ্দেশ্যে নয়, তবে এটি দ্বিগুণ-এক্সফোনেনশিয়াল সময়ের অ্যালগরিদমগুলি যেমন সমস্ত প্রান্তের সেটগুলিতে ব্রুট জোর করে eliminate

ইনপুট: যেকোন অ-নেতিবাচক পূর্ণসংখ্যা।

ইনপুট STDIN, কমান্ড লাইন প্যারামিটার, ফাংশন ইনপুট ইত্যাদি সহ যে কোনও মানক উপায় হতে পারে including

আউটপুট: ইনপুট হিসাবে অনেকগুলি উল্লম্ব সহ স্বতন্ত্র গাছের সংখ্যা।

আউটপুট STDOUT, ফাংশন রিটার্ন ইত্যাদি সহ যে কোনও মানক উপায় হতে পারে Out

উদাহরণ: 0, 1, 2, 3, 4, 5, 6, 7 ফিরে আসা উচিত 1, 1, 1, 1, 2, 3, 6, 11

স্কোরিং: কোড গল্ফ, বাইট দ্বারা। সংক্ষিপ্ততম কোডটি জয় হোক!

স্ট্যান্ডার্ড লুফোলস নিষিদ্ধ।

উত্তর:


3

সিজেএম (69 বাইট)

]qi:X,{1e|,:):N{N\f{1$%!*}W$.*:+}%1$W%.*:+N,/+}/W\+_1,*X=\_W%.*:+-Y/z

অনলাইন ডেমো

ব্যাখ্যা

মূল ধারণাটি ওআইএস-এ বর্ণিত জেনারেটিং ফাংশনটি বাস্তবায়ন করা। ইনপুট একটি বাজে বিশেষ কেস, তবে আমি যে চূড়ান্ত টুইটগুলি করেছি তা উত্পাদনের সমাপ্ত হয়েছিল - সেই মামলার জন্য 1 , সুতরাং জেড (পরম মানের জন্য) এটি পরিপাটি করে। এটাই এখানে সবচেয়ে অদ্ভুত কৌশল।0-1z- র

.*:+তিনবার পুনরাবৃত্তি করা হয়, এবং দেখে মনে হচ্ছে এটি নিষ্ক্রিয় হিসাবে কোনও বাইট সংরক্ষণ করতে পারে {.*:+}:F~। যাইহোক, এটি বিশেষ কেস সাথে বিরতি দেয় কারণ এটি বাহ্যিক লুপটি মোটেই কার্যকর করে না।0


আমরা A000081 এর জন্য সহায়ক উত্পাদক ফাংশনটি ব্যবহার করি , যার পদগুলির পুনরাবৃত্তি রয়েছে

a[0] = 0
a[1] = 1
For n >= 1, a[n+1] = (sum_{k=1}^n a[n-k+1] * sum_{d|k} d * a[d]) / n

আমি রুপান্তর নিশ্চিত কিছু কিছু ভাষায় বিল্ট-ইন আছে আছি Möbius বিপরীত জন্য কিন্তু CJam না; আমি যে সেরা পদ্ধতির সন্ধান পেয়েছি তা হ'ল একটি অ্যারে ম্যাপিং ডি তৈরি করা এবং তারপরে একটি ব্যবহারের সাথে পয়েন্টওয়াইজ গুণ করা । নোট করুন যে এখানে সূচক 1 এ একটি সূচনা তৈরি করা সুবিধাজনক , কারণ ওজনগুলি সেট আপ করার সময় আমরা শূন্য দ্বারা বিভাগ এড়াতে চাই। এটিও নোট করুন যে পয়েন্টওয়াইজ অপারেশনে সরবরাহ করা দুটি অ্যারে যদি একই দৈর্ঘ্য না হয় তবে লম্বা থেকে মানগুলি কোনও ছোঁয়া যায় না: সুতরাং আমাদের হয় প্রথম k এর শর্তাদি গ্রহণ করতে হবেΣ|×একটি[]k % d == 0 ? d : 0একটি.*একটি বা ওজনের অ্যারে এন পর্যন্ত যেতে। পরেরটি সংক্ষিপ্ত বলে মনে হচ্ছে। সুতরাং এই বিপরীত Möbius জন্য অ্যাকাউন্ট রূপান্তরএকটিএনN\f{1$%!*}W$.*:+

যদি আমরা বিপরীত Möbius রূপান্তরের ফলাফলকে কল করি তবে Mআমাদের এখন

একটি[এন+ +1]=1এনΣ=1এনএকটি[এন-+ +1]×এম[]

অঙ্কটি স্পষ্টতই একটি রূপান্তর থেকে একটি শব্দ, সুতরাং আমরা এটি এম বা এর অনুলিপি বিপরীত করে এবং তারপরে বিন্দুবৃত্তীয় গুণন এবং যোগফলের মাধ্যমে এটি পরিচালনা করতে পারি । আবার, আমাদের সূচি থেকে পরিবর্তিত হয় 1 থেকে এন , এবং উপরন্তু আমরা সূচকের যা সমষ্টি আপ পেয়ার করতে চান এন + + 1 , তাই এটি সূচক আবার সুবিধাজনক একটি আমরা এখন জন্য দায়ী থাকেন 1 বদলে 0. থেকেএকটিএম1এনএন+ +1একটি

 qi:X,{   ,:):N{N\f{1$%!*}W$.*:+}%1$W%.*:+N,/+}/

সহায়ক উত্পাদনের ক্রিয়াটির বিন্দু A000055 সূত্র বিভাগ দ্বারা দেওয়া হয়েছে:

G.f.: A(x) = 1 + T(x) - T^2(x)/2 + T(x^2)/2,
where T(x) = x + x^2 + 2*x^3 + ... is the g.f. for A000081.

নিরিখে , এর মানে হল আউটপুট আমরা চাইতে যে [ X = 0 ] + + একটি [ X ] + + 1একটি

[এক্স=0]+ +একটি[এক্স]+ +12(একটি[এক্স/2]-Σআমি=0এনএকটি[আমি]×একটি[এন-আমি])

একটি[এক্স/2]এক্স1,*X=

0\+একটি[0]=0এক্স=0W\+-2একটি[এক্স]+ +Σআমি=0এনএকটি[আমি]×একটি[এন-আমি]2একটি[এক্স]

সুতরাং আমরা ব্যাখ্যা করেছি

 qi:X,{   ,:):N{N\f{1$%!*}W$.*:+}%1$W%.*:+N,/+}/W\+_1,*X=\_W%.*:+-Y/

1]এন=1

1]qi:X,1>{ ... }/

এক্স=0একটি[-1 1]0[এক্স=0]X!+1e|

একটি1এন=0

]qi:X,{ ... /+}/

স্পষ্টতই শূন্য দ্বারা বিভাগ দেয়। তবে আমরা যদি চেষ্টা করি

]qi:X,{1e| ... /+}/

তারপর এটি কাজ করে। আমরা পেতে

             e# Stack: [] 0
1e|          e# Stack: [] 1
,:):N        e# Stack: [] [1]
{            e# We only execute this loop once
  N\f{1$%!*} e#   1 divides 1, so stack: [] [1]
  W$.*       e#   Remember: if the two arrays supplied to the pointwise operation
             e#   are not the same length then the values from the longer one are
             e#   left untouched. Stack: [] [1]
  :+         e#   Fold over a singleton. Stack: [] 1
}%           e# And that was a map, so stack: [] [1]
1$W%.*:+     e# Another [1] [] .*:+, giving the same result: 1
N,/          e# 1 / 1 = 1
+            e# And we append 1 to a giving [1]

যা আমাদের প্রয়োজনীয় মূল্য ঠিক উত্পাদন করে।

এক্স=0-1[-1](-1-12(-1×-1))=-101-11z


1

পাইথ, 35 বাইট

l{m`SmSSMcXdUQk2.pQusm+L,dhHGhHtQ]Y

প্রদর্শন.

এই প্রোগ্রামটি দুটি ভাগে বিভক্ত করা যেতে পারে: প্রথমে, আমরা সম্ভাব্য সমস্ত গাছ তৈরি করি, তারপরে আমরা নকলগুলি সরিয়ে ফেলি।

এই কোড গাছ উত্পন্ন: usm+L,dhHGhHtQ]Y। গাছগুলি প্রান্তগুলির সংক্ষিপ্ত তালিকা হিসাবে উপস্থাপিত হয়, এরকম কিছু:

[0, 1, 0, 2, 2, 3, 1, 4]

প্রতিটি সংখ্যা একটি শীর্ষবিন্দুর জন্য দাঁড়ায় এবং প্রতি দুটি সংখ্যা একটি প্রান্ত। এটি ইতিমধ্যে বিদ্যমান প্রতিটি সম্ভাব্য ভার্টেক্স বারবার একটি প্রান্ত বেনিন যোগ করে এবং এটি নতুন তৈরি হওয়া একটি দ্বারা তৈরি করা হয়েছে এবং এটি পূর্ববর্তী পদক্ষেপ থেকে প্রতিটি সম্ভাব্য গাছে যুক্ত করে। এটি সমস্ত সম্ভাব্য গাছ উত্পন্ন করে, যেহেতু সমস্ত গাছ বারবার একটি বৃক্ষ এবং এটি থেকে বিদ্যমান গাছে একটি প্রান্ত যোগ করে উত্পন্ন করা যেতে পারে। তবে আইসোমরফিক গাছ তৈরি করা হবে।

পরবর্তী, প্রতিটি গাছের জন্য, আমরা প্রতিটি সম্ভাব্য রিলেবলিং সম্পাদন করি। এটি m ... .pQশিখর ( ) এর সমস্ত সম্ভাব্য ক্রমবিন্যাসের উপরে ম্যাপিংয়ের মাধ্যমে এবং এরপরে গাছটিকে স্ট্যান্ডার্ড অর্ডার থেকে সেই ক্রমকে স্থানান্তরিত করে দিয়ে করা হয় XdUQkdগাছ kহল , হল অনুমান।

তারপরে, আমরা প্রান্তগুলি পৃথক তালিকার সাথে পৃথক করুন c ... 2, প্রতিটি প্রান্তের সাথে শীর্ষে বাছাই করুন SM, গাছের মধ্যে প্রান্তগুলি বাছাই করুন S, প্রতিটি গাছের ক্যানোনিকাল প্রতিনিধিত্ব করুন। এই দুটি পদক্ষেপের কোড mSSMcXdUQk2.pQ

এখন, আমাদের প্রতিটি গাছের প্রতিটি সম্ভাব্য রিলেবলিং নিয়ে গঠিত তালিকার একটি তালিকা রয়েছে। আমরা এই তালিকাগুলি অনুসারে বাছাই করি S। যে কোনও দুটি আইসমোর্ফিক গাছ অবশ্যই গাছের দলে পুনর্বিবেচিত হতে সক্ষম হতে হবে। এই সত্যটি ব্যবহার করে আমরা প্রতিটি তালিকাকে স্ট্রিংয়ে রূপান্তর করি `, তারপরে সেই তালিকাগুলির সেটটি তৈরি করি {এবং এর দৈর্ঘ্য আউটপুট করি l

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