পারমুটেশন স্কয়ার রুট


21

গণিত, একটি বিন্যাস σ আদেশের এন ... পূর্ণসংখ্যার 1 থেকে একটি bijective ফাংশন এন নিজেই। এই তালিকা:

2 1 4 3

অনুক্রমের প্রতিনিধিত্ব করে σ যেমন σ (1) = 2, σ (2) = 1, σ (3) = 4, এবং σ (4) = 3।

একটি বিন্যাস একটি বর্গমূল σ একটি বিন্যাস যে, যখন নিজেই প্রয়োগ, দেয় σ । উদাহরণস্বরূপ, 2 1 4 3বর্গমূল τ = রয়েছে 3 4 2 1।

k           1 2 3 4
τ(k)        3 4 2 1
τ(τ(k))     2 1 4 3

কারণ all ( τ (কে)) = σ (কে) সমস্ত 1≤k≤n এর জন্য।

ইনপুট

N > 0 পূর্ণসংখ্যার একটি তালিকা , সমস্ত 1 এবং n সমেত, একটি অনুক্রমের প্রতিনিধিত্ব করে। ক্রমশক্তি সর্বদা একটি বর্গমূল হবে।

যতক্ষণ না আপনার ইনপুট এবং আউটপুট সামঞ্জস্য থাকে তার পরিবর্তে আপনি 0 ... n-1 এর তালিকা ব্যবহার করতে পারেন ।

আউটপুট

ক্রমবর্ধনের বর্গমূল, একটি অ্যারে হিসাবে।

বিধিনিষেধ

আপনার অ্যালগরিদমটি অবশ্যই বহুমুখী সময়ে এন এ চালানো উচিত । এর অর্থ আপনি সমস্ত এন দিয়ে লুপ করতে পারবেন না ! আদেশ ক্রম n ।

যে কোনও বিল্টিন অনুমোদিত।

পরীক্ষার কেস:

নোট করুন যে অনেকগুলি ইনপুটগুলির একাধিক সম্ভাব্য ফলাফল রয়েছে uts

2 1 4 3
3 4 2 1

1
1

3 1 2
2 3 1

8 3 9 1 5 4 10 13 2 12 6 11 7
12 9 2 10 5 7 4 11 3 1 13 8 6

13 7 12 8 10 2 3 11 1 4 5 6 9
9 8 5 2 12 4 11 7 13 6 3 10 1

আমি কি বলার ক্ষেত্রে সঠিক হতে পারি যে একটি অনুক্রমের জন্য একটি বর্গাকার মূল রয়েছে তবে যদি এটিতে দৈর্ঘ্যের n চক্র থাকে তবে হয় n হয় সমান হয় বা মিটি বিজোড় হয়?
— নীল

নিল হ্যাঁ অন্যথায় ক্রমবিন্যাসটি অদলবদলের সংখ্যা হিসাবে উপস্থাপিত হতে পারে।
— jimmy23013

আহ্ হ্যাঁ এটি লাগানোর একটি আরও ভাল উপায়।
— নীল

উত্তর:


4

পার্ল, 124 122 বাইট

জন্য +3 অন্তর্ভুক্ত -alp

STDIN এ 1 ভিত্তিক অনুমান দিয়ে চালান:

rootperm.pl <<< "8 3 9 1 5 4 10 13 2 12 6 11 7"

rootperm.pl:

map{//;@{$G[-1]^$_|$0{$_}}{0,@G}=(@G=map{($n+=$s{$_=$F[$_-1]}++)?():$_}(0+$',0+$_)x@F)x2,%s=$n=0for@F}@F;$_="@0{1..@F}"

জটিলতা হ'ল O (n ^ 3)


জটিলতা হে (এন ^ 3) কেন?
— ক্যালকুলেটরফলাইন

@ ক্যাটস আরেফ্লুফি কারণ এটি একটি নির্বোধ প্রোগ্রাম :-)। এটি প্রতিটি জোড় উপাদানকে বিবেচনা করে (যদি ইতিমধ্যে পরিচালনা করা হয়, O (n ^ 2)) এবং তাদের চক্র একসাথে জিপ করে (কখন থামবে কখন জেনে নেই, ও (এন)) তারপরে এটি পরীক্ষা করে যে এটি কোনও বর্গমূলের জন্য উপযুক্ত চক্র কিনা? । প্রোগ্রামটিতে আপনি 3 টি নেস্টেড
— লুপগুলিকে

উহু. ইন্দ্রিয় তোলে।
— ক্যালকুলেটরফলাইন

2

গণিত, 165 167 বাইট

একটি নামহীন ফাংশন।

PermutationList[Cycles@Join[Riffle@@@#~(s=Select)~EvenQ@*(l=Length)~SortBy~l~Partition~2,#[[Mod[(#+1)/2Range@#,#,1]&@l@#]]&/@#~s~OddQ@*l]&@@PermutationCycles@#,l@#]&

সেমি-ungolfed:

PermutationList[
    Cycles@Join[
        Riffle@@@Partition[SortBy[Select[#,EvenQ@*Length],Length], 2],
        #[[Mod[(Length@#+1)/2Range@Length@#,Length@#,1]]]& /@ Select[#,OddQ@*Length]
    ]& @@ PermutationCycles @ #,
    Max@#
]&

কোন যাদু দ্বারা এই কাজ করে?
— ক্যালকুলেটরফলাইন

1
@ ক্যাটস অ্যারেফ্লফি যদি আমি অর্ধ-অবহেলিত কোডটি সঠিকভাবে বুঝতে পেরেছি তবে এটি অনুক্রমটিকে চক্রের মধ্যে বিভক্ত করে, দৈর্ঘ্য অনুসারে তাদের গোষ্ঠী করে, তারপরে বিজোড়গুলির জন্য এটি তাদেরকে শক্তি (দৈর্ঘ্য + 1) / 2-তে উত্থাপন করে, এমনকি এটির জন্য এটিও তাদের জোড়া এবং তাদের একসাথে riffles। (যদি এমনকি চক্রটি যুক্ত করা যায় না তবে বিভাজনের কোনও বর্গমূল নেই root)
— নীল

0

প্রোলোগ - 69 টি অক্ষর

p([],_,[]). p([H|T],B,[I|U]):-p(T,B,U),nth1(H,B,I). f(X,Y):-p(Y,Y,X).

ব্যাখ্যা:

permutate([], _, []).                 % An empty permutation is empty
permutate([X|Xs], List, [Y|Ys]) :-    % To permutate List
  permutate(Xs, List, Ys),            % Apply the rest of the permutation
  nth1(X, List, Y).                   % Y is the Xth element of List

root(Permutation, Root) :-            % The root of Permutation
  permutate(Root, Root, Permutation). % Applied to itself, is Permutation

3
আমি ভাবতে পারছি এটি তাত্পর্যপূর্ণ সময় নেয়।
— feersum

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