1
โครงสร้างข้อมูลสำหรับแผนที่เป็นระยะ
ให้เป็นจำนวนเต็มและให้แทนเซตของจำนวนเต็มทั้งหมด ลองแสดงว่าช่วงเวลาของจำนวนเต็ม\}nnnZZ\mathbb{Z}[a,b][a,b][a,b]{a,a+1,a+2,…,b}{a,a+1,a+2,…,b}\{a,a+1,a+2,\dots,b\} ฉันกำลังมองหาโครงสร้างข้อมูลที่จะเป็นตัวแทนของแผนที่{Z} ฉันต้องการโครงสร้างข้อมูลเพื่อสนับสนุนการดำเนินการต่อไปนี้:f:[1,n]→Zf:[1,n]→Zf:[1,n] \to \mathbb{Z} get(i)get(i)\text{get}(i)ควรกลับ(i)f(i)f(i)f(i) set([a,b],y)set([a,b],y)\text{set}([a,b],y)ควรปรับปรุงเพื่อให้คือการปรับปรุงไปแผนที่ใหม่ดังกล่าวว่าสำหรับและสำหรับb]ffff(a)=f(a+1)=⋯=f(b)=yf(a)=f(a+1)=⋯=f(b)=yf(a)=f(a+1)=\cdots=f(b)=yffff′f′f'f′(i)=yf′(i)=yf'(i) = yi∈[a,b]i∈[a,b]i \in [a,b]f′(i)=f(i)f′(i)=f(i)f'(i) = f(i)i∉[a,b]i∉[a,b]i \notin [a,b] stab(i)stab(i)\text{stab}(i)ควรกลับช่วงเวลาที่ใหญ่ที่สุดเช่นนั้นและเป็นค่าคงที่ใน (เช่น )[a,b][a,b][a,b]i∈[a,b]i∈[a,b]i \in [a,b]fff[a,b][a,b][a,b]f(a)=f(a+1)=⋯=f(b)f(a)=f(a+1)=⋯=f(b)f(a)=f(a+1)=\cdots=f(b) add([a,b],δ)add([a,b],δ)\text{add}([a,b],\delta)ควรอัปเดตเป็นแผนที่ใหม่เช่นนั้นสำหรับและffff′f′f'f′(i)=f(i)+δf′(i)=f(i)+δf'(i) = f(i) + \deltai∈[a,b]i∈[a,b]i \in [a,b]f′(i)=f(i)f′(i)=f(i)f'(i) = f(i)สำหรับi∉[a,b]i∉[a,b]i \notin [a,b] ] ฉันต้องการให้การดำเนินการแต่ละอย่างมีประสิทธิภาพ ฉันจะนับเวลาหรืออย่างมีประสิทธิภาพ แต่เวลาช้าเกินไป มันก็โอเคถ้าเวลาการทำงานถูกตัดจำหน่ายเวลาการทำงาน มีโครงสร้างข้อมูลที่ทำให้การดำเนินการทั้งหมดเหล่านี้ไปพร้อม ๆO(1)O(1)O(1)O(lgn)O(lgn)O(\lg n)O(n)O(n)O(n) (ฉันสังเกตเห็นรูปแบบที่คล้ายกันเกิดขึ้นในการท้าทายการเขียนโปรแกรมหลายอย่างนี่เป็นลักษณะทั่วไปที่เพียงพอสำหรับปัญหาการท้าทายเหล่านั้นทั้งหมด)