อัลกอริธึมเชิงเส้นเวลาสำหรับการค้นหาค่าสูงสุดที่เลื่อน


11

สมมติว่าเราได้รับอาร์เรย์ที่มีจำนวนเต็มไม่ใช่ค่าลบ (ไม่จำเป็นต้องแตกต่างกัน)A[1..n]

ให้เป็นเรียงตามลำดับที่ไม่เพิ่มขึ้น เราต้องการคำนวณ BA

m=maxi[n]B[i]+i.

วิธีการแก้ปัญหาที่เห็นได้ชัดคือการเรียงลำดับแล้วคำนวณเมตร สิ่งนี้ให้อัลกอริทึมที่ทำงานในเวลาO (n \ lg n)ในกรณีที่แย่ที่สุดAmO(nlgn)

เป็นไปได้ไหมที่จะทำได้ดีกว่า เราสามารถคำนวณmในเวลาเชิงเส้นได้หรือไม่?


คำถามหลักของฉันคือคำถามข้างต้น แต่มันน่าสนใจที่จะทราบเกี่ยวกับการวางนัยทั่วไปของปัญหา

ให้Bเป็นAเรียงตามการเปรียบเทียบ oracle และfฟังก์ชั่นที่กำหนดโดย oracle ให้Aและ oracles สำหรับและfเราสามารถพูดอะไรเกี่ยวกับเวลาที่ต้องใช้ในการคำนวณm=maxi[n]f(B[i],i) ?

เรายังสามารถคำนวณmในO(nlgn)เวลา แต่เราสามารถพิสูจน์ขอบเขตล่างสุดของเส้นตรงสำหรับกรณีทั่วไปนี้ได้หรือไม่?

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

คำตอบ:


10

เราสามารถคำนวณในเวลาเชิงเส้นได้m

สำหรับความเรียบง่ายสมมติว่าอาร์เรย์เป็น 0 ตาม: ,[0..n-1] เราต้องการที่จะคำนวณ iB [ 0 .. n - 1 ] m = สูงสุดฉัน B [ i ] + iA[0..n1]B[0..n1]m=maxiB[i]+i

ให้[ผม] เห็นได้ชัดเมตรm a xmax=maxiA[i]maxm

ให้เป็นหลังจากการเรียงลำดับ ถ้าเรามี B [ k ] A [ j ] m a x - n B [ k ] + k B [ k ] + ( n - 1 ) = A [ j ] + ( n - 1 ) ( m a x - n ) + ( n - 1 ) =A[j]B[k]A[j]maxn

B[k]+kB[k]+(n1)=A[j]+(n1)(maxn)+(n1)=max1<maxm.

ดังนั้นเราจึงสามารถละเว้นเมื่อn เราต้องพิจารณาตัวเลขในช่วงเท่านั้นA [ j ] m a x - n [ m a x - n , m a xA[j]A[j]maxn[maxn,max]

เราสามารถใช้การนับเรียงลำดับการเรียงลำดับตัวเลขใน ซึ่งอยู่ในช่วงเส้นเวลาและใช้รายการที่เรียงลำดับการคำนวณเมตร[ m a x - n , m a x ] mA[maxn,max]m


... mmm ... แต่ราคาของ C [x] = C [x] +1 คืออะไร!
Marzio De Biasi

1
มีปัญหากับคำตอบของคุณไหม? เพราะมันดูดีสำหรับฉัน: คุณกำลังบอกว่าเราใส่ใจเฉพาะองค์ประกอบของอาเรย์ด้วยค่าในดังนั้นเราจึงสามารถใช้การจัดเรียงแบบนับได้ สิ่งนี้ใช้ได้กับปัญหาทั่วไปเมื่อใดก็ตามสำหรับทุกฉัน[Mn,M]|f(B[i],i)B[i]|=O(n)i
Sasho Nikolov

ขอบคุณ @Marzio :) ฉันแก้ไขคำตอบของคุณเล็กน้อยเพื่อความชัดเจน อย่าลังเลที่จะย้อนกลับการแก้ไขหรือแก้ไขเพิ่มเติม
Kaveh

1
วิธีแก้ปัญหานี้ดูเหมือนว่าจะทำงานได้กับทุกที่ซึ่งและ ,(n) f(x,i)xin|f(x,i)x|=O(n)
Kaveh

@Kaveh: แก้ไขก็โอเค! ฉันเขียนคำตอบอย่างรวดเร็วและฉันก็ไม่แน่ใจในความถูกต้องของมัน: -S
Marzio De Biasi

-1

หากอาร์เรย์ประกอบด้วยจำนวนเต็มที่แตกต่างกันดังนั้นเนื่องจากระยะห่างระหว่างรายการที่อยู่ติดกันในเป็นอย่างน้อย ; สถานการณ์น่าสนใจมากขึ้นเมื่อพวกเขาไม่ต้องการชัดเจนAm=max(A)+1B1

สำหรับคำถามทั่วไปมากขึ้นของคุณจินตนาการสถานการณ์ที่เป็นเพียง "น่าสนใจ" เมื่อJ ดูเหมือนจะเป็นไปได้ที่จะสร้างอาร์กิวเมนต์ที่เป็นปฏิปักษ์ซึ่งบังคับให้คุณค้นหาสำหรับทั้งหมดก่อนที่คุณจะรู้ดังนั้นคุณต้องเรียงเพื่อ หาคำตอบซึ่งจะการเปรียบเทียบ (มีภาวะแทรกซ้อนบางอย่างเนื่องจากอาจเป็นกรณีที่เราสามารถทดสอบได้ว่าอยู่ในค่าคงที่มากกว่าเวลาเชิงเส้นโดยการสอบถามหรือไม่) นี่เป็นกรณีแม้ว่าคือพหุนาม (ระดับสูง)f(B[i],j)i=jf(B[i],i)imaxif(B[i],i)AΩ(nlogn)A[i]=B[j]f(A[i],j)f


1
เกิดอะไรขึ้นถ้า A มี n - 1 ศูนย์และหนึ่งเดียว? จากนั้นคำตอบคือ n ไม่ใช่ 1
Grigory Yaroslavtsev

สวัสดี Yuval มีสามารถทำซ้ำตัวเลขใน ดังกริกอกล่าวว่าวิธีแก้ปัญหาดูเหมือนจะไม่ทำงาน A
Kaveh

ฉันคิดว่าฉันเห็นความคิดของคุณสำหรับอาร์กิวเมนต์ต่ำผูกพัน: รับเราสามารถคำนวณอย่างรวดเร็วโดยใช้คู่แบบสอบถามที่ทำกับโดยการแก้ปัญหาที่เกิดขึ้นในเวลาที่อัลกอริทึมLG) เราสามารถตรวจสอบให้แน่ใจว่าอัลกอริทึมค้นหาทั้งหมดแต่เราไม่สามารถแน่ใจได้ว่ามันจะไม่สืบค้นคู่อื่น ๆ อย่างไรก็ตามเราสามารถตั้งค่าสำหรับคู่อื่น ๆ ให้เป็นค่าที่แตกต่างเพื่อให้เราสามารถยกเลิกคู่เหล่านั้น B f o ( n lg n ) f ( B [ i ] , i ) fABfo(nlgn)f(B[i],i)f
Kaveh
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.