zoukankan      html  css  js  c++  java
  • 有序向量

    向量ADT

     向量 ADT 操作实例

     回顾:无序向量 – 去重

    • 去重

    deduplicate()

    功能:删除重复元素 [ ,返回元素删除总数 ]

     

     有序向量 – 有序性及其甄别

    • 有序性及其甄别

     有序向量 – 唯一化

    • 低效算法

    • 低效算法复杂度

    • 高效算法

    • 高效算法复杂度

     向量唯一化总结

     有序向量 - 查找算法

    • 查找

    search ( e, lo, hi )

    在有序向量中查找只等于 e 的元素的位置

     

     如何处理特殊情况?

    比如,目标元素不存在;或者反过来,目标元素同时存在多个

    • 语义约定

    search 接口至少应该有利于有序向量自身的维护:

    V.insert ( 1 + V.search(e), e ) 即便查找失败,也应该给出新元素适当的插入位置 若允许重复元素,则每一组也需按其插入的次序排列

     

    在有序向量区间 V [ lo, hi ) 中,确定不大于 e 的最后一个元素

    当有多个命中元素时,必须返回 最靠后(秩最大)者

    失败时,应返回 小于 e 的最大者

    若 –∞ < e < V [ lo ], 则返回 lo – 1 ( 左侧哨兵 )

    若 V [ hi - 1 ] < e < +∞,则返回 hi – 1 ( 末元素 = 右侧哨兵左邻 )

    • 统一接口

    • 二分查找思想

     思考:

    这种方式是否满足我们定义的语义?

     正确性

    不变性:A[ 0, lo ) <= e < A[ hi, n )

    • Fibonacci 查找算法

    • 插值查找

     

     

     插值查找算法最坏情况实例

     

  • 相关阅读:
    狐狸和兔子
    Arguments to main
    strncpy
    atoi
    sscanf
    集体的智慧:为什么SaaS打败企业软件?
    终于来热风了,又一次感觉到什么叫温暖!
    博士生的毕设
    淡淡的
    endnote如何修改输出格式?
  • 原文地址:https://www.cnblogs.com/lijian-switch/p/13862833.html
Copyright © 2011-2022 走看看