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


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.