প্রাক্তন বর্ধমান সেট সিকোয়েন্স


11

পটভূমি

অর্ডার এর একটি প্রাক্তন বর্ধমান সেট সিক্যুয়েন্স সংজ্ঞায়িত করা হয় যা নিম্নলিখিতগুলি সন্তুষ্ট করে:এনএস1,এস2,,এসএন

  • প্রতিটি একটি খালি নয় এমন উপসেট ।এসআমি{1,2,,এন}
  • জন্য , , অর্থাত্ কোন দুটি পরপর সেট কমন কোনো উপাদান আছে।1আমি<এনএসআমিএসআমি+ +1=
  • জন্য মানে (গড় মান) এর কঠোরভাবে যে এর চেয়ে কম হয় ।1আমি<এনএসআমিএসআমি+ +1

চ্যালেঞ্জ

একটি ধনাত্মক পূর্ণসংখ্যা দেওয়া হয়েছে N, অর্ডারের দীর্ঘতম বর্ধমান সেট ক্রমের দৈর্ঘ্য আউটপুট দেয় N

পরীক্ষার মামলা

এগুলি প্রোজেক্ট ইউলারের ব্যবহারকারী থান্ড্রের ফলাফলের ভিত্তিতে তৈরি ।

1 => 1 // {1}
2 => 2 // {1} {2}
3 => 3 // {1} {2} {3}
4 => 5 // {1} {2} {1,4} {3} {4}
5 => 7 // {1} {2} {1,4} {3} {2,5} {4} {5}
6 => 10 // {1} {2} {1,4} {3} {1,4,5} {2,3,6} {4} {3,6} {5} {6}
7 => 15 // {1} {2} {1,4} {3} {1,2,7} {3,4} {1,2,5,7} {4} {1,3,6,7} {4,5} {1,6,7} {5} {4,7} {6} {7}
8 => 21
9 => 29
10 => 39
11 => 49
12 => 63
13 => 79
14 => 99
15 => 121
16 => 145
17 => 171
18 => 203
19 => 237
20 => 277
21 => 321
22 => 369
23 => 419
24 => 477
25 => 537

বিধি

স্ট্যান্ডার্ড বিধি প্রযোজ্য। বাইটের মধ্যে স্বল্পতম বৈধ জমা

খয়রাত

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


আমি এক সপ্তাহেরও বেশি সময় ব্যয় করেছি বহু-কালীন অ্যালগরিদম বা হ্রাস ব্যবহার করে এনপি-কঠোরতার প্রমাণ নিয়ে আসার চেষ্টা করে। এখানকার কেউ কি এ নিয়ে কোন অগ্রগতি করেছে?
এনরিকো বোরবা

উত্তর:


4

ব্র্যাচল্যাগ , 28 বাইট

⟦₁⊇ᶠk⊇pSs₂ᶠ{c≠&⟨+/l⟩ᵐ<ᵈ}ᵐ∧Sl

এটি অনলাইন চেষ্টা করুন!

এটি আসলেই ধীর। প্রায় 30 সেকেন্ড সময় নেয় N = 3এবং এটি 12 মিনিটের জন্য শেষ হয় নি N = 4

ব্যাখ্যা

⟦₁                             Take the range [1, …, Input]
  ⊇ᶠk                          Find all ordered subsets of that range, minus the empty set
     ⊇                         Take an ordered subset of these subsets
      pS                       Take a permutation of that subset and call it S
       Ss₂ᶠ                    Find all substrings of 2 consecutive elements in S
           {           }ᵐ      Map for each of these substrings:
            c≠                   All elements from both sets must be different
              &⟨+/l⟩ᵐ            And the average of both sets (⟨xyz⟩ is a fork like in APL)
                     <ᵈ          Must be in strictly increasing order
                         ∧Sl   If all of this succeeds, the output is the length of L.

দ্রুততম সংস্করণ, 39 বাইট

⟦₁⊇ᶠk⊇{⟨+/l⟩/₁/₁}ᵒSs₂ᶠ{c≠&⟨+/l⟩ᵐ<₁}ᵐ∧Sl

এটি আমার কম্পিউটারে প্রায় 50 সেকেন্ড সময় নেয় N = 4

এটি একই প্রোগ্রাম হিসাবে বাদে আমরা এলোমেলো ক্রম ছাড়ার পরিবর্তে গড় অনুসারে সাবসেটের সাবসেটটি বাছাই করি। সুতরাং আমরা {⟨+/l⟩/₁/₁}ᵒপরিবর্তে ব্যবহার p

{         }ᵒ     Order by:
 ⟨+/l⟩             Average (fork of sum-divide-length)
      /₁/₁         Invert the average twice; this is used to get a float average

আমাদের একটি ফ্লোট গড় পেতে হবে কারণ আমি কেবল একটি হাস্যকর বাগটি আবিষ্কার করেছি যাতে ভাসমান এবং পূর্ণসংখ্যার সাথে মান অনুসারে তুলনা হয় না তবে প্রকার পূর্বাভাসের সাথে টাইপ করে (এই কারণেই আমি উভয় গড়ের তুলনা করি <ᵈনা এবং ব্যবহার করি না <₁; পরবর্তীটির প্রয়োজন হবে কাজে ডাবল বিপরীত কৌশল)।


আমি এটিকে মোকাবেলা করার জন্য ধীরে ধীরে আমার কাজ করার পরিকল্পনা করছিলাম (যেহেতু @ জোনাথন অ্যালান অন্য মন্তব্যে এটি উল্লেখ করেছেন) তবে আমি সম্ভবত কয়েক সপ্তাহ পিছিয়ে এ জাতীয় কিছু নিয়ে আসছি! আমি পছন্দ করি (বেশিরভাগ ব্র্যাচল্যাগ উত্তরগুলির মতো) শেষ পর্যন্ত এটি কেবল প্রশ্নের নিজেরই ঝরঝরে পুনঃস্থাপনের মতো দেখাচ্ছে।
- মনিকা পুনরায় ইনস্টল করুন

@ সুন্দর আপনি সর্বদা এটিতে পরে আসতে পারেন এবং সমাধান পুনরায় আবিষ্কার করার চেষ্টা করতে পারেন!
ফ্যাটালাইজ করুন

3

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

{YY@#(#{{2bW%ee{)*~}%}:Z~{)Z__1b\,d/\a+}%$}%{_,1>{2ew{z~~&!\~=>}%0&!}{,}?},:,:e>}

অনলাইন ডেমো । এটি 4একটি যুক্তিসঙ্গত সময়ে ইনপুট জন্য কার্যকর করা উচিত , কিন্তু আমি উচ্চতর ইনপুট দিয়ে এটি চেষ্টা করব না।

ব্যবচ্ছেদ

{                 e# Declare a block (anonymous function)
  YY@#(#          e# There are 2^N subsets of [0, N), but the empty subset is problematic
                  e# so we calculate 2^(2^N - 1) subsets of the non-empty subsets
  {               e# Map integer to subset of non-empty subsets:
    {             e#   Define a block to map an bitset to its set indices; e.g. 9 => [0 3]
      2bW%ee      e#     Convert to base 2, reverse, and index
      {)*~}%      e#     If the bit was set, keep the index
    }:Z           e#   Assign the block to variable Z
    ~             e#   Evaluate it
    {             e#   Map those indices to non-empty subsets of [0, N):
      )Z          e#     Increment (to skip the empty set) and apply Z
      __1b\,d/    e#     Sum one copy, take length of another, divide for average
      \a+         e#     Wrap the subset and prepend its average value
    }%
    $             e#   Sort (lexicographically, so by average value)
  }%
  {               e# Filter out subsets of subsets with conflicts:
    _,1>{         e#   If the length is greater than 1
      2ew         e#     Take each consecutive pair of subsets
      {           e#     Map:
        z~        e#       Zip and expand to get [score1 score2] [subset1 subset2]
        ~&!\      e#       No element in common => 1
        ~=        e#       Different scores => 0
        >         e#       1 iff both constraints are met
      }%
      0&!         e#     1 iff no consecutive pair failed the test
    }{
      ,           e#   Otherwise filter to those of length 1
    }?
  },
  :,:e>           e# Map to size of subset and take the greatest
}

1

জাভাস্ক্রিপ্ট (ES6), 175 বাইট

একটি নিষ্পাপ এবং বরং ধীর পুনরাবৃত্তি অনুসন্ধান। টিআইও-তে 7 টি প্রথম শর্ত গণনা করতে প্রায় 15 সেকেন্ড সময় নেয়।

n=>(a=[...Array(n)].reduce(a=>[...a,...a.map(y=>[x,...y],x=n--)],[[]]),g=(p,b=a,n)=>a.map(a=>(m=a.map(n=>s+=++k*b.includes(n)?g:n,s=k=0)&&s/k)>p&&g(m,a,-~n),r=r>n?r:n))(r=0)|r

এটি অনলাইন চেষ্টা করুন!

অথবা এই সংশোধিত সংস্করণটি পরীক্ষা করুন যা দীর্ঘতম প্রসারিত সেট ক্রমটিকে ছাড়িয়ে যায়।

কিভাবে?

{1,2,...,এন}একটি

a = [...Array(n)].reduce(a =>
  [...a, ...a.map(y => [x, ...y], x = n--)],
  [[]]
)

পুনরাবৃত্তি অংশ:

g = (                         // g = recursive function taking:
  p,                          //   p = previous mean average
  b = a,                      //   b = previous set
  n                           //   n = sequence length
) =>                          //
  a.map(a =>                  // for each set a[] in a[]:
    (m = a.map(n =>           //   for each value n in a[]:
      s +=                    //     update s:
        ++k * b.includes(n) ? //       increment k; if n exists in b[]:
          g                   //         invalidate the result (string / integer --> NaN)
        :                     //       else:
          n,                  //         add n to s
      s = k = 0)              //     start with s = k = 0; end of inner map()
      && s / k                //   m = s / k = new mean average
    ) > p                     //   if it's greater than the previous one,
    && g(m, a, -~n),          //   do a recursive call with (m, a, n + 1)
    r = r > n ? r : n         //   keep track of the greatest length in r = max(r, n)
  )                           // end of outer map()

1

পাইথন 3 , 205 197 184 182 বাইট

f=lambda N,c=[[1]]:max([len(c)]+[f(N,c+[n])for k in range(N)for n in combinations(range(1,N+1),k+1)if not{*c[-1]}&{*n}and sum(c[-1])/len(c[-1])<sum(n)/len(n)]);from itertools import*

এটি অনলাইন চেষ্টা করুন!


sumপরিবর্তে 197 বাইট ব্যবহার chain.from_iterable
ovs

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