#算法的乐趣

分治算法思想介绍

一,介绍分治算法主要包含两个步骤:分、治。分,就是递归地将原问题分解成小问题;治则是:在解决了各个小问题之后(各个击破之后)合并小问题的解,从而得到整个问题的解 二,分治递归表达式分治算法一般都可以写出一个递归表达式;比如经典的归并排序的递归表达式:T(N)=2T(N/2)+O(N)T(N)代表整个原问题,采...
代码星球 ·2020-04-04

排序算法总结之希尔排序

一,希尔排序算法介绍①希尔排序又称缩小增量排序,它本质上是一个插入排序算法。为什么呢?因为,对于插入排序而言,插入排序是将当前待排序的元素与前面所有的元素比较,而希尔排序是将当前元素与前面增量位置上的元素进行比较,然后,再将该元素插入到合适位置。当一趟希尔排序完成后,处于增量位置上的元素是有序的。②希尔排序算法的效率依...
代码星球 ·2020-04-04

排序算法总结之快速排序

一,快速排序介绍快速排序与归并排序一样,也是基于分治的递归算法,体现在:在每一趟快速排序中,需要选出枢轴元素,然后将比枢轴元素大的数组元素放在枢轴元素的右边,比枢轴元素小的数组元素都放在枢轴元素的左边。然后,再对分别对枢轴元素左边和枢轴元素右边的元素进行快速排序。 二,快速排序算法分析 ①相比于直接...
代码星球 ·2020-04-04

排序算法总结之归并排序

一,归并排序介绍归并排序是一个典型的基于分治的递归算法。它不断地将原数组分成大小相等的两个子数组(可能相差1),最终当划分的子数组大小为1时(下面代码第17行left小于right不成立时),将划分的有序子数组合并成一个更大的有序数组。为什么是有序子数组???归并排序的递归公式:T(N)=2T(N/2)+O(N)从公式...
代码星球 ·2020-04-04

排序算法总结之堆排序

一,堆排序介绍堆是一个优先级队列,对于大顶堆而言,堆顶元素的权值最大。将待排序的数组建堆,然后不断地删除堆顶元素,就实现了排序。关于堆,参考:数据结构--堆的实现之深入分析下面的堆排序算法将数组中的元素从小到大排序,用大顶堆来实现。 二,堆排序算法分析 现给定了一维数组,需要将数组中的元素使用堆排序...
代码星球 ·2020-04-04

排序算法总结之插入排序

一,插入排序介绍 插入排序是基于比较的排序。所谓的基于比较,就是通过比较数组中的元素,看谁大谁小,根据结果来调整元素的位置。因此,对于这类排序,就有两种基本的操作:①比较操作;②交换操作其中,对于交换操作,可以优化成移动操作,即不直接进行两个元素的交换,还是用一个枢轴元素(tmp)将当前元素先保存起来,然后执...
代码星球 ·2020-04-04

各种排序算法的总结

都是基于内存的排序算法,包括插入排序、希尔排序、冒泡排序、快速排序、简单选择排序、堆排序、归并排序14年在网易Blog上写的,现把它放到这里。  一,直接插入排序    总体思路:位于表中后面的元素依次与表中前面的元素比较,若比之小,则还需继续和更前面的元素比...
代码星球 ·2020-04-04

并查集与贪心算法的应用之求解无向图的最小生成树

一,介绍本文介绍使用Kruskal算法求解无向图的最小生成树。Kruskal是一个贪心算法,并且使用了并查集这种数据结构。关于并查集的介绍,参考:数据结构--并查集的原理及实现 二,构造一个无向图图,肯定有顶点和边。由于求解最小生成树,故边还需要有权值。此外,对于每一条边,需要找到与它相关联的两个顶点,因为在...

最短路径算法-Dijkstra算法的应用之单词转换(词梯问题)

一,问题描述在英文单词表中,有一些单词非常相似,它们可以通过只变换一个字符而得到另一个单词。比如:hive-->five;wine-->line;line-->nine;nine-->mine.....那么,就存在这样一个问题:给定一个单词作为起始单词(相当于图的源点),给定另一个单词作为终点,...

无向图的最短路径算法JAVA实现

一,问题描述给出一个无向图,指定无向图中某个顶点作为源点。求出图中所有顶点到源点的最短路径。无向图的最短路径其实是源点到该顶点的最少边的数目。本文假设图的信息保存在文件中,通过读取文件来构造图。文件内容的格式参考这篇文章第一部分。 二,算法实现思路无向图的最短路径实现相对于带权的有向图最短路径实现要简单得多。...

有向图的拓扑排序算法JAVA实现

一,问题描述给定一个有向图G=(V,E),将之进行拓扑排序,如果图有环,则提示异常。要想实现图的算法,如拓扑排序、最短路径……并运行看输出结果,首先就得构造一个图。由于构造图的方式有很多种,这里假设图的数据存储在一个文件中,每一行包含如下的信息:LinkID,SourceID,Destina...

二叉树的层序遍历算法实现

一,问题描述实现二叉树的层序遍历--从根开始,依次向下,对于每一层从左向右遍历。 二,算法分析层序遍历与先序、中序、后序遍历不同。层序遍历用到了队列,而先、中、后序需要用到栈。因此,先、中、后序遍历可以采用递归方式来实现,而层序遍历则没有递归方式。算法步骤:初始时,根结点入队列然后,while循环判断队列不空...

随机序列生成算法---生成前N个整数的一组随机序列

问题描述:给定输入N,生成从1开始的:1,2,3,4,......N一组随机序列,序列中的数不能重复出现。比如:N=5,合法的随机序列为{4,3,1,5,2}、{3,1,4,2,5}……非法的序列有{5,4,1,2,1}来源:《数据结构与算法分析-MAW著 第二章习题2.8》&nb...

二叉树的创建算法

1,导论什么是数据结构?Adatastructureisanaggregationofdatacomponentsthattogetherconstituteameaningfulwhole。在计算机领域中,技术千变万化,但是基本的数据结构始终只有那几种。而抽象数据类型(ADT)就是用来描述数据结构具有的功能。比如,二...
代码星球 ·2020-04-04

一致性哈希算法学习及JAVA代码实现分析

1,对于待存储的海量数据,如何将它们分配到各个机器中去?---数据分片与路由当数据量很大时,通过改善单机硬件资源的纵向扩充方式来存储数据变得越来越不适用,而通过增加机器数目来获得水平横向扩展的方式则越来越流行。因此,就有个问题,如何将这些海量的数据分配到各个机器中?数据分布到各个机器存储之后,又如何进行查找?这里主要记...
首页上一页...101102103104105...下一页尾页