算法

希尔排序算法实例详解

1.复杂度与稳定性算法时间复杂度最坏情况:O(n^2)最好情况:O(n)平均情况:O(n^2)稳定性:不稳定排序2.过程介绍希尔排序,又名递减增量排序算法,是一种非稳定的更高效的插入排序,在对几乎已经排好序的数据操作时,效率极高,即可以达到线性排序的效率,

DAG上的DP实例讲解

DAG是学习动态规划的基础,(DAG:有向无环图。)很多问题都可以直接转化为DAG上的最长路、最短路或路径计数问题。两个经典的DAG模型,嵌套矩形和硬币问题。一、嵌套矩形(1)第一个DAG模型:矩形嵌套问题描述:有n个矩形,每个矩形可以用a,b来描述,表示长和宽。

倍增算法实例讲解

本篇将简要介绍倍增法。倍增法(英语:binarylifting),顾名思义就是翻倍。它能够使线性的处理转化为对数级的处理,大大地优化时间复杂度。这个方法在很多算法中均有应用,其中最常用的是RMQ问题和求LCA(最近公共祖先)。一、什么是倍增?倍增,字面意思就是“成倍增长”。

简述最小树形图

一、什么是最小树形图?就是指有向图上的最小生成树,英文是DirectedMinimumSpanningTree。常用的算法是朱刘算法(也称Edmonds算法),可以在O(nm)时间内解决最小树形图问题。(1)过程对于每个点,选择它入度最小的那条边如果没有环,

字典树(trie)/前缀树(Prefix Tree)实例讲解

对于字典树/前缀树可能大部分情况很难直观或者有接触的体验,尤其是对前缀这个玩意没啥概念,可能做题遇到前缀问题也是使用暴力匹配蒙混过关,如果字符串比较少使用哈希表等结构可能也能蒙混过关,但如果字符串比较长、相同前缀较多那么使用字典树可以大大减少内存的使用和效率。

哈夫曼树编码与查找算法(C语言实现)

1.哈夫曼树的查找算法查找算法根据构建哈夫曼树算法衍生而来,我们在构建二叉树时需要查找出哪些数据最小,以符合我们哈夫曼树的最优解情况。查找权重值最小的两个结点的思想是:从待处理数据的头部位置开始,首先找到两个无父结点的结点(说明还未使用其构建成树),

什么是数学?

一、什么是数学?数学是研究数量、结构、变化以及空间模型等概念的一门科学。二、数学的特点数学区别于其他学科的明显特点有三个:1.抽象性,2.精确性,3.应用的极端广泛性。三、数学的三个传统领域:1.研究数的理论的代数学,2.研究形的理论的几何学,

参考及相关链接

参考目录:《大话数据结构》程杰著《数据结构与算法》小黑书,C语言版本《算法与数据结构》小黑书,JAVA版本互联网搜索引擎如百度和谷歌CSDNStack论坛在基本完成数据结构的学习,你应该可以做到:1.完全自由的写出链表,以及基本的操作方法和进阶,

回溯法经典例题分析

回溯法在我们解题步骤中经常被提到,这也是一种常用的方法,回溯法是一种经常被用在深度优先搜索(DFS)和广度优先搜索(BFS)的技巧。其本质是:走不通就回头。本篇将结合经典例题帮助大家对回溯法的理解。一、工作原理:(1)构造空间树;(2)进行遍历;(3)如遇到边界条件,

手指树的基本结构

一、简介手指树(FingerTree)是一种纯函数式数据结构,由RalfHinze和RossPaterson提出。二、为什么需要手指树?在函数式编程中,列表是十分常见的数据类型。对于基于序列的操作,包括在两端添加和删除元素(双端队列操作),在任意节点插入、连接、删除,