希尔排序,时间复杂度在O(n)~O(n^2)之间,也可以认为是O(n^3/2),相对于插入排序的改进,比较和偏移量更少,从而每次传递都会产生更“整洁”的子列表。 12行,其中5行用于增加,7行用于插入。 # 源码: https://gith...
归并排序,时间复杂度为O(nlogn)。 20 行。 # 源码: https://github.com/SpikeKing/data_structure_with_python def merge_sort(alist): """...
快速排序,时间复杂度O(nlogn)。不需要 14 行额外空间,需要 7 行额外空间。 # 源码: https://github.com/SpikeKing/data_structure_with_python def quick_sort...
Python算法回顾:二叉树深度&&宽度第一遍数据类型数据结构用于使用树结构来模拟数据收集。它是由n(n>0)个有界节点组成的层次关系的集合。 树属性每个节点有零个或多个子节点; 没有头节点的节点称为根节点。 每个非根...
要学习统计,首先了解概率问题很重要。概率涉及很多公式和理论,很容易被忽视,但它在工作和日常生活中发挥着重要作用。在讨论描述性统计中的一些基本概念之前,我们现在将探讨统计与概率之间的关系。 要求:与之前的博客类似,本文不要求读者具备统计知识,...
无监督学习是一种用于查找数据模式的机器学习技术。提供给无监督算法的数据是未标记的,这意味着仅给出输入变量(X),而没有相应的输出变量。在无监督学习过程中,算法自行发现数据中有趣的结构。 人工智能研究总监颜乐存解释说,无监督学习——教会机...
基数树 基数树,即基数树,也称为压缩前缀树,是一种提供存储键和查找的数据结构。与Trie不同的是,它对Trie树进行空间优化,只有一个子节点的中心节点会被压缩。而且,Radix树的插入、查询、删除操作的时间复杂度都是O(k)。 基数树特征...
Floyd算法Floyd是经典的多源最短路径算法,利用动态规划的思想来寻找多源点之间的最短路径。在具体的体重表中。该算法的时间复杂度为O(n3)。之所以叫Floyd,是因为该算法的创始人之一是1978年图灵奖获得者、斯坦福大学计算机教授学院...
二叉树的遍历是指从根节点开始,按照一定的顺序依次访问二叉树中的所有节点,使得每个节点被访问一次且仅访问一次。 二叉树遍历中比较常用的遍历方式有三种:前序遍历、中序遍历、后序遍历。接下来我会尝试用三组动画向读者详细介绍这三种遍历方式的逻辑思想...
解决常见的链表搜索问题。首先,分析问题的瓶颈。对于搜索来说,自然是从头到尾按顺序搜索。那么如何才能更快的找到目标元素呢?对链表中的元素进行排序可以加快搜索过程,但仍然需要顺序搜索。因此,对于链表来说,最好允许跳过某些节点以避免顺序处理。基于...