當直接訪問數組對鍵而不是值進行排序時,它是如何進行排序的?

觀看麻省理工學院開放式課件5時。線性排序,教授談到了直接訪問數組排序:

def direct_access_sort(A):
    "Sort A assuming items have distinct non-negative keys"
    u = 1 + max([x.key for x in A]) # O(n) find maximum key
    D = [None] * u # O(u) direct access array
    for x in A: # O(n) insert items
        D[x.key] = x
    i = 0
    for key in range(u): # O(u) read out items in order
        D[key] is not None:
            A[i] = D[key]
            i += 1

假設所有鍵都是唯一的non-negative整數,范圍為{0,…,u?1},因此n≤u,這里描述的算法基本上是:

  1. 將每個項目插入一個直接訪問數組,大小u為Θ(n)
  2. 按項目在直接訪問數組中的出現順序返回Θ(u)中的項目

我想知道這怎么能被描述為“排序”,因為在我看來,這里唯一排序的是鍵而不是值。

? 最佳回答:

數組D將存儲A中項目的完整對象(鍵和值),因此當插入回A時,它是完整對象:A[i] = D[key]

示例:假設我們正在按身高對一組人進行排序,每個人都有一個與他們身高相等的鍵。輸入如下所示(為了簡單起見,不包括其他屬性):

A = [{key: 160}, {key: 150}, {key: 200}, {key: 188}]

這條線在A中找到最大高度:

u = 1 + max([x.key for x in A]) # O(n) find maximum key

在我們的例子中,是200。

這一行創建了一個新的u大小的數組,因此即使我們在A中只有4個元素,也可以創建一個200大小的數組:

D = [None] * u # O(u) direct access array

這個循環將整個對象(包括鍵)插入到新數組中,位于鍵的索引處。

for x in A: # O(n) insert items
    D[x.key] = x

因此,它是一個大小為200的數組,但只有4個索引具有值(這些索引是高度150160188200)。其余的是None

當向數組中插入元素時,我們需要一個計數器——這就是i的作用,所以它從0開始。

i = 0

現在我們從0迭代到最大密鑰(200)。

for key in range(u):

由于我們只有4個位置有值,我們需要檢查我們正在測試的當前高度是否為這4個位置之一:

D[key] is not None: # (I think this line needs an `if` in front of it)

如果鍵在數組中,我們用具有該高度的對象覆蓋A中的當前索引(i)。

A[i] = D[key]

這將首先發生在i=0和key=150時(因為150將是從0-200開始的第一個匹配)

最后,i是遞增的,所以我們不會多次在同一位置插入。

i += 1

因此,插入時的值如下:

i = 0, key = 150, D[key] = {key: 150}
i = 1, key = 160, D[key] = {key: 160}
i = 2, key = 188, D[key] = {key: 188}
i = 3, key = 200, D[key] = {key: 200}

考慮啟動一個調試器,看看運行時對象是什么樣子的。它實現了很多線性,但要求輸入是不同的non-negative。此外,想象一下用百萬/數十億的鍵對10個元素進行排序——arrays和迭代會變得非常大。

主站蜘蛛池模板: 午夜一区二区免费视频| 精品国产一区二区22| 亚洲国产综合无码一区| 日韩精品久久一区二区三区| 精品一区二区三区免费毛片爱| 内射女校花一区二区三区| 日韩美女在线观看一区| 亚洲AV一区二区三区四区| 91精品一区二区| 亚洲一区二区影院| 熟女精品视频一区二区三区| 国产av一区二区三区日韩| 精品亚洲综合在线第一区| 亚洲AV无码一区东京热久久| 中文字幕色AV一区二区三区| 少妇无码AV无码一区| 免费观看一区二区三区| 欧洲精品无码一区二区三区在线播放| 精品一区二区三区高清免费观看| 一区二区三区午夜| 日本大香伊一区二区三区| 日本高清成本人视频一区| 亚洲国产AV无码一区二区三区| 亚洲AV午夜福利精品一区二区 | 国产午夜精品一区二区三区极品| 亚洲天堂一区二区| 亚洲熟妇AV一区二区三区宅男 | 国产精品高清一区二区三区| 美女福利视频一区| 精品无码人妻一区二区三区| 中文字幕精品一区二区2021年| 国产精品久久久久久一区二区三区 | 久久国产一区二区三区| 久久无码人妻一区二区三区| 精品国产乱子伦一区二区三区 | 国产一区二区三区小向美奈子 | 国产情侣一区二区三区| 波多野结衣AV无码久久一区| 久久久久99人妻一区二区三区| 日日摸夜夜添一区| 精品一区二区三区无码视频|