[求助]对搜索紧凑链表的期望时间分析

2020-02-25 17:43:17 +08:00
 wssy

本题出自算法导论第 10-3 (第三版),主要是为了分析一个随机化搜索过程的期望运行时间。我才疏学浅,有几个点琢磨了好久没弄懂,也没看到靠谱的解释,所以上来问问大家。

题目简介: 假设 n 规模链表使用紧凑链表表示,搜索目标关键字渐进时间通常为 O(n),但存在算法可实现 O(√n)的期望运行时间。

下图表示一个紧凑链表,三个数组 next/key/prev 长度均为 6,链表有 4 个元素,使用 prev/next 访问前后元素,链表中所有元素总是占据数组的前 n 个位置,这里数组下标从 1 开始,L 表示链表起始元素下标,n 为链表规模,'/' 表示 nil:

| index     | 1      |  2     | 3      |  4     | 5      |  6    |
| --------    | -----   | ----   | -----  | ----    | -----  | ----   |
| next      | 2       |   /    | 1      |   3    |        |        |
| key        | 1      |   6    | 1      |   5    |        |        |
| prev      | 3       |   1    | 4      |   /    |        |        |

这里假设所有关键字互异,链表中元素按照关键字升序排列,k 为目标关键字,L/n 含义同前,算法实现如下:

COMPACT-LIST-SEARCH(L, n, k)

i = L

while i != nil and key[i] < k

    j = RAMDOM(1, n)

        if key[i] < key[j] and key[j] <= k

            i = j

            if key[i] == k

                return i

            i = next[i]

    if i == nil or key[i] > k

        return nil

    else return i

RAMDOM 过程以等概率返回[1, n]中任意数值。

为分析该算法,引入另一个算法 COMPACT-LIST-SEARCH':

COMPACT-LIST-SEARCH'(L, n, k, t)

    i = L

    for 1 to t

        j = RAMDOM(1, n)

            if key[i] < key[j] and key[j] <= k

                i = j

                if key[i] == k

                    return i

    while i != nil and key[i] < k

        i = next[i]

    if i == nil or key[i] > k

        return nil

    else return i

假设 RANDOM(1, n)返回的随机数序列在这两个算法中相同,并且 COMPACT-LIST-SEARCH 执行时为确定目标关键字,其 while 循环执行了 t 次。

目前可以证明第二个算法为了确定其目标关键字,其 for 和 while 循环一共至少会执行 t 次迭代。

再假设随机变量 Xt 表示第二个算法中 for 循环经过 t 次迭代之后,i 到目标关键字的距离(以需要 next 指针跳转的次数计),还可以说明第二个算法的期望运行时间为 O(t+E[Xt])。

那么,已知 E[Xt] = Pr{Xt >= 1} + Pr{Xt >= 2} + ... + Pr{Xt >= n},如何证明 E[Xt]<= ((n-1)/n)^t + ((n-2)/n)^t + ... + (1/n)^t ?

另外,大家对 t 和 Xt 是如何定义的?

比如 t 次迭代:1.表示第 t 次迭代中未执行完就返回,或者进入 t+1 次迭代前返回? 2.第 t+1 次迭代中未执行完就返回? 类似的 Xt:当目标关键字不存在时仅计算到该关键字的前一个元素还是后一个元素?

谢谢各位了(比心

1163 次点击
所在节点    程序员
2 条回复
wssy
2020-02-25 17:46:56 +08:00
markdown 语法太恶心了,那个表格我真的尽力了 ( 相信我
顺便求一个自动生成符合 Markdown 语法的文档
wssy
2020-02-25 17:48:19 +08:00
@wssy 更正为:顺便求一个自动生成符合 Markdown 语法文档的工具

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/647470

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX