โปรแกรมหุ่นยนต์คัพซ้อน


36

ฉันแน่ใจว่าทุกคนเคยเห็นมาก่อนถ้วยนั้นสามารถวางซ้อนกันเป็นปิรามิด (และรูปทรงอื่น ๆ ):

           A    
        A A A   
 A     A A A A  
A A A A A A A A

ใช่Aเป็นตัวละครที่เพียงพอที่จะเป็นตัวแทนของถ้วย

สามารถเพิ่มถ้วยใหม่ได้ทั้งบนพื้นดินทางด้านขวาของโครงสร้างหรือบนถ้วยที่อยู่ติดกันสองถ้วย นี่คือโครงสร้างข้างต้นอีกครั้ง แต่จุดที่มีอยู่ทั้งหมดสำหรับถ้วยใหม่ถูกทำเครื่องหมายด้วย_:

         _ A         
        A A A        
 A _ _ A A A A       
A A A A A A A A _ _ _

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

  • a: เพิ่มถ้วยใหม่ในจุดแรกที่มีอยู่ในลำดับการอ่านจากซ้ายไปขวา(นั่นคือสแกนแถวจากบนลงล่างซ้ายไปขวาจนกว่าคุณจะพบจุดที่มีอยู่จากนั้นวางถ้วยตรงนั้น) ตัวอย่างข้างต้นจะกลายเป็น:

             A A   
            A A A  
     A     A A A A 
    A A A A A A A A
    
  • r: นำถ้วยแรกออกจากลำดับการอ่านจากซ้ายไปขวา ตัวอย่างข้างต้นจะกลายเป็น:

            A A A  
     A     A A A A 
    A A A A A A A A
    

ปรากฎว่าโครงสร้างใด ๆ ที่สามารถสร้างขึ้นจากศูนย์โดยใช้เพียงสองการดำเนินงาน เช่น

      A
 A   A A
A A A A A

สามารถสร้างขึ้นด้วยลำดับของคำแนะนำ

aaaaaaaaaaaarrrrraa

ตัวอย่างที่ใหญ่กว่าสามารถสร้างโดยใช้

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaarrrrrrrrrrrrrrrrrraaaaaaarr

นี่คือสิ่งที่ยิ่งใหญ่กว่า:

    A
   A A                   A
  A A A     A   A       A A
 A A A A   A A A A     A A A A
A A A A A A A A A A   A A A A A

ซึ่งสามารถสร้างด้วย

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrraaaaaaaaaaaaaaaaaaarrrrrrrrrrrrrrraaaaaaaaaaaaaarrrrrrrrrrraaaaaaaa

หมายเหตุ:หากจุดบนพื้นเป็นอิสระจากคำแนะนำในการกำจัดพวกเขาจะถูกนำมาใช้ซ้ำก่อนที่จะวางถ้วยทางด้านขวาของถ้วยที่มีอยู่ทั้งหมด เช่น

aaaarrra

จะให้ผลผลิต

A   A

ไม่

    A A

คุณสามารถนึกถึงพื้นดินว่าอยู่ด้านบนของถ้วยกึ่งไม่มีที่สิ้นสุด

ความท้าทาย

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

นี่คือรายละเอียดเพิ่มเติมเกี่ยวกับกฎ:

  • คุณอาจสันนิษฐานว่าไม่มีช่องว่างนำหน้าในแถวล่างของอินพุตดังนั้นจุดพื้นซ้ายสุดสำหรับถ้วยที่ใช้เสมอ
  • คุณอาจสมมติว่ามีช่องว่างต่อท้ายในจำนวนที่สมเหตุสมผล (ไม่มีช่องว่างช่องว่างหนึ่งช่องเบาะสี่เหลี่ยมมุมฉากเป็นสี่เหลี่ยมมุมฉากที่มีช่องว่างท้ายเดียว)
  • คุณอาจเลือกที่จะคาดหวังว่าอินพุตจะสิ้นสุดในบรรทัดขึ้นบรรทัดใหม่
  • คุณสามารถเลือกอักขระ ASCII ที่พิมพ์ได้สองตัว (0x20 ถึง 0x7E, รวม) แทนAและเว้นวรรค (กฎเกี่ยวกับช่องว่างจากนั้นโอนไปยังอักขระที่คุณเลือก)
  • เอาต์พุตของคุณควรมีอักขระที่แตกต่างกันเพียงสองตัวเท่านั้นที่เป็นตัวแทนของการดำเนินการ (คุณสามารถเลือกอักขระอื่นที่ไม่ใช่aและr) คุณสามารถเลือกที่จะพิมพ์ขึ้นบรรทัดใหม่ขึ้นบรรทัดเดียว
  • รหัสของคุณจะต้องสามารถแก้ปัญหากรณีทดสอบด้านล่างนี้ในเวลาน้อยกว่าหนึ่งนาทีบนเดสก์ท็อปพีซีที่สมเหตุสมผล (ถ้าใช้เวลาสองนาทีในการขุดฉันจะให้ประโยชน์แก่คุณด้วยความสงสัย แต่ถ้าใช้สิบครั้งฉันจะชนะ 't - ฉันเชื่อว่าอัลกอริทึมที่ดีที่สุดเป็นไปได้ซึ่งจะแก้ปัญหาใด ๆ ของพวกเขาในเวลาน้อยกว่าหนึ่งวินาที)
  • คุณต้องไม่ปรับรหัสของคุณให้เหมาะสมกับกรณีทดสอบแต่ละรายการ (เช่นการเข้ารหัสด้วยตนเอง) หากฉันสงสัยว่ามีใครทำเช่นนั้นฉันขอสงวนสิทธิ์ในการเปลี่ยนแปลงกรณีทดสอบ

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

Sp3000 ยังได้จัดเตรียมสคริปต์ Python ทางเลือกนี้เพื่อจุดประสงค์เดียวกัน

กรณีทดสอบ

หลังการทดสอบแต่ละครั้งจะมีตัวเลขแสดงจำนวนคำสั่งที่เหมาะสมที่สุดตามคำตอบของ Ell

                                       A
                                      A A
                                     A A A
                                    A A A A
                                   A A A A A
                                  A A A A A A
                                 A A A A A A A
                                A A A A A A A A
                               A A A A A A A A A
                              A A A A A A A A A A
                             A A A A A A A A A A A
                            A A A A A A A A A A A A
                           A A A A A A A A A A A A A
                          A A A A A A A A A A A A A A
                         A A A A A A A A A A A A A A A
                        A A A A A A A A A A A A A A A A
                       A A A A A A A A A A A A A A A A A
                      A A A A A A A A A A A A A A A A A A
                     A A A A A A A A A A A A A A A A A A A
                    A A A A A A A A A A A A A A A A A A A A
                   A A A A A A A A A A A A A A A A A A A A A
                  A A A A A A A A A A A A A A A A A A A A A A
                 A A A A A A A A A A A A A A A A A A A A A A A
                A A A A A A A A A A A A A A A A A A A A A A A A
               A A A A A A A A A A A A A A A A A A A A A A A A A
              A A A A A A A A A A A A A A A A A A A A A A A A A A
             A A A A A A A A A A A A A A A A A A A A A A A A A A A
            A A A A A A A A A A A A A A A A A A A A A A A A A A A A
           A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
          A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
         A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
        A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
       A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
      A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
     A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
    A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
   A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
  A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
 A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A

820
                                             A
                                            A A
                                           A A A
                                          A A A A
                                         A A A A A
                                        A A A A A A
                                       A A A A A A A
                                      A A A A A A A A
                     A               A A A A A A A A A
                    A A             A A A A A A A A A A
                   A A A           A A A A A A A A A A A
                  A A A A         A A A A A A A A A A A A
         A       A A A A A       A A A A A A A A A A A A A
        A A     A A A A A A     A A A A A A A A A A A A A A
   A   A A A   A A A A A A A   A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A

1946

               A
              A A
             A A A
            A A A A
           A A A A A
          A A A A A A
         A A A A A A A
        A A A A A A A A
       A A A A A A A A A               A
      A A A A A A A A A A             A A
     A A A A A A A A A A A           A A A
    A A A A A A A A A A A A         A A A A
   A A A A A A A A A A A A A       A A A A A       A
  A A A A A A A A A A A A A A     A A A A A A     A A
 A A A A A A A A A A A A A A A   A A A A A A A   A A A   A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A

2252

                                                         A A
                                                      A A A A
                                                   A A A A A A
                                                A A A A A A A A
                                             A A A A A A A A A A
                                          A A A A A A A A A A A A
                                       A A A A A A A A A A A A A A
                                    A A A A A A A A A A A A A A A A
                                 A A A A A A A A A A A A A A A A A A
                              A A A A A A A A A A A A A A A A A A A A
                           A A A A A A A A A A A A A A A A A A A A A A
                        A A A A A A A A A A A A A A A A A A A A A A A A
                     A A A A A A A A A A A A A A A A A A A A A A A A A A
                  A A A A A A A A A A A A A A A A A A A A A A A A A A A A
               A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
            A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
         A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
      A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
   A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A

9958

                   A A
                  A A A A
                 A A A A A A
                A A A A A A A A
               A A A A A A A A A A
              A A A A A A A A A A A A
             A A A A A A A A A A A A A A
            A A A A A A A A A A A A A A A A
           A A A A A A A A A A A A A A A A A A
          A A A A A A A A A A A A A A A A A A A A
         A A A A A A A A A A A A A A A A A A A A A A
        A A A A A A A A A A A A A A A A A A A A A A A A
       A A A A A A A A A A A A A A A A A A A A A A A A A A
      A A A A A A A A A A A A A A A A A A A A A A A A A A A A
     A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
    A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
   A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
  A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
 A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A

5540

A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A

10280

 A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A

10320

   A       A       A       A       A       A       A       A       A       A
  A A     A A     A A     A A     A A     A A     A A     A A     A A     A A
 A A A   A A A   A A A   A A A   A A A   A A A   A A A   A A A   A A A   A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A

5794

              A
             A A
            A A A
           A A A A                                               A
          A A A A A                                             A A
         A A A A A A A                                         A A A
        A A A A A A A A               A                       A A A A
       A A A A A A A A A             A A             A       A A A A A   A
      A A A A A A A A A A           A A A           A A     A A A A A A A A
     A A A A A A A A A A A         A A A A         A A A   A A A A A A A A A
    A A A A A A A A A A A A       A A A A A       A A A A A A A A A A A A A A
 A A A A A A A A A A A A A A     A A A A A A     A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A   A A A A A A A   A A A A A A A A A A A A A A A A

3297

                                                   A A
                                                  A A A
                                                 A A A A
                                                A A A A A
                                               A A A A A A
                                              A A A A A A A
                                             A A A A A A A A
                                            A A A A A A A A A
                                           A A A A A A A A A A     A
                                          A A A A A A A A A A A   A A
                                       A A A A A A A A A A A A A A A A
                                      A A A A A A A A A A A A A A A A A
                                     A A A A A A A A A A A A A A A A A A
      A                             A A A A A A A A A A A A A A A A A A A
     A A                           A A A A A A A A A A A A A A A A A A A A
    A A A             A A         A A A A A A A A A A A A A A A A A A A A A
   A A A A           A A A       A A A A A A A A A A A A A A A A A A A A A A
  A A A A A         A A A A     A A A A A A A A A A A A A A A A A A A A A A A
 A A A A A A     A A A A A A   A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A   A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A

4081

                      A
                     A A       A                     A
                    A A A     A A                   A A A                 A
             A     A A A A   A A A A               A A A A     A         A A
  A         A A   A A A A A A A A A A         A   A A A A A   A A       A A A
 A A       A A A A A A A A A A A A A A       A A A A A A A A A A A     A A A A
A A A   A A A A A A A A A A A A A A A A     A A A A A A A A A A A A   A A A A A

4475

                                                             A              
      A           A                       A                 A A A   A       A
     A A         A A   A         A A     A A A   A         A A A A A A     A A
A   A A A A A   A A A A A   A   A A A   A A A A A A   A   A A A A A A A   A A A

5752

นั่นหมายความว่าคะแนนที่ดีที่สุดคือ64,515คำแนะนำ

คำตอบ:


32

Python 2, 64,515

import sys

input = map(str.rstrip, sys.stdin.readlines())
width = (len(input[-1]) + 1) / 2
for i in range(len(input)):
    indent = len(input) - i - 1
    input[i] = [c != " " for c in input[i][indent::2]]
    input[i] += [False] * (width - indent - len(input[i]))
input = [[False] * n for n in range(width - len(input) + 1)] + input
working_area = [[False] * n for n in range(width + 1)]

def add():
    sys.stdout.write("a")
    for row in range(width + 1):
        for i in range(row):
            if not working_area[row][i] and (
                row == width or
                (working_area[row + 1][i] and working_area[row + 1][i + 1])
            ):
                working_area[row][i] = True
                return
def remove():
    sys.stdout.write("r")
    for row in range(width + 1):
        if True in working_area[row]:
            working_area[row][working_area[row].index(True)] = False
            return

for row in range(width, -1, -1):
    r = input[row]; R = working_area[row]
    for i in range(len(r) - 1, -1, -1):
        if r[i]:
            while not R[i]: add()
        else:
            while R[i]: remove()

ผล

ทดสอบ 1 อันดับ 1 - 820 # 2 - 1,946 # 3 - 2,252 # 4 - 9958 # 5 - 5,540 # 6 - 10280 # 7 - 10,320 # 8 - 5,794 # 9 - 3297 # 10 - 4081 # 11 - 4475 # 12 - 5752ทดสอบ 2 ทดสอบ 3
ทดสอบ 4 ทดสอบ 5 ทดสอบ 6
ทดสอบ 7 ทดสอบ 8 ทดสอบ 9
ทดสอบ 10 ทดสอบ 11 ทดสอบ 12

รวม 64,515

คำอธิบาย

เราเริ่มต้นด้วย "พื้นที่ทำงาน" ที่ว่างเปล่า เราสแกนอินพุตตามลำดับการอ่านย้อนกลับเช่นจากขวาไปซ้ายและจากล่างขึ้นบน หากมีความไม่ตรงกันระหว่างอินพุตและพื้นที่ทำงานที่ตำแหน่งปัจจุบัน (กล่าวคือมีถ้วยอยู่ในอินพุต แต่ไม่ใช่ในพื้นที่ทำงานหรือในทางกลับกัน) เราเพิ่มหรือลบถ้วยไปยังพื้นที่ทำงานตาม กับกฎจนกระทั่งไม่ตรงกันได้รับการแก้ไขที่จุดที่เราดำเนินการต่อไปยังตำแหน่งถัดไป

ความถูกต้อง

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

  • ถ้วยที่สถานลิตรจะถูกถอดออกก่อนถ้วยที่สถานที่ที่ประสบความสำเร็จลิตรเพื่อการอ่านและดังนั้นที่นำหน้าลิตรในการสแกนการสั่งซื้อจึงมีอันตรายจากการเอาถ้วยที่เราได้เยี่ยมชมแล้วไม่มี
  • ในทำนองเดียวกันถ้วยที่ตำแหน่งlจะถูกเพิ่มก่อนถ้วยที่อยู่ข้างหน้าตามลำดับการสแกนเนื่องจากมีถ้วยด้านล่างสองถ้วยอยู่แล้ว (หรือที่ด้านล่าง) อย่างไรก็ตามเนื่องจากเราจะได้เยี่ยมชมสถานที่เหล่านี้แล้วดังนั้นจึงเพิ่มถ้วยที่จำเป็นและเนื่องจากตามที่ระบุไว้ข้างต้นจึงไม่มีอันตรายจากการลบถ้วยเหล่านั้นในภายหลังจึงเป็นไปตามเงื่อนไขนี้และไม่มีอันตรายจากการเพิ่มถ้วยที่ สถานที่ที่เราเคยไปแล้ว

optimality

โปรดทราบว่าผลกระทบของการเพิ่มหรือลบถ้วยจากโครงสร้างไม่ได้ขึ้นอยู่กับลำดับของการดำเนินการที่ใช้ในการสร้างโครงสร้างเฉพาะในการกำหนดค่าปัจจุบัน เป็นผลให้ลำดับที่ดีที่สุดS n = { s 1 , ... , s n } ของการดำเนินงานที่สร้างโครงสร้างที่แน่นอนทุกส่วนเริ่มต้นของS nคือลำดับใด ๆS m = { s 1 , .. ., s m }, โดยที่mn , ยังเป็นลำดับที่ดีที่สุด, สำหรับโครงสร้างที่สอดคล้องกันซึ่งสร้างขึ้น, หรืออื่น ๆ จะมีลำดับที่สั้นกว่าS nสร้างโครงสร้างเดียวกัน

เราสามารถแสดงให้เห็นว่าวิธีการของเราดีที่สุดโดยการเหนี่ยวนำความยาวของลำดับการสร้างที่ดีที่สุด: วิธีการของเราสร้างลำดับที่ดีที่สุดสำหรับโครงสร้างใด ๆ ที่ลำดับการสร้างที่ดีที่สุดนั้นว่างเปล่า (มีเพียงหนึ่งโครงสร้างดังกล่าว วิธีการสร้างลำดับที่ดีที่สุดสำหรับโครงสร้างทั้งหมดที่มีที่ดีที่สุดลำดับ (หรือลำดับ) เป็นของความยาวnและพิจารณาโครงสร้างที่สร้างขึ้นโดยลำดับที่ดีที่สุดS n +1 เราต้องการแสดงให้เห็นว่าเนื่องจากโครงสร้างที่สร้างขึ้นโดยS n +1เป็นอินพุตวิธีการของเราจะสร้างลำดับเดียวกัน (หรืออย่างน้อยเป็นลำดับที่มีความยาวเท่ากัน)

ตามที่ระบุไว้ข้างต้นS nยังเป็นลำดับที่ดีที่สุดและอื่น ๆ โดยสมมติฐานวิธีการของเราผลิตลำดับที่ดีที่สุดให้โครงสร้างที่สร้างขึ้นโดยS nเป็น input สมมติว่าไม่มีการสูญเสียของทั่วไปที่S nเป็นลำดับที่ผลิตโดยวิธีการของเรา (ถ้ามันไม่ได้เราสามารถแทนที่แรกnองค์ประกอบของS n +1กับกล่าวว่าลำดับและได้รับลำดับของความยาวn + 1 ที่สร้างโครงสร้างเดียวกัน) ให้lเป็นตำแหน่งที่แก้ไขโดยการดำเนินการครั้งสุดท้ายในS n +1 (กล่าวคือs n +1 ) และปล่อยให้S mคือส่วนเริ่มต้นของS nที่โปรแกรมของเราจะสร้างเมื่อมันมาถึงl (แต่ก่อนการประมวลผลl ) โปรดทราบว่าเนื่องจากโครงสร้างที่สร้างโดยS nและS n +1เห็นด้วยในทุกตำแหน่งที่ตามหลังlในลำดับการอ่านS mจึงเป็นโครงสร้างเดียวกันที่กำหนดให้เป็นอินพุต

หากs n +1คือa(เช่นถ้วยนอกจากนี้) แล้วจะต้องไม่เป็นสถานที่ใด ๆ ก่อนหน้าลิตรในการอ่านเพื่อที่ถ้วยสามารถเพิ่มโครงสร้างที่สร้างขึ้นโดยS n เป็นผลให้ subsequence ของS nต่อไปนี้S เมตรต้องทั้งหมดa(ตั้งแต่rจะบ่งบอกว่าทั้งสองมีพื้นที่ว่างก่อนลิตรหรือS nไม่ดีที่สุด.) เมื่อเรามาถึงขั้นตอนการลิตรเราจะต้อง เพิ่มถ้วยn - m ทุกประการก่อนที่เราจะสามารถเพิ่มถ้วยที่lดังนั้นลำดับผลลัพธ์จะเป็นSmตามด้วยองค์ประกอบ n - m + 1aซึ่งเท่ากับ S n +1 (จะไม่มีความไม่ตรงกันหลังจากจุดนี้ดังนั้นนี่คือลำดับที่สมบูรณ์ที่สร้างขึ้น)

ในทำนองเดียวกันถ้าs n +1เป็นrแล้วจะต้องไม่เป็นถ้วยใด ๆ ในสถานที่ก่อนหน้าลิตรในการอ่านคำสั่งในโครงสร้างที่สร้างขึ้นโดยS n เป็นผลให้ subsequence ของS nต่อไปนี้S เมตรrต้องทั้งหมด เมื่อเรามาประมวลผลlเราจะต้องลบn-m cups ออกก่อนที่เราจะสามารถเอาถ้วยที่lดังนั้นลำดับผลลัพธ์จะเป็นS mตามด้วยองค์ประกอบn - m + 1 rซึ่งเท่ากับS nอีกครั้ง+1

กล่าวอีกนัยหนึ่งวิธีการของเราสร้างลำดับที่ดีที่สุดสำหรับโครงสร้างอินพุตดังกล่าวดังนั้นโดยการเหนี่ยวนำสำหรับโครงสร้างอินพุตใด ๆ

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

ความเป็นเอกลักษณ์

เราสามารถใช้การเพิ่มประสิทธิภาพของวิธีการของเราเพื่อแสดงให้เห็นว่าลำดับที่ดีที่สุดคือในความเป็นจริงไม่ซ้ำกัน (นั่นคือไม่มีลำดับที่ดีที่สุดที่แตกต่างกันสองอย่างสร้างโครงสร้างเดียวกัน) เราใช้อีกครั้ง เห็นได้ชัดว่าลำดับที่ว่างเปล่าเป็นลำดับการสร้างที่ดีที่สุดที่เป็นเอกลักษณ์ของโครงสร้างที่ว่าง สมมติว่าทุกการสร้างที่ดีที่สุดลำดับของความยาวnจะไม่ซ้ำกันและพิจารณาโครงสร้างΣ, สร้างขึ้นโดยลำดับสองที่ดีที่สุดS n 1และT n +1

จำได้ว่าS nและT nเป็นตัวที่ดีที่สุดและดังนั้นโดยสมมติฐานที่ไม่ซ้ำกัน ตั้งแต่วิธีการของเราผลิตลำดับที่ดีที่สุดS nและT nสามารถจะคิดว่าเป็นที่สร้างขึ้นโดยวิธีการของเรา ให้l Sและl Tเป็นตำแหน่งที่แก้ไขโดยการดำเนินการครั้งสุดท้ายในS n +1และT n +1ตามลำดับและสมมติว่าโดยไม่สูญเสียความนิยมทั่วไปที่l Sติดตามหรือเท่ากับl Tในลำดับการอ่าน เนื่องจากโครงสร้างที่สร้างโดยS nและT nเห็นด้วยในทุกสถานที่ต่อไปนี้l Sในลำดับการอ่านลำดับที่ผลิตโดยวิธีการของเรากำหนดโครงสร้างเป็นอินพุตเมื่อถึงl S (แต่ก่อนการประมวลผล) จะเหมือนกันสำหรับทั้งสอง; เรียกลำดับนี้U

เนื่องจากการกระทำล่าสุดของS n +1แก้ไขl SหากΣมีถ้วยที่l Sดังนั้นจะต้องไม่มีตำแหน่งว่างใด ๆ ก่อนl Sและถ้าΣไม่มีถ้วยที่l Sดังนั้นจะต้องไม่มี ถ้วยก่อนl Sในลำดับการอ่าน ดังนั้นส่วนที่เหลือของลำดับการสร้างΣตามUจะต้องประกอบด้วยการใช้ซ้ำของคำสั่งเดียวกันซ้ำ ๆ โดยมีหรือไม่มีถ้วยที่l S (หรืออื่น ๆ มันจะไม่เหมาะสม) ในคำอื่น ๆS n 1และT n +1มีความเท่าเทียมกัน (ทั้งคู่เริ่มต้นด้วยUและลงท้ายด้วยลำดับคำสั่งที่พูดซ้ำ ๆ กัน) นั่นคือลำดับการสร้างที่ดีที่สุดของΣนั้นไม่เหมือนใครและดังนั้นโดยการเหนี่ยวนำลำดับการสร้างที่ดีที่สุดทั้งหมดจะไม่ซ้ำกัน

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