数据结构与算法
Asher@福
这个作者很懒,什么都没留下…
展开
-
复杂度分析
复杂度分析是整个算法学习的精髓,因此是我们必须要掌握的。大O表示法提到复杂度分析,这里我们不得不介绍大O表示法。 int cal(int n) { int sum = 0; int i = 1; for (; i <= n; ++i) { sum = sum + i; } return sum; }由上面的例子不难看出一个规律:所...原创 2020-02-17 21:51:22 · 286 阅读 · 0 评论 -
数据结构——Trie树(前缀树)
一、什么是Trie树(前缀树) 前缀树是N叉树的一种特殊形式。通常来说,一个前缀树是用来存储字符串的。前缀树的每一个节点代表一个字符串(前缀)。每一个节点会有多个子节点,通往不同子节点的路径上有着不同的字符。子节点代表的字符串是由节点本身的原始字符串,以及通往该子节点路径上所有的字符组成的。前缀树有着广泛的应用,例如自动补全,拼写检查等等下面是前缀树的一个例子:二...原创 2019-11-08 12:25:42 · 543 阅读 · 0 评论 -
数据结构与算法——二叉树(下)
上一篇文章,我们主要介绍了树和二叉树的基本概念,认识了两个比较常见的二叉树即满二叉树和完全二叉树,同时介绍二叉树遍历的三种方式。本文主要介绍另一种特殊的二叉树——二叉查找树。该二叉树的最大特点就是,支持动态数据集合的快速插入、删除、查找操作。1、二叉查找树二叉查找树是二叉树中最常用的一种类型,也叫二叉搜索树。顾名思义,二叉查找树是为了实现快速查找而生的。不过,它不仅仅支持查找一个数据,...原创 2019-06-05 23:08:18 · 101 阅读 · 0 评论 -
数据结构与算法——二叉树(上)
1、什么树首先我们要知道,树是一种非线性表结构。通过下面的图我们可以更加直观的了解到什么是树。通过上面的图我们可以发现,“树”这种数据结构和我们现实生活中的树很像。上图中的每一个元素我们称之为“节点”;用来连接相邻节点之间的关系,我们叫作“父子关系”。如下图所示,A节点就是B节点的父节点,B节点是A节点的子节点。B、C、D这三个节点的父节点是同一个节点,所以它们之间互称为兄弟节点。...原创 2019-06-05 21:44:23 · 185 阅读 · 0 评论 -
数据结构与算法——跳表的实现
关于跳表的详细介绍请看数据结构与算法——跳表。本文主要介绍跳表的一种实现方式。头文件如下:/** Copyright: (c) 2019** 文件名称: SkipList.h * 文件标识:* 摘 要: 跳表的一种模板实现方法,跳表中存储的是模板类型,并且存储的是不重复的** 版 本: 1.0* 作 者: RF_LYF* 创建日期: 2019/5/14 8:5...原创 2019-05-15 23:05:12 · 498 阅读 · 0 评论 -
数据结构与算法——散列表的实现
1、数组的方式实现散列表1.1头文件#ifndef _HASHTABLE_H#define _HASHTABLE_Henum StateType {Empty, Deleted, Active};struct HashItem{ int data; StateType info; HashItem() { info = Empty; } HashItem(int...原创 2019-05-20 22:45:16 · 780 阅读 · 0 评论 -
数据结构与算法——散列表
散列思想:散列表用的是数组支持按照下标随机访问数据的特性,所以散列表其实就是数组的一种扩展,由数组演化而来。可以说,如果没有数组,就没有散列表。散列函数:顾名思义,它是一个函数。我们可以把它定义成hash(key),其中key表示元素的键值,而hash(key)的值表示经过散列函数计算得到的散列值。散列函数设计的基本要求:(1)散列函数计算得到的散列值是一个非负整数;(2)如果key...原创 2019-05-18 22:58:05 · 1147 阅读 · 0 评论 -
数据结构与算法——跳表
基本概念二分查找利用静态数组随机访问的特性,可以实现在有序的数组中快速找到某个值,但是因为静态数组需要申请连续的内存空间,所以当数据规模比较大时,在内存中可能无法申请到所需的连续空间。因此,基于这一特性,我们考虑能否将二分查找应用于链表结构,这样就避免连续空间的限制,但是对于链表结构,怎样提高它的查找效率是解决该问题的关键。通过给链表建立多级索引的方式来对其进行改造,再与二分查找相结合就可以大...原创 2019-04-28 21:47:43 · 349 阅读 · 0 评论 -
数据结构与算法——递归
参考链接:https://time.geekbang.org/column/article/41440基本概念函数的求解通过不断的直接或者间接的调用自身,最终获得结果。递归需要满足的条件1、一个问题的解可以拆分为几个子问题的解2、这个问题与分解之后的子问题,除了数据规模上的差异,求解思路完全一样3、存在递归终止条件如何编写递归代码写递归代码的关键在于找到将大问题分解...原创 2019-04-23 22:29:29 · 118 阅读 · 0 评论 -
走台阶问题(递归方法+动态规划)
参考链接:https://time.geekbang.org/column/article/41440基本的走台阶问题问题描述:假设有n个台阶,每跨一步只能上1阶或者2阶台阶。求总共有多少种走法思路1:假设n阶台阶有f(n)种走法,可以通过递归的方式进行求解。因为一步可以上1阶或者2阶台阶,那如果先上1个台阶则只需求出剩下的n-1个台阶的走法,如果先上2个台阶则只需求出剩下的n-2个台...原创 2019-04-23 22:02:49 · 12198 阅读 · 2 评论 -
数据结构与算法——二分查找
参考链接:https://time.geekbang.org/column/article/42520无处不在的二分思想:和大家玩一个猜数字游戏,我随机写一个0-99的数字,让你来猜,猜的过程中,我会告诉你猜的数是大了还是小了,直到猜中为止。假设我写的是23,那个整个过程就如下图所示:概念总结:二分查找针对是一个有序的数组集合,查找思想有点类似于分治思想。每次通过跟区间的中间元...原创 2019-04-23 00:30:00 · 323 阅读 · 0 评论 -
二分查找的应用——求一个数的平方根
问题描述:给定任意一个正数,要求我们求出它的平方根,最终所求结果要求精度达到1E-6本题可以用二分查找的方法进行求解。思路如下(1)首先要判断输入的正数n是否大于1,因为如果n < 1,则其平方根 的范围是(n,1)(2)如果输入的正数n是一个大于等于1的数,则其平方根的范围是[1,n)基于以上分析,代码实现如下:/** Copyright: (c) 2019**...原创 2019-04-22 23:43:59 · 1095 阅读 · 0 评论 -
栈的简单应用POJ1028——网页导航
题目来源:http://poj.org/problem?id=1028题目简介:本题要求模拟浏览器的浏览、前进和后退的功能,首先给定两个栈分别为forward和back(1)浏览时:如果forward栈中有元素则清空,并将输入的URL压入back栈,同时显示back栈顶元素的URL(2)后退时:将back栈顶的元素压入forward栈中,并将back栈顶的元素弹出(3)前进时:将f...原创 2019-04-03 21:29:05 · 447 阅读 · 0 评论 -
数据结构——队列(顺序、链式、循环)
队列是一种操作受限的线性表数据结构。对于它的操作需要遵守的规则是“先进者先出,后进者后出”,就像我们排队买票一样,排在队伍前边的先买到票先离开,排在队伍后边后买到票后离开,因此队列只支持两种操作,即入队和出队,其中入队是从队列的尾部插入新的元素,而出队则是在队列的头部弹出元素。由于该数据结构的特性,使其在实际中有很多的应用,比如消息队列、阻塞队列、并发队列等。本文根据队列的基本特性实现了三种...原创 2019-04-04 23:41:48 · 200 阅读 · 0 评论