Mathematica, 50 -> 47 -> 42 bayt
p = Join[Range[2, #, 2], Range[1, #, 2]] &
Çevrimiçi deneyin!
İki kat optimizasyon potansiyelini belirtmek için user202729 sayesinde Flatten [] insteaed [] 'a katılın ve saf fonksiyonları kullanın.
İki açıklama eklemek istiyorum.
1) OP'de talep edildiği gibi n> = 4 için art arda veya yükselme olmadan belirli bir permütasyon oluşturmak oldukça basittir.
Birbirini takip eden iki listeden oluşur.
N için bile bunlar şunlardır:
list1 = (2,4, ..., n / 2)
list2 = (1,3, ..., n / 2-1)
Tek n için elimizdeki:
list1 = (2,4, ..., Kat [n / 2])
Listesi 2 = (1,3, ..., Kat [n / 2])
Bu "algoritma" için sadece bir karar verilmelidir (n çift veya tek), geri kalanı ise n sayı yazıyor.
Üstte olası bir Mathematica çözümü sağlanmıştır.
2) İlgili bir soru, n'nin bir fonksiyonu olarak bu tür kaç permütasyonun var olduğudur.
Mathematica, 124 Bayt
a[0] = a[1] = 1; a[2] = a[3] = 0;
a[n_] := a[n] = (n + 1)*a[n - 1] - (n - 2)*a[n - 2] - (n - 5)*a[n - 3] + (n - 3)*a[n - 4]
Çevrimiçi deneyin!
Misal:
a[#] & /@ Range[4, 12]
{2, 14, 90, 646, 5242, 47622, 479306, 5296790, 63779034}
Bu permütasyonların sayısını saymak standart bir sorundur.
N = 4 için 2 vardır: {{2,4,1,3}, {3,1,4,2}}
N = 5 için 14 vardır: {{1,3,5,2,4}, {1,4,2,5,3}, {2,4,1,3,5}, {2,4, 1,5,3}, {2,5,3,1,4}, {3,1,4,2,5}, {3,1,5,2,4}, {3,5,1, 4,2}, {3,5,2,4,1}, {4,1,3,5,2}, {4,2,5,1,3}, {4,2,5,3, 1}, {5,2,4,1,3}, {5,3,1,4,2}}
Bu permütasyonların a (n) sayısı hızla yükselir: 2, 14, 90, 646, 5242, 47622, 479306, 5296790, 63779034, ...
Büyük n için a (n) / n oranı! 1 / e ^ 2 = 0.135335 limitine yaklaşıyor gibi görünüyor ... Kesin bir kanıtım yok ama sadece sayısal kanıtlardan bir varsayım. Programı çevrimiçi çalıştırmayı deneyerek test edebilirsiniz.
Yukarıdaki program (aşağıda verilen referansa dayanarak) bu sayıları hesaplar.
OEIS : A002464 ile ilgili sırada daha fazla bilgi bulabilirsiniz . Hertzsprung'un problemi: n X n panosunda, her sıra ve sütunda 1 olmak üzere, hücum etmeyen kralları düzenlemenin yolları. Ayrıca, art arda veya düşmeden art arda n permütasyon sayısı.