Ologies 1,2,…, n top এ টপোলজির সংখ্যা গণনা করুন


9

কার্য

একটি ফাংশন / প্রোগ্রাম লিখুন যা nপরামিতি / ইনপুট হিসাবে নেয় এবং সেটটিতে টোপোলজির সংখ্যা (যা নীচে প্রদর্শিত হয়) মুদ্রণ / প্রদান করে {1,2,...,n}

টপোলজির সংজ্ঞা

এক্সকে যেকোন সীমাবদ্ধ সেট হতে দিন এবং ধরে নিন যে টি, যা এক্সের পাওয়ার সেটের উপসেট (অর্থাৎ এক্সের উপসর্গ সমন্বিত একটি সেট), এই শর্তগুলি পূরণ করে :

  1. এক্স এবং খালি সেট টিতে রয়েছে

  2. দুই সেট ইউ ও V টি রয়েছে, তাহলে ইউনিয়ন ঐ দুই সেট টি রয়েছে

  3. দুটি সেট ইউ এবং ভি যদি টি তে থাকে, তবে সেই দুটি সেটের ছেদ টি তে হয় in

... তারপরে টি কে এক্স টপোলজি বলা হয়।

বিশেষ উল্লেখ

  1. আপনার প্রোগ্রাম হয়:

    • একটি ফাংশন যা nপ্যারামিটার হিসাবে নেয়
    • বা একটি প্রোগ্রাম যা ইনপুট n

    এবং সেটটিতে (স্বতন্ত্র) টোপোলজির সংখ্যা মুদ্রণ করে বা প্রদান করে {1,2,...,n}

  2. n কোনও অ-নেতিবাচক পূর্ণসংখ্যা যা 11 এর চেয়ে কম (অবশ্যই আপনার সমস্যাটি যদি 11 এর চেয়ে বড় আকারে পরিচালনা করে তবে কোনও সমস্যা নেই), এবং আউটপুটটি ইতিবাচক পূর্ণসংখ্যা।

  3. আপনার প্রোগ্রামে কোনও ধরণের গ্রন্থাগার ফাংশন বা নেটিভ ফাংশন ব্যবহার করা উচিত নয় যা সরাসরি টপোলজির সংখ্যা গণনা করে।

উদাহরণ ইনপুট (এন এর মান): 7

উদাহরণ আউটপুট / রিটার্ন: 9535241

আপনি আপনার রিটার্নের মানটি এখানে বা এখানে যাচাই করতে পারেন ।

অবশ্যই, সংক্ষিপ্ততম কোড জিতেছে।


বিজয়ীর সিদ্ধান্ত নেওয়া হয়েছে, তবে, সংক্ষিপ্ত কোড উপস্থিত হলে আমি বিজয়ীকে পরিবর্তন করতে পারি ..


এটি কি এই শতাব্দীতে ফলাফল দিতে হবে, বা যথার্থতার প্রমাণ যথেষ্ট ভাল?
পিটার টেলর

@ পিটার বাস্তবে, এটি কতটা সময় নেবে তা আমার কোনও ধারণা নেই। সুতরাং প্রোগ্রামের সঠিকতার প্রমাণ যথেষ্ট ভাল, তবে এখনও প্রোগ্রামটি 4 ~ 5 এর মতো এন ছোট হলে একটি যুক্তিসঙ্গত সময়ে একটি ফলাফল দেওয়া উচিত।
জিমিনপি

@ জিমিনপি, দেখে মনে হয় যে এন = 12 এর জন্য এটি গণনা করা দিনের জন্য একটি কাগজের মূল্য ছিল, এবং এটির একটি পরিচিত সূত্র নেই। 4 বা 5 এর জন্য আমি সন্দেহ করি এটি নিষ্ঠুর শক্তি দ্বারা কয়েক মিনিটের মধ্যে করণীয়।
পিটার টেলর

2 ^ এক্স এর অনুপযুক্ত উপসেটটিও কি টপোলজি?
FUZxxl

@FUZxxl: হ্যাঁ আমার মনে হয় এটাকে ডিসট্রেট টপোলজি বলা হয় ।
জিমিনপি

উত্তর:


4

হাস্কেল, 144 টি অক্ষর

import List
import Monad
p=filterM$const[True,False]
f n=sum[1|t<-p$p[1..n],let e=(`elem`t).sort,e[],e[1..n],all e$[union,intersect]`ap`t`ap`t]

স্পেসিফিকেশনের প্রায় প্রত্যক্ষ বাস্তবায়ন, কিছু মোনাড ম্যাজিক মডুলো।

জন্য অত্যন্ত ধীর n > 4


5

পাইথন, 147 অক্ষর

N=input()
S=lambda i,K:1+sum(0if len(set(j&k for k in K)-K)-1 else S(j+1,K|set(j|k for k in K))for j in range(i,2**N))
print S(1,set([0,2**N-1]))

এন <= 6 এর জন্য দ্রুত, এন = 7 এর জন্য ধীর, সম্ভাব্য এন> = 8 সম্পূর্ণ হবে।

স্বতন্ত্র সেটগুলি ইন্টিজার বিটমাস্ক এবং টপোলজগুলি বিটমাস্কের সেট দ্বারা প্রতিনিধিত্ব করা হয়। বিটমাস্কস> = দিয়ে S(i,K)শুরু করে Kএবং সেট যোগ করে আপনি গঠন করতে পারেন এমন স্বতন্ত্র টোপোলজির সংখ্যা গণনা করে i


0

Zsh, 83 টি অক্ষর

এই সমাধানটি আপনার প্রয়োজনীয়তার বর্ণের সাথে মেলে (তবে অবশ্যই এটি স্পিরিট নয়)। নিঃসন্দেহে আরও বেশি সংকোচনের উপায় রয়েছে a

a=(0 3 S 9U 5CT 4HO6 5ODFS AMOZQ1 T27JJPQ 36K023FKI HW0NJPW01R);echo $[1+36#$a[$1]]

-1

পাইথন, ১৩১ টি চর

lambda n:sum(x&(x>>2**n-1)&all((~(x>>i&x>>j)|x>>(i|j)&x>>(i&j))&1 for i in range(2**n)for j in range(2**n))for x in range(2**2**n))

প্রসারিত সংস্করণ:

def f(n):
    count = 0
    for x in range(2**2**n): # for every set x of subsets of [n] = {1,...,n}
        try:
            assert x & 1 # {} is in x
            assert (x >> 2 ** n - 1) & 1 # [n] is in x
            for i in range(2**n): # for every subset i of [n]...
                if x >> i & 1: # ...in x
                    for j in range(2**n): # for every subset j of [n]...
                        if x >> j & 1: # ...in x
                            assert (x >> (i | j)) & 1 # their union is in x
                            assert (x >> (i & j)) & 1 # their intersection is in x
            count += 1
        except AssertionError:
            pass
    return count

উদাহরণস্বরূপ, ধরুন n = 3. [n] এর সম্ভাব্য সাবসেটগুলি

0b000
0b001
0b010
0b011
0b100
0b101
0b110
0b111

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

x = 0b10100001
0b000 # 1
0b001 # 0
0b010 # 1
0b011 # 0
0b100 # 0
0b101 # 0
0b110 # 0
0b111 # 1

ইঙ্গিত করে যে x এর মধ্যে {}, {2}, এবং {1,2,3} রয়েছে}


এটি কীভাবে কাজ করে তা আপনি ব্যাখ্যা করতে পারেন?
অ্যাডহক গার্ফ হান্টার

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