อัลกอริทึมการเรียงลำดับ


33

มี "อัลกอริทึมการเรียงลำดับ" บางครั้งเรียกว่าการเรียงลำดับสตาลินเพื่อเรียงลำดับรายการคุณเพียงแค่ลบองค์ประกอบออกจากรายการจนกว่าจะเรียงลำดับตามลำดับที่เพิ่มขึ้น ตัวอย่างเช่นรายการ

[1, 2, 4, 5, 3, 6, 6]

เมื่อ "เรียง" โดยใช้การเรียงลำดับสตาลินจะกลายเป็น

[1, 2, 4, 5, 6, 6]

ทั้งสามถูกลบเพราะมันไม่เป็นระเบียบ

ตอนนี้เห็นได้ชัดว่ามีหลายวิธีในการลบองค์ประกอบเพื่อจัดเรียงรายการ ตัวอย่างเช่นรายการใด ๆ ที่มีองค์ประกอบน้อยกว่าสองรายการจะต้องเรียงลำดับดังนั้นเพียงแค่ลบองค์ประกอบมากพอที่สุ่มสี่สุ่มห้าเราสามารถเรียงลำดับรายการได้เสมอ เนื่องจากเป็นกรณีนี้เราจึงสนใจเฉพาะผลลัพธ์ที่ยาวที่สุดเท่าที่เป็นไปได้จากการเรียงลำดับของสตาลิน

งานของคุณจะใช้รายการของจำนวนเต็มบวกและส่งออกความยาวของรายการเรียงลำดับ (เพิ่มขึ้น) ที่ยาวที่สุดที่สามารถมาถึงได้โดยการเอาองค์ประกอบออกจากรายการต้นฉบับ นั่นคือความยาวของรายการย่อยที่เรียงลำดับยาวที่สุด (อาจไม่ต่อเนื่องกัน)

รายการที่เรียงลำดับสามารถมีองค์ประกอบเดียวกันมากกว่าหนึ่งครั้งในแถว คุณไม่จำเป็นต้องสนับสนุนรายการว่างเปล่าเว้นแต่ว่าโปรแกรมของคุณจะว่างเปล่า

เกณฑ์การให้คะแนน

คำตอบของคุณจะได้รับคะแนนตามความยาวของการเรียงลำดับสตาลินที่ยาวที่สุดเท่าที่จะเป็นไปได้ โปรแกรมจะถูกตีความเป็นลำดับของไบต์แทนที่จะเป็นตัวอักษรและลำดับของโปรแกรมจะเป็นแบบธรรมชาติที่เกิดขึ้นโดยการตีความจำนวนไบต์เป็นตัวเลข คะแนนต่ำกว่าดีกว่า

นี่ไม่ใช่

ต่อไปนี้เป็นเครื่องมือที่ไม่ซับซ้อนเพื่อช่วยให้คุณได้คะแนนคำตอบของคุณ

กรณีทดสอบ

[1, 2, 4, 5, 3, 6, 6] -> 6
[19, 2] -> 1
[3, 3, 4, 3] -> 3
[10] -> 1
[1, 2, 4, 9] -> 4
[1, 90, 2, 3, 4, 5] -> 5
[1, 90, 91, 2, 3, 4, 5] -> 5

3
ในระยะสั้น: เอาท์พุทความยาวของที่ยาวที่สุด (ไม่ใช่อย่างเคร่งครัด) ลำดับที่เพิ่มขึ้น
user202729

1
ฉันชอบกฎ "คุณไม่จำเป็นต้องสนับสนุนรายการว่างเปล่าเว้นแต่ว่าโปรแกรมของคุณจะว่างเปล่า"
Paŭlo Ebermann

ความท้าทายนี้ทำให้ฉันนึกถึงความท้าทายที่ลดลงมากมาย: codegolf.stackexchange.com/questions/61808/ …
Stefnotch

1
ฉันทำตัวตรวจสอบที่ ptpb.pw/SVSt.html ยังใช้งานไม่ได้ แต่มันใช้งานได้ดี (สิ่งที่ต้องทำ: * แผนภูมิแท่ง * พาร์ติชันเป็นลำดับที่ลดลงน้อยที่สุด * รองรับหน้ารหัสอื่น ๆ )
user202729

@ user202729 ยอดเยี่ยม! ฉันได้เพิ่มลงในโพสต์แล้ว อย่าลังเลที่จะแก้ไขเวอร์ชันที่ใหม่กว่าหากจำเป็น
ข้าวสาลีตัวช่วยสร้าง

คำตอบ:


8

Python 2ความยาว14 12 10 9

M=max;X=exit;i=input();L=[0]*M(i)
for	a	in	i:L[a-1]=M(L[:a])+1
X(M(L))

ผลลัพธ์คือรหัสทางออก

ลองออนไลน์!

มันทำงานอย่างไร

ตลอดเวลาอาร์เรย์Lคอยติดตามชุดข้อมูลย่อยที่เรียงลำดับที่ยาวที่สุดเท่าที่เคยพบมา L[a-1]คือความยาวของหนึ่งที่ยาวที่สุดที่ลงท้ายด้วยa

เริ่มแรกเราไม่ได้ประมวลผลองค์ประกอบอาร์เรย์ดังนั้นLประกอบด้วยศูนย์ทั้งหมด

เมื่อประมวลผลองค์ประกอบอาร์เรย์แรกเราใช้เวลาสูงสุดของ[ L [ 0 ] , ... , L [ - 1 ] ]ซึ่งเป็นความยาวของเรียง subarray ยาวที่สุดพบเพื่อให้ห่างไกลที่ลงท้ายด้วยหรือจำนวนเต็มขนาดเล็ก การผนวกaเข้ากับอาร์เรย์ดังกล่าวจะทำให้มันเรียงลำดับดังนั้นการเรียงลำดับย่อยที่ยาวที่สุดที่ลงท้ายด้วยaจะเป็นหนึ่งองค์ประกอบที่ยาวกว่าค่าสูงสุดนั้น เราอัปเดตL [ a - 1 ]ด้วยค่าที่คำนวณa[L[0],...,L[a-1]]aaaL[a-1]

ผลสุดท้ายเป็นจำนวนสูงสุดของLL


คุณช่วยอธิบายได้มั้ยว่าทำไมมันถึงใช้ได้ ฉันมีเวลายากที่จะเข้าใจ :(
Possum ที่ตายแล้ว

ฉันได้เพิ่มคำอธิบายแล้ว
เดนนิส


5

เยลลี่ยาว 4  2

ṢƑƇZLƲ}ŒP

ลองออนไลน์!

Bytes ในหน้ารหัสของ Jelly

183 146 144 90 76 169 125 19 80

มันทำงานอย่างไร

ṢƑƇZLƲ}ŒP  Main link. Argument: A (array)

       ŒP  Powerset; yield P, the array of all sub-arrays of A.
     Ʋ     Vier; combine the preceding four links into a monadic chain...
      }    and apply the chain to the right argument (P).
  Ƈ            Comb; only keep arrays for which the link to the left returns 1.
ṢƑ             Sort fixed; yield 1 if sorting doesn't alter the array.
   Z           Zip; read the filtered powerset by columns.
    L          Take the length.





2

R , คะแนน15 11, 72 62 ไบต์

function(L,M=max,A=1:M(L)*0){for(Y in L)A[Y]=M(A[1:Y])+1;M(A)}

ลองออนไลน์!

พอร์ตDennis 'Python ตอบกลับไปยัง R


เพียงแค่การเปลี่ยนชื่อตัวแปรจะไม่ช่วยได้เนื่องจากลิงก์ล่าสุดของคุณแสดงว่าไม่มีการใช้ชื่อเหล่านี้ในสตริงย่อย (พบ) ที่ให้คะแนน 15
Ørjan Johansen

@ ØrjanJohansenอาแน่นอนฉันค่อนข้างโง่ ฉันคิดว่าวิธีการอื่นเป็นสิ่งที่จำเป็น
Giuseppe

2

Brachylogความยาว 2 (4 ไบต์)

⊇≤₁l

ลองออนไลน์!

คำตอบที่ประกอบขึ้นเพื่อให้กระชับโดยไม่เรียงลำดับที่สั้นกว่านั้นมากนัก

( 08 03 80 6Cในหน้ารหัสของ Brachylog)

        Output
   l    the length of
 ≤₁     a non-decreasing
⊇       sublist of
        the input.
        (maximizing the size of the sublist)

ฉันมากับ►LSnmOṖHusk แต่คะแนน (สำหรับความยาวอย่างน้อย) มันแย่เกินกว่าจะรบกวนการโพสต์ ...
Unrelated String
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.