zoukankan      html  css  js  c++  java
  • How to choose the right data structure in different scenarios to bring out best performance?

    A. HashTable, Dictionary<TKey, TValue>, SortedDictionary<TKey, TValue>, SortedList<TKey, TValue>

    0. HashTable, Dictionary<TKey, TValue>, 基于哈希表。SortedDictionary<TKey, TValue>基于二叉搜索树,SortedList<TKey, TValue>基于二分法查找。

    1. 首先,HashTable, Dictionary<TKey, TValue>查询数据都比后两种数据结构快,时间复杂度为O(1);对于插入数据,也比后两种快,因为后面的两种数据结构需要sort嘛。
    2. 查询集合中的数据,SortedDictionary<TKey, TValue>, SortedList<TKey, TValue>二者的时间复杂度均为O(logn)
    3. 对于未排序的数据,插入数据SortedDictionary<TKey, TValue>比SortedList<TKey, TValue>要快。
    4. 对于已经排好序的数据,由于SortedList是基于二分法查找,所以插入数据SortedList<TKey, TValue>比SortedDictionary<TKey, TValue>快一些。


    Skip List

    A skip list is a data structure for storing a sorted list of items, using a hierarchy of linked lists that connect increasingly sparse subsequences of the items.



    几种排序算法效率的比较

    1.稳定性比较

    插入排序、冒泡排序、二叉树排序、二路归并排序及其他线形排序是稳定的

    选择排序、希尔排序、快速排序、堆排序是不稳定的

    2.时间复杂性比较

    插入排序、冒泡排序、选择排序的时间复杂性为O(n2)

    其它非线形排序的时间复杂性为O(nlog2n)

    线形排序的时间复杂性为O(n);

    3.辅助空间的比较

    线形排序、二路归并排序的辅助空间为O(n),其它排序的辅助空间为O(1);

    4.其它比较

    插入、冒泡排序的速度较慢,但参加排序的序列局部或整体有序时,这种排序能达到较快的速度。

    反而在这种情况下,快速排序反而慢了。

    当n较小时,对稳定性不作要求时宜用选择排序,对稳定性有要求时宜用插入或冒泡排序。

    若待排序的记录的关键字在一个明显有限范围内时,且空间允许是用桶排序。

    当n较大时,关键字元素比较随机,对稳定性没要求宜用快速排序。

    当n较大时,关键字元素可能出现本身是有序的,对稳定性有要求时,空间允许的情况下。

    宜用归并排序。

    当n较大时,关键字元素可能出现本身是有序的,对稳定性没有要求时宜用堆排序。



  • 相关阅读:
    机器学习(深度学习)
    机器学习(六)
    机器学习一-三
    Leetcode 90. 子集 II dfs
    Leetcode 83. 删除排序链表中的重复元素 链表操作
    《算法竞赛进阶指南》 第二章 Acwing 139. 回文子串的最大长度
    LeetCode 80. 删除有序数组中的重复项 II 双指针
    LeetCode 86 分割链表
    《算法竞赛进阶指南》 第二章 Acwing 138. 兔子与兔子 哈希
    《算法竞赛进阶指南》 第二章 Acwing 137. 雪花雪花雪花 哈希
  • 原文地址:https://www.cnblogs.com/silva/p/1454289.html
Copyright © 2011-2022 走看看