在前面介绍的排序算法中,最快的排序算法为归并排序,但是归并排序有一个缺陷就是排序过程中需要O(N)的额外空间。本文介绍的快速排序算法时一种原地排序算法,所需的额外空间复杂度为O(1)。
算法介绍:快速排序其实一种根据需找某个元素的具体位置进行排序的方法。比如所存在如下数组
选择第一个元素5,找到5最终的位置,即5的左边的数都小于或者等于5,右边的数都大于或者等于5.
从"6"开...
分类:
编程语言 时间:
2014-11-16 23:09:45
阅读次数:
370
kNN算法算法优缺点:优点:精度高、对异常值不敏感、无输入数据假定缺点:时间复杂度和空间复杂度都很高适用数据范围:数值型和标称型算法的思路:KNN算法(全称K最近邻算法),算法的思想很简单,简单的说就是物以类聚,也就是说我们从一堆已知的训练集中找出k个与目标最靠近的,然后看他们中最多的分类是哪个,就...
分类:
编程语言 时间:
2014-11-14 21:00:57
阅读次数:
321
题目意思:
给出一个矩阵。求出和最大的子矩阵,在解决这个问题的之前,首先看一下这个问题的一维问题,给出一个序列求最大子序列。满足ij的和。
题目分析:
对于一维问题,有很多的解决方法,当然也对应不同的时间和空间复杂度。有暴力,优化暴力,贪心,动态规划等解法,由于这里此题的二维问题要用到动态规划,这里只给出动态规划算法。对于二维问题只需要转化为一维的问题,在用动态规划方法解决问题。
一维动归...
分类:
其他好文 时间:
2014-11-09 12:39:35
阅读次数:
153
题目要求: 如何对n个数进行排序,要求时间复杂度O(N).空间复杂度为O(1).题目分析: 严格的说,这道题给出的条件不全。如果这n个数字的大小跨度很大(1~无穷大),则肯定达不到要求。 如果n个数字的大小在一定范围内(如0~65535),则可以用hash表的方法。定义为int hash[65...
分类:
编程语言 时间:
2014-11-08 23:33:03
阅读次数:
215
上次说到冒泡排序一共可以产生4种方式来产生,因为两个for循环皆可从小到大,也可从大到小分类 排序算法数据结构 vector、数组最差时间复杂度 O(n^2)最优时间复杂度 O(n)平均时间复杂度 O(n^2)最差空间复杂度 总共O(n),需要辅助空间O(1)//用于交换所需临时变量冒...
分类:
编程语言 时间:
2014-11-08 22:03:31
阅读次数:
278
看书、思考、写代码!
/***************************************
* copyright@hustyangju
* blog: http://blog.csdn.net/hustyangju
* 题目:分治法求数组最大连续子序列和
* 思路:分解成子问题+合并答案
* 时间复杂度:O(n lgn)
* 空间复杂度:O(1)
********...
分类:
编程语言 时间:
2014-11-05 23:17:53
阅读次数:
209
Given two binary strings, return their sum (also a binary string).For example,a ="11"b ="1"Return"100"思路:时间复杂度O(n), 空间复杂度O(1) 1 class Solution { 2 pub...
分类:
其他好文 时间:
2014-11-04 22:35:25
阅读次数:
246
题目:一个整形数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度为O(n),空间复杂度为O(1)。思路:题目要求非常严格,O(n)的时间复杂度,O(1)的空间复杂度。难度不小。参照书上给出的思路,实现了一遍,主要也是弥补位运算方面经验的欠缺。下面是我的...
分类:
编程语言 时间:
2014-11-04 14:39:02
阅读次数:
172
http://www.hankcs.com/program/java/%E5%8F%8C%E6%95%B0%E7%BB%84trie%E6%A0%91doublearraytriejava%E5%AE%9E%E7%8E%B0.html双数组Trie树(DoubleArrayTrie)是一种空间复杂度...
分类:
编程语言 时间:
2014-11-04 11:00:29
阅读次数:
308