最近在牛客上整理常用的一些算法思路,【常用算法思路分析系列】主要是针对一些高频算法笔试、面试题目的解题思路进行总结,大部分也给出了具体的代码实现,本篇文章是对排序相关题目的思路分析。(1)对一个基本有序的有序的数组排序,选择哪种排序算法?(2)判断数组中是否有重复值,要求空间复杂度为O(1);(3)把两个有序数组合并成一个数组,第一个数组空间正好可以容纳两个数组的元素;(4)荷兰国旗问题;(5)有序矩阵(二维数组)查找;(6)最短排序子数组:对于一个数组,请设计一个高效算法计算需要排序的最短子数组的长度;(...
分类:
编程语言 时间:
2016-05-16 09:31:32
阅读次数:
365
基于最近邻的算法,在各种情况下经常使用,但是当N特别大的时候,效率不是很高,比如当N=10^5,时已经不太好算了
暴力法:O(N^2)
KDT: O(N*sqrt(N)
局部敏感哈希(LSH):跟桶大小有关...
分类:
编程语言 时间:
2016-05-12 20:11:49
阅读次数:
636
KMP是用于字符匹配的一个常用算法。next数组里面存放的是要查找的字符串前i个字符串的所有前缀、后缀相等的公共串中,最大的长度值。比如需要查找的一个子串ababcd,next[0]表示子串中前1个字符串即a的前缀和后缀中相等字符串的最大长度,因为a的前缀和后缀没有,故next[0] = 0;对于next[2],即先求出子串aba的前缀和后缀出来,前缀为a,ab,后缀有ba,a,相等的公共串为a,长度为1,因此next[2] = 1;依次可以求出。...
分类:
其他好文 时间:
2016-05-12 11:21:36
阅读次数:
186
前段时间因为项目需要,做了个用来对数组排序的类,顺便把以前学过的几种排序算法用C#实现一下。用C#的一些机制来诠释了一下算法的是实现。在阅读本之前,需要一些对C#的有些基本的了解,了解方法参数中out ,ref的作用,掌握面向对象的一些基本思想。 1. 插入排序 1.1. 基本思想: 每次将一个待排 ...
分类:
编程语言 时间:
2016-05-07 06:30:12
阅读次数:
312
以下内容主要来自大话数据结构之中,部分内容参考互联网中其他前辈的博客。 图的定义 图是由顶点的有穷非空集合和顶点之间边的集合组成,通过表示为G(V,E),其中,G标示一个图,V是图G中顶点的集合,E是图G中边的集合。 无边图:若顶点Vi到Vj之间的边没有方向,则称这条边为无项边(Edge),用序偶对 ...
分类:
编程语言 时间:
2016-04-30 23:37:03
阅读次数:
5008
排序算法:一种能将一串数据依照特定的排序方式进行排列的一种算法。
排序算法性能:取决于时间和空间复杂度,其次还得考虑稳定性,及其适应的场景。
稳定性:让原本有相等键值的记录维持相对次序。也就是若一个排序算法是稳定的,当有俩个相等键值的记录R和S,且原本的序列中R在S前,那么排序后的列表中R应该也在S之前。 以下来总结常用的排序算法,加深对排序的理解。排序算法目录
冒泡排序
插入排序
希尔排序...
分类:
编程语言 时间:
2016-04-29 19:53:05
阅读次数:
192
考试要求: (1)掌握数据及其转换、数据的机内表示、算术和逻辑运算,以及相关的应用数学基础知识; (2)理解计算机的组成以及各主要部件的性能指标; (3)掌握操作系统、程序设计语言的基础知识; (4)熟练掌握计算机常用办公软件的基本操作方法; (5)熟练掌握基本数据结构和常用算法; (6)熟练掌握C ...
分类:
其他好文 时间:
2016-04-28 21:17:32
阅读次数:
256
排序算法:一种能将一串数据依照特定的排序方式进行排列的一种算法。
排序算法性能:取决于时间和空间复杂度,其次还得考虑稳定性,及其适应的场景。
稳定性:让原本有相等键值的记录维持相对次序。也就是若一个排序算法是稳定的,当有俩个相等键值的记录R和S,且原本的序列中R在S前,那么排序后的列表中R应该也在S之前。 以下来总结常用的排序算法,加深对排序的理解。排序算法目录
冒泡排序
插入排序
希尔排序...
分类:
编程语言 时间:
2016-04-26 21:50:19
阅读次数:
215
什么是机器学习? 很多接触过机器学习领域的人,或多或少知道点机器学习的常用算法,但是对于机器学习的认识却并不清晰。今天查找相关资料,总结得出机器学习的相关概念。 机器学习(machine learning, 简称ML):对于某给定的任务T,在合理的性能度量方案P的前提下,某计算机程序可以自主学习任务 ...
分类:
其他好文 时间:
2016-04-22 01:08:09
阅读次数:
146
什么是动态规划动态规划是应该不能叫 一种算法,而应该叫 一类算法 或者 说是 一种思想。它和 二分查找 这种算法是不同的,二分查找我们可以用代码表示出来,并且解决所有问题的思路几乎都是一样的。而动态规划其实无法用代码表示出来,每一种问题的解决方法可能用代码写出来都不一样,所以只看动态规划的定义是很难理解的,需要拿多个题目联系才能真正理解。动态规划的特点就是把一个大的问题分解为若干个小问题,并且这些小...
分类:
编程语言 时间:
2016-04-17 22:55:03
阅读次数:
206