สมมติว่าเรามีบันทึก ซึ่งแต่ละบันทึกมีรหัสและการประทับเวลาที่ไม่ซ้ำกัน Timestamp คือสตริงที่มีรูปแบบ:Year:Month:Day:Hour:Minute:Second ตัวอย่างเช่น 2019:01:01:23:59:59 โดเมนทั้งหมดเป็นเลขทศนิยมที่มีเบาะเป็นศูนย์
เราต้องออกแบบระบบการจัดเก็บบันทึกเพื่อใช้ฟังก์ชั่นต่อไปนี้ -
-
void Put(int id, string timestamp):การดำเนินการนี้จะนำ id และเวลาประทับที่ไม่ซ้ำกันของบันทึก และเก็บบันทึกในระบบจัดเก็บข้อมูล
-
int[] Retrieve(String start, String end, String granularity):สิ่งนี้จะส่งคืน id ของบันทึกที่มีการประทับเวลาอยู่ภายในช่วงตั้งแต่พารามิเตอร์เริ่มต้นจนถึงสิ้นสุด พารามิเตอร์ความละเอียดระบุระดับเวลาสำหรับการพิจารณา ตัวอย่างเช่น start ="2019:01:01:23:59:59" end ="2019:01:02:23:59:59" และ granularity ="Day" หมายความว่าเราจำเป็นต้องค้นหา บันทึกภายในช่วงตั้งแต่วันที่ 1 มกราคม 2019 ถึง 2 มกราคม 2019
ดังนั้นหากอินพุตเป็นแบบ
-
ใส่(1, "2019:01:01:23:59:59");
-
ใส่(2, "2019:01:01:22:59:59");
-
ใส่(3, "2018:01:01:00:00:00");
-
ดึงข้อมูล("2018:01:01:01:01:01","2019:01:01:23:00:00","ปี");
-
ดึงข้อมูล("2018:01:01:01:01:01","2019:01:01:23:00:00","ชั่วโมง");
ผลลัพธ์จะเป็น [1,2,3] เนื่องจากเราต้องส่งคืนบันทึกทั้งหมดภายในช่วง 2018 และ 2019 และ [1,2] เนื่องจากเราต้องส่งคืนบันทึกทั้งหมดตั้งแต่ 2018:01:01:01 ถึง 2019:01:01:23 โดยที่บันทึก 3 อยู่นอกช่วง
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
กำหนดตัวเริ่มต้น
-
บันทึก :=รายการใหม่
-
กำหนดฟังก์ชัน put() นี่จะใช้ id, timestamp
-
ใส่ id, timestamp ที่ท้ายบันทึก
-
กำหนดฟังก์ชั่นดึง () นี่จะใช้เวลา s, e, gra
-
index :=แผนที่เช่น {'Year':5, 'Month' :8, 'Day' :11, 'Hour' :14, 'Minute' :17, 'Second' :20}[gra]
-
start :=s[จากดัชนี 0 ถึงดัชนี]
-
end :=e[จากดัชนี 0 ถึงดัชนี]
-
return (tid สำหรับแต่ละ tid, timestamp ในบันทึกถ้า start <=timestamp[from index 0 to index] <=end)
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
class LogSystem(object): def __init__(self): self.logs = [] def put(self, id, timestamp): self.logs.append((id, timestamp)) def retrieve(self, s, e, gra): index = {'Year':5, 'Month' : 8, 'Day' : 11, 'Hour' : 14, 'Minute' : 17, 'Second' :20}[gra] start = s[:index] end = e[:index] return (tid for tid, timestamp in self.logs if start <= timestamp[:index] <= end) ob = LogSystem() ob.put(1, "2019:01:01:23:59:59") ob.put(2, "2019:01:01:22:59:59") ob.put(3, "2018:01:01:00:00:00") print(list(ob.retrieve("2018:01:01:01:01:01","2019:01:01:23:00:00","Year"))) print(list(ob.retrieve("2018:01:01:01:01:01","2019:01:01:23:00:00","Hour")))
อินพุต
ob.put(1, "2019:01:01:23:59:59") ob.put(2, "2019:01:01:22:59:59") ob.put(3, "2018:01:01:00:00:00") ob.retrieve("2018:01:01:01:01:01","2019:01:01:23:00:00","Year") ob.retrieve("2018:01:01:01:01:01","2019:01:01:23:00:00","Hour")
ผลลัพธ์
[1, 2, 3] [1, 2]