zoukankan      html  css  js  c++  java
  • 【Weiss】【第03章】练习3.16:删除相同元素

    【练习3.16】

    假设我们有一个基于数组的表A[0,1...N-1],并且我们想删除所有相同的元素。

    LastPosition初始值为N-1,但应该随着相同元素被删除而变得越来越小。

    考虑图3-61中的伪代码程序段。过程Delete删除位置j上的元素并使表破坏。

    a.解释该过程是如何工作的

    b.利用一般的表操作重写这个过程

    c.如果用标准的数组实现,则这个过程的运行时间是多少?

    d.使用链表实现的时间是多少?

    e.给出一个算法以O(NlogN)时间解决问题

    f.证明:如果只使用比较,那么解决该问题的任何算法都需要Ω(NlogN)次比较

    g.证明:如果我们允许除比较之外的其它操作,并且这些关键字都是实数,那么我们可以不用元素间的比较就可以解决问题。

    Answer:

    a:需要解释吗?

    b:直接写了Delete(P),超级简单。

    1 void Delete(int j, int *pLastPosition)
    2 {
    3     for (int index = j; index != *pLastPosition; ++index)
    4         A[index] = A[index + 1];
    5     --*pLastPosition;
    6 }

    c:三层循环,总计O(N3)

    d:前后指针两层循环,省去删除元素时需依次移动的一层循环,总计O(N2)

    e:先将元素排序,需O(nNogN);全部加入链表,需O(N);因链表有序,前后指针一次遍历进删除,需O(N)。总计O(NlogN)。

    f:第七章有讲,这里没必要证了。

    g:采用桶排序或者哈希表等方法检验元素是否相等,以O(N)

  • 相关阅读:
    autorelease的对象何时被释放
    如何处理webView跳转
    根据Url 获取图片尺寸 iOS
    iOS开发证书"此证书的签发者无效"解决方法
    IOS, xib和storyboard的混用
    友盟社交分享中的那些坑
    iOS手势(滑动)返回的实现(自定义返回按钮)
    关于tableview下拉刷新崩溃的问题
    dispatch_async 和dispatch_sync
    ios调用系统界面显示英文
  • 原文地址:https://www.cnblogs.com/catnip/p/4351494.html
Copyright © 2011-2022 走看看