数据结构和算法
文章平均质量分 83
梳理常见数据结构和算法
夜雨风云
求实求真
展开
-
算法入门介绍
简单介绍下什么是算法,为什么要研究算法、如果研究算法。原创 2021-10-30 00:16:52 · 1879 阅读 · 0 评论 -
平衡二叉树
在关键字排列随机的情况下,二叉排序树的平均查找长度和log n是等数量级的。在某些情况下,尚需在构成二叉排序树的过程中进行“平衡化”处理,使其成为平衡二叉树。原创 2024-03-10 22:19:17 · 983 阅读 · 0 评论 -
二叉排序树
二叉排序树(Binary Sort Tre)或者是一棵空树,或者是具有如下性质的二叉树:(1) 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;(2) 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;(3) 它的左右子树也分别为二叉排序树。简单来说,二叉排序树是指根结点大于左子树,小于右子树的二叉树。根据使用目的,二叉排序树也常被称为二叉查找树二叉搜索树。原创 2023-10-27 15:00:37 · 176 阅读 · 0 评论 -
图的遍历概述
梳理下图这种数据结构的遍历实现。原创 2023-10-23 15:20:16 · 120 阅读 · 0 评论 -
堆排序(Heap Sort)
堆排序是利用堆这种数据结构进行的排序,这里将以java语言为例,介绍下堆排序的设计与实现。原创 2022-04-10 16:31:23 · 854 阅读 · 0 评论 -
堆(Heap)数据结构
在阅读本文前,需要明确的是,这里的“堆”是一种数据结构,而不是JVM里的垃圾回收里的堆存储结构。堆可看成一种特殊的树,这里以二叉堆为例介绍堆。原创 2022-04-09 13:12:48 · 1982 阅读 · 0 评论 -
动态规划实战篇--斐波那契数列
斐波那契数列是最经典的动态规划算法应用实例之一。接下来,将从斐波那契数列入手,学习下基于动态规划求解问题。原创 2022-02-20 15:29:24 · 1710 阅读 · 0 评论 -
NP完全性
简单梳理下NP完全性原创 2022-02-04 20:42:16 · 1944 阅读 · 0 评论 -
贪心算法(Greedy Algorithm)理论篇
贪心算法并不保证得到最优解,但很多问题确实可以求得最优解。贪心算法通常是自顶向下的设计:做出一个选择,然后求解剩下的那个子问题,而不是自底向上地求解出很多子问题,然后再做出选择。原创 2022-02-04 20:33:12 · 1495 阅读 · 0 评论 -
动态规划(Dynamic Programming)理论篇
动态规划是一种算法设计技术。作为一种使多阶段决策过程最优的通用方法,动态规划是在20世纪50年代由美国数学家理查德-贝尔曼(Richard Bellman)发明的。注意,技术名称“programming”是计划和规划的意思,而不是通常意义上的编程。原创 2021-12-19 16:09:27 · 852 阅读 · 0 评论 -
二叉树(Binary Tree)
二叉树是研究树型结构的基本类型。任意一棵树均可转换为二叉树(左孩子右兄弟)。因为森林是由树组成,所以也可使用二叉树表示森林(多个二叉树表示)。原创 2021-12-12 23:54:56 · 3363 阅读 · 0 评论 -
树和森林(Tree and Forest)
树型结构是一种重要的非线性数据结构。树型结构在客观世界广泛存在,如组织关系可用树来表示。树在计算机领域也有广泛应用,如在编译程序时,可用树来表示源程序的语法结构(语法树)。又如在数据库系统中,使用树型结构存储索引等信息。森林则是零到多棵树的集合。对森林的研究,都是转化为对树的研究。原创 2021-12-11 22:40:22 · 3323 阅读 · 2 评论 -
快速排序(Quick Sort)
快速排序是对冒泡排序的一种改进,由 C.A.R.Hoare(Charles Antony Richard Hoare,东尼·霍尔)在1962年提出。快速排序是相同数量级的排序算法中,平均性能最好的算法,是内部排序实现的优选算法。原创 2021-12-11 16:17:34 · 4446 阅读 · 0 评论 -
归并排序(Merge Sort)
"归并"的含义是将两个或两个以上的有序列表组合成一个新的有序列表。归并排序也称合并排序,注意这里指的归并排序默认指二路归并排序。原创 2021-12-05 21:05:49 · 1517 阅读 · 0 评论 -
分治法( Divide and Conquer)
分治法也称为分解法、分治策略等。本文梳理下梳理下分治法。原创 2021-12-05 17:11:51 · 16952 阅读 · 0 评论 -
广度优先遍历(Breadth First Search)
广度优先遍历,也称广度优先查找、广度优先搜索等。原创 2021-11-30 23:50:13 · 1319 阅读 · 0 评论 -
深度优先遍历(Depth First Search)
深度优先遍历,也称深度优先查找、深度优先搜索等。原创 2021-11-30 23:48:01 · 3265 阅读 · 0 评论 -
蛮力法(Brute Force)
蛮力法(brute force)是一种简单直接地解决问题的方法(暴力求解),常常直接基于问题的描述和所涉及的概念定义。原创 2021-11-28 18:00:27 · 15862 阅读 · 0 评论 -
顺序查找(Sequential Search)
顺序查找,也称穷举查找,是一种基本的查找算法。本文仅介绍静态列表的查找。原创 2021-11-27 00:07:40 · 3439 阅读 · 0 评论 -
冒泡排序(Bubble Sort)
冒泡排序是一种基础的交换排序。之所以叫做冒泡排序,因为每一个元素都可以像小气泡一样,向数组的一侧移动。原创 2021-11-26 22:28:55 · 5210 阅读 · 0 评论 -
选择排序(Selection Sort)
选择排序是一个基本的排序算法,其时间复杂度是$O(n^2)$,其排序时,元素交换次数最差为$n-1$次。原创 2021-11-21 22:41:26 · 1420 阅读 · 1 评论 -
非递归算法和递归算法的效率分析
梳理非递归算法和递归算法的效率分析\原创 2021-11-14 16:30:36 · 2731 阅读 · 0 评论 -
算法效率分析
梳理算法效率分析的通用框架原创 2021-11-07 22:01:37 · 6455 阅读 · 0 评论 -
快速排序(C#)实现
在众多的排序算法中,快速排序由于有较好的性能(时间复杂度O(NlogN),优于常见的排序算法),且算法编码难度较小,常在工程实践和招聘中使用或考察。这里手撸并上传了一个快速排序算法的C#实现。主要参考了Wiki 百科的“快速排序”,以及严蔚敏老师《数据结构》一书对快速排序的讲解。源码如下:static void Main(string[] args){ int[] numb...原创 2018-12-02 22:25:24 · 4141 阅读 · 0 评论 -
单链表反转--Java实现
单链表的反转是一个在面试中比较常见的问题。由于其实现相对简单,甚至有些现场面的面试官要求手写单链表反转的代码。这里使用一个实例来简单的介绍单链表的反转的实现原创 2016-09-29 21:55:50 · 932 阅读 · 0 评论 -
二叉树的创建及遍历--java实现
使用java语言实现对二叉树的创建及遍历(先序遍历、层次遍历等)原创 2016-10-11 19:36:18 · 616 阅读 · 0 评论