算法与数据结构之美
文章平均质量分 75
丶legend
这个作者很懒,什么都没留下…
展开
-
分治思想之排序算法
分而治之是设计高效算法的一个重要思想。本文主要总结一下分治思想在排序算法中的运用。排序在商业数据处理和现代科学计算中有着重要的地位,它能够应用于事物处理、组合优化、天体物理学、分子动力学、语言学、基因组学、天气预报和很多其它领域。——《算法》。发展至今,已经出现过很多的排序算法。如选择排序,插入排序,希尔排序,堆排序,归并排序,快速排序。这里主要总结下后面种,这种也是目前运用最广和最高效的(虽然在某原创 2017-10-02 23:19:29 · 6701 阅读 · 0 评论 -
图论 基础篇
一. 图的介绍说起图这个词,很多人可能首先会想到的就是图片,地图……等,但这里所说的图是一个抽象的概念。 定义:图是由一组顶点和一组能将两个顶点相连的边组成的。图论一直以来都是数学领域的一个重要分支,但在计算机科学领域的应用中,基于图论的由一系列结点和边的模型起到了非常重要的作用,图的算法能够解决实际生活中许多比较复杂的问题,例如我们的地图、电路、社会中人与人之间的关系网已级计算机网络等无法通原创 2017-10-20 19:53:13 · 618 阅读 · 1 评论 -
灵活&&高效的符号表--二叉查找树
一丶定义一颗二叉查找树是一颗二叉树,其中每个结点的键都大于其任左子树任意结点的键而小于右子树任意结点的键。如标题所述,它有着链表插入的灵活性和有序数组查找的高效性。二丶基本实现注:本文采用的是C++语言实现 但算法与数据结构是一种思想 与语言无关。1.查找查找的思路比较简单,需要查找的键存在当前树中就直接返回相应的值,如果查找的键小于根结点就在左子树中继续递归查找,大于就在右子树中查找,最后没查找到原创 2017-09-24 14:56:23 · 286 阅读 · 0 评论 -
二叉堆与优先队列
一、优先队列1.简单介绍优先队列是一种抽象的数据结构,它与我们生活中的许多场景息息相关。比如我们的电脑或者手机,很多时候我们后台会运行多个程序,当程序过多导致内存急剧减少时,如果没有相关权限的设置,处理器会优先关闭挂在后台比较久的,然后继续往后台加入程序。和基本的数据结构队列和栈类似,不过优先队列对元素的操作是有优先级的,和上面描述的一样,它的核心是删除最大元素和插入元素。2.基本实现优先队列的实现原创 2017-10-13 20:36:45 · 246 阅读 · 0 评论 -
图论 应用篇
上次写了篇图的基本构造方法,运用图这种强大的数据结构结构,还能解决实际应用中的许多问题,今天这篇就主要整理一些常见的应用一、路径问题路径问题在图的处理领域是非常重要的。如我们最常见的走迷宫,就是典型的寻路问题。这里主要运用深度优先和广度优先算法两种方式来进行路径寻找,这2种搜索算法在很多数据结构中都有重要的运用,之前写的一篇二叉查找树中的层序遍历就用到了广度优先算法,这里就详细的介绍一下。1.深度优原创 2017-11-04 17:32:50 · 9453 阅读 · 0 评论 -
随机模拟算法求解圆周率
圆周率(π)这个东西是从小学开始一直陪伴我们的,这里使用使用蒙特卡洛算法来产生大量的随机数求解π的近似值。计算方式首先我们知道 正方形的面积公式是S1 = a * a,圆形的面积S2 = π * r * r; 所以以圆的直径为正方形边长,可以得出π的表达式。π = 4 * S2 / S1 这样一来,重点就是求解正方形和圆形的面积,这里使用在一正方形区域内圆内产生相应的随机原创 2018-01-26 19:57:33 · 6036 阅读 · 0 评论 -
Java内存模型
一、前言之前写过一篇二分查找树的,前面也说过,普通的二叉查找树一般情况下增加、删除查找所用的时间复杂度是O(logN),但在最坏的情况下,可能会退化成一个链表,也就是每次插入节点时都比父节点大或者小,这时查找的时间复杂度就会变成O(N)级别的,这就达不到高效了,说白了就是稳定性不高,最近花了比较多的时间在树上面,所以今天就来总结一下平衡的查找树-AVL树,AVL树就是在增加、删除节点时对二叉树...原创 2018-06-25 01:19:21 · 353 阅读 · 0 评论 -
LRU与LFU缓存算法
一、背景缓存算法也是也是我们日常使用的操作系统、应用程序内部用得比较多的一种调度算法,之前也是了解个过程没具体实现过,刚好LintCode上面刷题看到这两个算法,所以写这篇博客来整理一下LRUCache算法和LFUCache算法的过程和实现。二、LRUCache算法1.简单介绍LRU(Least Recently Used)即最少最近使用算法,这个算法就是把每次都把最近访问...原创 2018-06-30 17:08:53 · 637 阅读 · 0 评论