Как массивы и хэш-карты отображают постоянное время при их доступе?

В частности: учитывая хэш (или индекс массива), как машина получает данные за постоянное время?

Мне кажется, что даже прохождение всех других ячеек памяти (или чего-то еще) потребует времени, равного количеству пройденных ячеек (т.е. линейное время). Коллега отважно пытался объяснить мне это, но вынужден был сдаться, когда мы дошли до схем.

Пример:

my_array = new array(:size => 20)
my_array[20] = "foo"
my_array[20] # "foo"

Доступ к «foo» в позиции 20 постоянен, потому что мы знаем, в каком ведре находится «foo». Как мы волшебным образом попали в это ведро, не обойдя всех остальных по пути? Чтобы добраться до дома №20 в квартале, вам все равно придется пройти мимо остальных 19 ...

15
задан keithcelt 13 January 2011 в 23:25
поделиться