ฉันเพิ่งอ่านว่ามันเป็นไปได้ที่จะมีอาร์เรย์ที่ไม่จำเป็นต้องเริ่มต้นคือมันเป็นไปได้ที่จะใช้พวกเขาโดยไม่ต้องใช้เวลาพยายามตั้งสมาชิกแต่ละคนเป็นค่าเริ่มต้น เช่นคุณสามารถเริ่มใช้อาร์เรย์ราวกับว่ามันได้รับการเริ่มต้นโดยค่าเริ่มต้นโดยไม่ต้องเริ่มต้นได้ (ขออภัยฉันจำไม่ได้ว่าอ่านตรงไหน)
ตัวอย่างเช่นสาเหตุที่อาจเป็นเรื่องน่าประหลาดใจ:
สมมติว่าคุณกำลังพยายามที่จะจำลอง ที่เลวร้ายที่สุดกรณี Hashtable (สำหรับแต่ละแทรก / search / ลบ) ของจำนวนเต็มในช่วง[ 1 , n 2 ]
คุณสามารถจัดสรรอาเรย์ที่มีขนาดบิต2บิตและใช้แต่ละบิตเพื่อแสดงการมีอยู่ของจำนวนเต็มใน hashtable หมายเหตุ: หน่วยความจำจัดสรรถือว่าO ( 1 )เวลา
ตอนนี้ถ้าคุณไม่ได้มีการเริ่มต้นอาร์เรย์นี้ทั้งหมดลำดับใด ๆ ของการพูดดำเนินการเมื่อวัน Hashtable ตอนนี้กรณีที่เลวร้ายO ( n )
ดังนั้นในความเป็นจริงคุณจะต้องมีการนำแฮช "สมบูรณ์แบบ" มาใช้ซึ่งลำดับของการปฏิบัติการใช้พื้นที่Θ ( n 2 )แต่ทำงานในเวลาO ( n ) !
โดยปกติแล้วหนึ่งคาดว่า runtime ของคุณจะเป็นอย่างน้อยไม่ดีเท่าการใช้พื้นที่ของคุณ!
หมายเหตุ: ตัวอย่างข้างต้นอาจถูกใช้สำหรับการดำเนินการของชุดเบาบางหรือเมทริกซ์กระจัดกระจายดังนั้นฉันจึงไม่เพียง แต่สนใจทางทฤษฎี
ดังนั้นคำถามคือ:
เป็นไปได้อย่างไรที่จะมีอาร์เรย์เช่นโครงสร้างข้อมูลซึ่งทำให้เราสามารถข้ามขั้นตอนการเริ่มต้นได้