ในเวลา O (n): ค้นหาองค์ประกอบที่ยิ่งใหญ่ที่สุดในชุดซึ่งการเปรียบเทียบไม่ได้ผ่านการถ่ายทอด


21

หัวข้อระบุคำถาม

เรามีรายการองค์ประกอบที่เราสามารถเปรียบเทียบได้ (พิจารณาว่าอะไรคือสิ่งที่ยิ่งใหญ่ที่สุด ) องค์ประกอบไม่สามารถเท่ากับ

ประเด็นสำคัญ:

  1. การเปรียบเทียบไม่ใช่การถ่ายทอด (คิดว่ากรรไกรกระดาษหิน): สิ่งนี้เป็นจริง: A> B, B> C, C> A (โปรดทราบว่านี่ไม่ใช่การป้อนข้อมูลที่ถูกต้องเนื่องจากไม่มีคำตอบที่ถูกต้องที่นี่ฉันแค่อธิบายว่า " การเปรียบเทียบที่ไม่เกี่ยวกับสกรรมกริยา "หมายถึง)
  2. แต่ละอาร์เรย์อินพุตจะรับประกันว่าจะมีคำตอบ
  3. ยิ่งใหญ่ที่สุดหมายถึงองค์ประกอบจะต้องมากกว่าองค์ประกอบอื่น ๆ
  4. คุณสมบัติการสนทนาถือเช่น A> B หมายความว่า B <A

ตัวอย่าง:

Input: [A,B,C,D]
A > B, B > C, C > A
D > A, D > B, D > C
Output: D

ฉันไม่สามารถหาวิธีที่จะทำสิ่งนี้ได้ในเวลา O (n) ทางออกที่ดีที่สุดของฉันคือ O (n ^ 2)

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

กฎนี้ใช้งานฮีปการเรียงลำดับเป็นต้น


8
ไม่ชัดเจนว่าจะกำหนดองค์ประกอบที่ยิ่งใหญ่ที่สุดอย่างไร ตัวอย่างซึ่งเป็นองค์ประกอบที่ยิ่งใหญ่ที่สุดถ้า> B , B > C , C > ? คุณมีกฎการเปรียบเทียบอื่น ๆ บ้างไหม? A>B,B>C,C>A
fade2black

6
ฉันไม่สามารถจินตนาการได้ว่าเราจะเลือกองค์ประกอบที่ยิ่งใหญ่ที่สุดในชุดที่ไม่ได้สั่งอย่างน้อยบางส่วนได้อย่างไร โปรดดูคำจำกัดความขององค์ประกอบที่ยิ่งใหญ่ที่สุดและน้อยที่สุด ขาดกฎกติกาของการออกคำสั่งบางส่วน
fade2black

3
@ fade2black ทำไมคุณถึงเชื่อมโยงฉันกับคำจำกัดความของ "ยิ่งใหญ่" อีก ฉันระบุคำจำกัดความที่ยิ่งใหญ่ที่สุดอย่างชัดเจนสำหรับบริบทของคำถามนี้ วิธีที่ยิ่งใหญ่ที่สุดองค์ประกอบนั้นมีค่ามากกว่าองค์ประกอบอื่น ๆ องค์ประกอบไม่เท่ากัน นั่นคือทั้งหมดที่มีให้มัน นี่ไม่ชัดเจนหรือ
James Wierzba

2
ตัวอย่างสุดท้ายของคุณกับ A, B, C, D จะเป็นประโยชน์ในการเข้าใจคำถามของคุณหากคุณรวมไว้ใน OP ของคุณ
fade2black

3
สมาชิกของทีมคอมไพเลอร์ C # เคยถามคำถามนี้เป็นคำถามสัมภาษณ์ มันมีความเกี่ยวข้องเพราะใน C # อัลกอริทึมการแก้ปัญหาการโอเวอร์โหลดต้องเลือกสมาชิกที่ดีที่สุดที่ไม่ซ้ำกันของชุดที่ให้ความสัมพันธ์ "betterness" ที่มักจะ แต่ไม่จำเป็นต้องสกรรมกริยา (หรือให้คำตอบที่เหมาะสมหากไม่มีสมาชิกที่ดีที่สุดที่ไม่เหมือนใคร; เป็นไปได้ที่ความสัมพันธ์) แม้ว่าฉันจะตอบคำถามได้อย่างถูกต้อง แต่ฉันไม่เคยคิดว่ามันเป็นคำถามสัมภาษณ์ที่ดีโดยเฉพาะ อัลกอริทึมเชิงเส้น
Eric Lippert

คำตอบ:


38

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

เพื่อให้ชัดเจนโดย "อัลกอริธึมมาตรฐาน" ฉันหมายถึงสิ่งต่อไปนี้:

max <- a_1
for i=2 to n
   if a_i > max
      max <- a_i
output max

เพื่อความสมบูรณ์ฉันจะพูดถึงที่นี่ปัญหาที่เกิดขึ้นในความคิดเห็น การตั้งค่าในการอภิปรายดังกล่าวข้างต้นคือการหาญาติสูงสุดให้กับความสัมพันธ์สมมาตรต่อต้านที่ฉันเป็นสูงสุดถ้าสำหรับทุกJ ฉันเรามีฉัน >เจ อัลกอริทึมด้านบนทำงานภายใต้สมมติฐานว่ามีค่าสูงสุดอยู่อย่างไรก็ตามถ้าไม่ทราบเราสามารถใช้มันเพื่อตรวจสอบการมีอยู่ของค่าสูงสุด (ตรวจสอบว่าองค์ประกอบที่คืนมานั้นมีค่ามากกว่าองค์ประกอบอื่น ๆ ทั้งหมดหรือไม่ และในคำตอบของ Ilmari Karonen)<aผมJผมaผม>aJ

หากไม่จำเป็นต้องต่อต้านสมมาตรดังนั้นอัลกอริทึมด้านบนจึงล้มเหลว (ดังที่ Emil ได้กล่าวไว้ในความคิดเห็น) หาก<เป็นความสัมพันธ์โดยพลการ (เช่นเราผ่อนคลายทั้งความไวและความต้านทานต่อสมมาตร) ดังนั้นจึงไม่ยากที่จะแสดงว่าการหาค่าสูงสุดในเวลาเชิงเส้นเป็นไปไม่ได้ แสดงเป็นจำนวน# ฉันเป็นจำนวนครั้งที่ฉันเข้าร่วมในแบบสอบถามเรากำหนดความสัมพันธ์ของฝ่ายตรงข้ามในลักษณะที่จำนวนสูงสุดไม่สามารถเปิดเผยได้หากไม่มีข้อความค้นหาเพียงพอ ได้รับแบบสอบถามฉัน > ? Jตอบฉัน > Jถ้า# ฉัน<<#aผมaผมaผม>?aJaผม>aJและฉัน < เจมิฉะนั้น หากจำนวนการสืบค้นคือ o ( n 2 )จะยังไม่เห็นจำนวนสูงสุดและสามารถตั้งค่าให้เป็นองค์ประกอบอย่างใดอย่างหนึ่งในชุด#aผม<n-1aผม<aJโอ(n2)


1
@JamesWierzba (ฉันคิดว่า) เขาแค่หมายถึงองค์ประกอบ "ข้าม" เป็นองค์ประกอบที่ไม่สูงกว่าค่าสูงสุดในปัจจุบันของคุณ พิจารณาอัลกอริทึมมาตรฐาน: คุณตรวจสอบแต่ละค่าในรายการของคุณเทียบกับค่าสูงสุดในปัจจุบัน คุณเคยบอกว่ามีองค์ประกอบที่ยิ่งใหญ่ที่สุดในแต่ละรายการ ในบางจุดคุณจะเปรียบเทียบกับจำนวนสูงสุดในปัจจุบันของคุณและเนื่องจากมีขนาดใหญ่กว่าค่าดังกล่าวจึงกลายเป็นค่าสูงสุดใหม่ของคุณ เนื่องจากค่านี้มีค่ามากกว่าทุกอย่างในรายการคุณจะไม่พบองค์ประกอบที่ยิ่งใหญ่กว่าและมูลค่าที่ยิ่งใหญ่ที่สุดของคุณจะไม่ถูกแทนที่ หลังจากnการเปรียบเทียบของคุณค่าสูงสุดปัจจุบันของคุณจะต้องเป็นคำตอบ
Lord Farquaad

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

7
สิ่งนี้ขึ้นอยู่กับข้อสมมติฐาน 2 ในคำถาม: มีค่าสูงสุดในอาร์เรย์เสมอ หากไม่ใช่กรณีนี้maxอาจเป็นได้สูงสุดของระบบย่อยย่อยเท่านั้น ถึงกระนั้นแม้จะไม่มีข้อสันนิษฐานที่ 2 แต่ก็สามารถหาค่าสูงสุดเบื้องต้นได้แล้วตรวจสอบอาร์เรย์ทั้งหมดโดยใช้การสแกนครั้งที่สองภายในขอบเขต O (n)
Chi

7
คำตอบนี้อนุมานว่าและB > Aไม่สามารถค้างไว้พร้อมกันได้ เท่าที่ฉันเห็นสิ่งนี้ไม่ได้ถูกตัดออกในคำถาม A>BB>A
Emil Jeřábekสนับสนุน Monica

4
@ oconnor0 นั่นไม่ได้ติดตาม สำหรับตัวอย่างที่เป็นรูปธรรมให้สมมุติว่า A> B, A> C, B> A และ C> B. จากนั้น A มากกว่าองค์ประกอบอื่น ๆ ในชุด (และเป็นองค์ประกอบเดียวที่มีคุณสมบัตินี้) แต่ถ้าองค์ประกอบนั้นเป็น พบในคำสั่ง A, B, C, อัลกอริทึมจะส่งออก C.
Emil Jeřábekสนับสนุนโมนิกา

24

ในฐานะที่เป็นเอเรียลบันทึกอัลกอริทึมการค้นหาสูงสุดมาตรฐานที่ระบุด้านล่าง:

def find_maximum(a):
    m = a[0]
    for x in a:
        if x > m: m = x
    return m

จะใช้งานได้จริงโดยไม่มีการดัดแปลงตราบใดที่:

  • องค์ประกอบใด ๆ ที่สามารถเปรียบเทียบและ
  • อินพุตรับประกันว่าจะมีองค์ประกอบสูงสุดคือองค์ประกอบที่เป็น pairwise มากกว่าองค์ประกอบอื่น ๆ ในอินพุต

(ข้อสันนิษฐานแรกข้างต้นสามารถผ่อนคลายได้จริงโดยไม่ต้องปรับเปลี่ยนอัลกอริทึมตราบใดที่เราสันนิษฐานว่าองค์ประกอบสูงสุดเทียบได้กับองค์ประกอบอื่น ๆ และx > yเป็นเท็จเสมอถ้าองค์ประกอบxและyหาที่เปรียบมิได้)

โดยเฉพาะอย่างยิ่งการอ้างสิทธิ์ของคุณที่:

[…] เพื่อให้แน่ใจในคำตอบองค์ประกอบจะต้องมีการเปรียบเทียบอย่างชัดเจนกับองค์ประกอบอื่น ๆ ทั้งหมด (เนื่องจากการเปรียบเทียบไม่ใช่สกรรมกริยา)

ไม่เป็นจริงภายใต้สมมติฐานที่ให้ไว้ข้างต้น ในความเป็นจริงเพื่อพิสูจน์ว่าอัลกอริทึมด้านบนจะค้นหาองค์ประกอบสูงสุดเสมอก็เพียงพอที่จะสังเกตว่า:

  1. เนื่องจากการวนซ้ำวนซ้ำทุกองค์ประกอบอินพุตที่การวนซ้ำบางรายการxจะเป็นองค์ประกอบสูงสุด
  2. เนื่องจากองค์ประกอบสูงสุดเป็น pairwise มากกว่าองค์ประกอบอื่น ๆ ทุกอย่างมันจึงตามมาว่าในตอนท้ายของการทำซ้ำนั้นmจะเป็นองค์ประกอบสูงสุด และ
  3. เนื่องจากไม่มีองค์ประกอบอื่นใดสามารถจับคู่ได้มากกว่าองค์ประกอบสูงสุดมันจึงตามมาซึ่งmจะไม่เปลี่ยนแปลงในการวนซ้ำใด ๆ ที่ตามมา

ดังนั้นในตอนท้ายของลูปmจะเป็นองค์ประกอบสูงสุดเสมอหากอินพุตมีหนึ่งรายการ


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

def find_maximum_if_any(a):
    # step 1: find the maximum, if one exists
    m = a[0]
    for x in a:
        if x > m: m = x

    # step 2: verify that the element we found is indeed maximal
    for x in a:
        if x > m: return None  # the input contains no maximal element
    return m  # yes, m is a maximal element

(ฉันสมมติว่านี่>คือความสัมพันธ์แบบirreflexive นั่นคือไม่มีองค์ประกอบใดสามารถยิ่งใหญ่กว่าตัวเองได้หากไม่จำเป็นต้องเป็นกรณีนี้การเปรียบเทียบx > mในขั้นตอนที่ 2 ควรถูกแทนที่ด้วยx ≠ m and x > mโดยที่จะเป็นการเปรียบเทียบตัวตนหรือเราอาจใช้การเพิ่มประสิทธิภาพ ระบุไว้ด้านล่าง.)

เพื่อพิสูจน์ความถูกต้องของอัลกอริทึมการเปลี่ยนแปลงนี้ให้พิจารณาสองกรณีที่เป็นไปได้:

  • หากอินพุตมีองค์ประกอบสูงสุดแล้วขั้นตอนที่ 1 จะค้นหา (ดังแสดงด้านบน) และขั้นตอนที่ 2 จะยืนยัน
  • ถ้าใส่ไม่ได้มีองค์ประกอบสูงสุดแล้วขั้นตอนที่ 1 mจะจบลงหยิบบางองค์ประกอบโดยพลการเป็น มันไม่สำคัญซึ่งองค์ประกอบมันเป็นเพราะมันจะในกรณีใด ๆ จะไม่ใช่สูงสุดและดังนั้นขั้นตอนที่ 2 Noneจะตรวจสอบว่าและผลตอบแทน

ถ้าเราเก็บไว้ในดัชนีของmในอาร์เรย์การป้อนข้อมูลที่aเราสามารถทำได้จริงขั้นตอนการเพิ่มประสิทธิภาพที่ 2 เพื่อตรวจสอบองค์ประกอบเฉพาะผู้ที่มาก่อนmในaตั้งแต่องค์ประกอบใด ๆ ในภายหลังได้รับแล้วเมื่อเทียบกับmในขั้นตอนที่ 1 แต่เพิ่มประสิทธิภาพนี้ไม่ได้เปลี่ยนความซับซ้อนเชิงเวลา ของอัลกอริทึมซึ่งยังคงเป็น O ( n )


3
ในความเป็นจริง OP ข้ามรายละเอียดมากมาย ตัวอย่างเช่นไม่มีการพูดเกี่ยวกับการสะท้อนกลับของความสัมพันธ์และดังนั้นหากไม่สะท้อนก็if x > m:จะไม่ได้กำหนด
fade2black

4

O(n)

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

n-1

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


1
" กราฟกำกับทิศทาง " เป็นรูปแบบที่ผิด: ควรเป็น " ทัวร์นาเมนต์ " แทน อนุญาตให้ใช้รอบและมันเป็นสิ่งสำคัญที่ทุก ๆ ขอบมีอยู่ในทิศทางเดียว
Peter Taylor

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

3

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

หากองค์ประกอบบางอย่างไม่สามารถเปรียบเทียบกันได้กระบวนการต่อไปนี้จะใช้งานได้

max = nil
For i=1 to n
   if max is nil then
      max = a[i]
   if max and a[i] are not comparable then
      max = nil
   else if max < a[i] then
      max = a[i]
End

A,B,C,D

A>B,B>C,C>A
D>A,D>B,D>C


ผม=1: สูงสุด=A
ผม=2: สูงสุด=AA>B
ผม=3: สูงสุด=CA<C
ผม=4: สูงสุด=D (ตั้งแต่ D>C)

อัลกอริทึมนี้ใช้งานได้ตั้งแต่ถ้า ม.>a (or a<ม.) สำหรับทุกอย่าง a แล้วก็ ม.เป็นสิ่งที่ยิ่งใหญ่ที่สุด ถ้าม.<a สำหรับองค์ประกอบบางอย่าง a แล้วก็ ม.ไม่สามารถยิ่งใหญ่ที่สุด ในทำนองเดียวกันถ้าa และ ม.ไม่เปรียบเทียบกันแล้วพวกเขาทั้งสองไม่สามารถยิ่งใหญ่ที่สุด ขั้นตอนนี้จะใช้งานได้แม้ว่าองค์ประกอบทั้งหมดจะเปรียบเทียบกัน


ฉันไม่คิดว่าelse ifจำเป็นก่อน ไม่สามารถเรียกใช้งานได้หากmaxเป็นค่าสูงสุดและหากค่าสูงสุดยังไม่ได้รับการตรวจพบจะไม่สำคัญว่าค่าของmaxคืออะไร
rici

ใช่นั่นเป็นครั้งแรก ส่วนอีกคนหนึ่งเป็นครั้งที่สองหนึ่ง :)
RICI

คุณหมายถึงออกจากifโดยไม่elses? มันเป็นเพียงนิสัย: กับelses เราไม่ได้เปรียบเทียบ :)
fade2black

1
จะเป็นการง่ายกว่าหรือไม่ที่จะเริ่มต้นmaxองค์ประกอบใด ๆ ของรายการและภายในลูปจะทำอย่างไรif max and a[i] are comparable and max < a[i] then max = a[i](ซึ่งส่วนแรกของเงื่อนไขอาจถูกละเว้นได้ถ้าเราสมมติว่าพยายามเปรียบเทียบสององค์ประกอบที่หาตัวจับยากเปรียบเทียบเสมอให้ผลเป็นเท็จ)?
Ilmari Karonen

1
@badallen OP ถือว่าเป็นองค์ประกอบที่ยิ่งใหญ่ที่สุดเสมอ ในตัวอย่างของคุณไม่มีองค์ประกอบที่ยิ่งใหญ่ที่สุด
fade2black

2

นอกเหนือจากคำตอบของ Arielเกี่ยวกับข้อกังวลของเอมิลJeřábek : ถ้าเราอนุญาตA<B และ B<A ดังนั้นจึงไม่มีอัลกอริทึม O (n):

สมมติว่าคุณมีองค์ประกอบ A1...An. อัลกอริทึมของคุณจะอยู่ในแบบสอบถามแต่ละขั้นAผม<AJสำหรับบางคู่ฉันและเจ ไม่ว่าจะเรียงตามลำดับที่คุณค้นหาพวกเขาจะมีความสัมพันธ์ที่คุณต้องค้นหาความสัมพันธ์ทั้งหมดก่อนที่จะหาค่าสูงสุด เหตุผลนี้อธิบายได้ดีที่สุดโดยสมมติว่าคุณมีคู่ต่อสู้ที่สามารถเปลี่ยนปัญหาได้ในขณะที่อัลกอริทึมของคุณกำลังทำงานอยู่

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

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

ความสัมพันธ์ที่เกิดขึ้นจะเป็นเช่นนั้นเสมอ J0 ซึ่ง Aผม<AJ0ผม และอื่น ๆ ทั้งหมด J จะมีบ้าง ผมJ ดังนั้น Aผม<AJผมผมJ และเราจะไม่มี AผมJ<AJ. ฝ่ายตรงข้ามเลือกj0 and the ijs depending on your algorithm.

I hope this is somewhat understandable. Feel free to ask in comments or edit.

The basic idea is that you cannot gather any information about the remaining elements from the ones you already know if you allow a completely arbitrary relation.

The argument still works if we disallow A<A. We will only save n queries that way and still need n2n.


1

I'm going to cheat and call the number of A > B entries n and you need to look at every entry at least once.

That way you can loop over just the entries and remove the element that is less than the other from the set of possible solutions. With a hashset or similar this is possible in O(n)

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