Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

โปรแกรมกำหนดโครงสร้างข้อมูลที่รองรับช่วงผลรวมใน Python


สมมติว่าเราต้องการพัฒนาโครงสร้างข้อมูลที่สามารถสร้างรายการจำนวนเต็มได้ และมีฟังก์ชันในการค้นหาผลรวมขององค์ประกอบตั้งแต่ดัชนี i ถึงดัชนี j-1 เมื่อใดก็ตามที่เราต้องการอย่างมีประสิทธิภาพ มีสองหน้าที่

  • ตัวสร้างที่สร้างอินสแตนซ์ใหม่ด้วยอาร์เรย์จำนวนเต็ม
  • get_sum(i, j) คืนค่าผลรวมของจำนวนเต็มขององค์ประกอบอาร์เรย์จากดัชนีเริ่มต้น i และดัชนีสิ้นสุด j-1

ดังนั้น ถ้าอินพุตเป็นเหมือนอาร์เรย์ =[5,2,3,6,4,7,8,9,3,2] ให้สร้างวัตถุ obj และเรียกใช้ฟังก์ชัน obj.get_sum(1,5) และ obj get_sum(4,8) ดังนั้นผลลัพธ์จะเป็น 15 และ 28 ตามลำดับ เนื่องจากองค์ประกอบช่วงแรกคือ [2,3,6,4] ผลรวมคือ 15 และองค์ประกอบช่วงที่สองคือ [4,7,8,9] ผลรวมคือ 28

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • กำหนดคอนสตรัคเตอร์ นี่จะเป็นอาร์เรย์
  • sums :=นี่คือรายการ เริ่มแรกให้ใส่ 0
  • สำหรับแต่ละ x ในอาร์เรย์ ทำ
    • แทรก (x + (รายการสุดท้ายของผลรวม)) ที่ส่วนท้ายของผลรวม
  • กำหนดฟังก์ชัน get_sum() นี่จะใช้เวลา i, j
  • ผลตอบแทนรวม[j] - ผลรวม[i]

ตัวอย่าง

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

class RangeSum:
   def __init__(self, array):
      self.sums = [0]
      for x in array:
         self.sums.append(x + self.sums[-1])
   def get_sum(self, i, j):
      return self.sums[j] - self.sums[i]

array = [5,2,3,6,4,7,8,9,3,2]
obj = RangeSum(array)
print(obj.get_sum(1,5))
print(obj.get_sum(4,8))

อินพุต

[5,2,3,6,4,7,8,9,3,2]
obj.get_sum(1,5)
obj.get_sum(4,8)

ผลลัพธ์

15
28