随笔分类 -  algorithm

摘要:排序算法经过了很长时间的演变,产生了很多种不同的方法。对于初学者来说,对它们进行整理便于理解记忆显得很重要。每种算法都有它特定的使用场合,很难通用。因此,我们很有必要对所有常见的排序算法进行归纳。 我不喜欢死记硬背,我更偏向于弄清来龙去脉,理解性地记忆。比如下面这张图,我们将围绕这张图来思考几个问题。 上面的这张图来自一个PPT。它概括了数据结构中的所有常见的排序算法。现在有... 阅读全文
posted @ 2015-09-03 21:52 程序员修练之路 阅读(242) 评论(0) 推荐(0) 编辑
摘要:之前看了很多写红黑树的博客,但是感觉都讲的不太清楚!没说这样操作如何使他保持平衡的,于是疑惑重重,就看不下去了,一次不经意看到一个人说维基百科的红黑树讲的好,我就随便点了一下一看——这下疯了~,怎么讲的这么好!可以说是把一个复杂的问题,讲得简单化!这太幸福了! 于是我就慢慢学会了!强烈推荐维基的这个讲解,再也找不到比这还好的讲解了!不知道它上边其它的怎么样,反正这个很好!!既然学会了,走过来了,我... 阅读全文
posted @ 2015-09-01 22:09 程序员修练之路 阅读(547) 评论(0) 推荐(0) 编辑
摘要:摘要: 本章所讨论的问题是在一个由n个不同数值构成的集合中选择第i个顺序统计量问题。主要讲的内容是如何在线性时间内O(n)时间内在集合S中选择第i小的元素,最基本的是选择集合的最大值和最小值。一般情况下选择的元素是随机的,最大值和最小值是特殊情况,书中重点介绍了如何采用分治算法来实现选择第i小的元素,并借助中位数进行优化处理,保证最坏保证运行时间是线性的O(n)。 1、基本概念 顺序统计量:在... 阅读全文
posted @ 2015-07-25 20:49 程序员修练之路 阅读(474) 评论(0) 推荐(0) 编辑
摘要:1. 桶排序介绍 桶排序(Bucket sort)是一种基于计数的排序算法,工作的原理是将数据分到有限数量的桶子里,然后每个桶再分别排序(有可能再使用别的排序算法或是以递回方式继续使用桶排序进行排序)。当要被排序的数据内的数值是均匀分配的时候,桶排序时间复杂度为Θ(n)。桶排序不同于快速排序,并不是比较排序,不受到时间复杂度 O(nlogn) 下限的影响。 桶排序按下面4步进行: 1. 设置固定... 阅读全文
posted @ 2015-07-23 21:15 程序员修练之路 阅读(663) 评论(0) 推荐(0) 编辑
摘要:编程论到极致,核心非代码,即思想。 所以,真正的编程高手同时是思想独到及富有智慧(注意与聪明区别)的人。 每一个算法都是一种智慧的凝聚或萃取,值得我们学习从而提高自己,开拓思路,更重要的是转换思维角度。 其实,我们大多数人都活在“默认状态”下。没有发觉自己的独特可设置选项-----思想。 言归正传(呵呵!恢复默认状态),以下学习基数排序。 【1】基数排序 以前研究的各种排序算法,都是通过比较数据大... 阅读全文
posted @ 2015-07-20 20:57 程序员修练之路 阅读(883) 评论(0) 推荐(0) 编辑
摘要:计数排序的基本思想是:统计一个数序列中小于某个元素a的个数为n,则直接把该元素a放到第n+1个位置上。当然当过有几个元素相同时要做适当的调整,因为不能把所有的元素放到同一个位置上。计数排序假设输入的元素都是0到k之间的整数。// 8-2.计数排序.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include using namespace std; ... 阅读全文
posted @ 2015-07-16 23:13 程序员修练之路 阅读(261) 评论(0) 推荐(0) 编辑
摘要:这一节决策树其实是对前面的堆排序,快排等是最优的比较算法的证明, 首先说下《算法导论》上对决策树的定义:一棵决策树是一棵满二叉树(注意看下面解释),表示某排序算法作用于给定输入所做的所有比较,而控制结构,移动等都被忽略了。 注意:这里个人认为定义是错误的,决策树不是一棵满二叉树,连完全二叉树都不是。 首先看看只有三个元素时,决策树的图: 在决策树中,每个内结点都用i:j表示比较下标为i数组元素与... 阅读全文
posted @ 2015-07-16 21:17 程序员修练之路 阅读(374) 评论(0) 推荐(0) 编辑
摘要:题目描述 请编程实现矩阵乘法,并考虑当矩阵规模较大时的优化方法。思路分析 根据wikipedia上的介绍:两个矩阵的乘法仅当第一个矩阵B的列数和另一个矩阵A的行数相等时才能定义。如A是m×n矩阵和B是n×p矩阵,它们的乘积AB是一个m×p矩阵,它的一个元素其中 1 ≤ i ≤ m, 1 ≤ j ≤ ... 阅读全文
posted @ 2015-06-04 17:51 程序员修练之路 阅读(17576) 评论(2) 推荐(2) 编辑
摘要:这题的思想是书上的(《算法导论》),代码当然也是按照书上伪码写出的; 《算法导论》中引入这个问题是通过股票的购买与出售,经过问题转换,将前一天的当天的股票差价重新表示出来,即转为了一个最大子数组的问题,具体内容我不多说,转的内容是: 13, -3, -25, 20, -3, -16, -23, 18, 20, -7, 12, -5, -22, 15, -4, 7 找到这连续的16个数里面的连续和最... 阅读全文
posted @ 2015-05-30 18:03 程序员修练之路 阅读(442) 评论(0) 推荐(0) 编辑
摘要:归并排序基本思想:设两个有序的子序列(相当于输入序列)放在同一序列中相邻的位置上:array[low..m],array[m + 1..high],先将它们合并到一个局部的暂存序列 temp (相当于输出序列)中,待合并完成后将 temp 复制回 array[low..high]中,从而完成排序。在... 阅读全文
posted @ 2015-05-28 20:37 程序员修练之路 阅读(639) 评论(0) 推荐(0) 编辑
摘要:一. 算法描述 插入排序:插入即表示将一个新的数据插入到一个有序数组中,并继续保持有序。例如有一个长度为N的无序数组,进行N-1次的插入即能完成排序;第一次,数组第1个数认为是有序的数组,将数组第二个元素插入仅有1个有序的数组中;第二次,数组前两个元素组成有序的数组,将数组第三个元素插入由两个元素构... 阅读全文
posted @ 2015-03-25 16:40 程序员修练之路 阅读(297) 评论(0) 推荐(0) 编辑
摘要:快速排序的第一种实现(单指针移动,挖空填数) 快速排序由于排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用,再加上快速排序思想----分治法也确实实用,因此很多软件公司的笔试面试,包括像腾讯,微软等知名IT公司都喜欢考这个,还有大大小的程序方面的考试如软考,考研中也常常出现快速排序的身影。 总的说来,要直接默写出快速排序还是有一定难度的,因为本人就自己的理解对快速排序作了下... 阅读全文
posted @ 2015-03-23 14:07 程序员修练之路 阅读(875) 评论(0) 推荐(1) 编辑

点击右上角即可分享
微信分享提示