
算法与数据结构
文章平均质量分 78
qq_26091271
这个作者很懒,什么都没留下…
展开
-
【数据结构】之链栈的java实现
链栈 栈的链式存储结构称为链栈。 在算法中要用到多个栈时,最好用链表作为栈的存储结构,即用指针来实现栈。用这种方式实现的栈也称为链栈。由于栈的插人和删除操作只在表头进行,因此用指针实现栈时没有必要像单链表那样设置一个表头单元。 一、链栈结构及数据类型 栈的链式存贮结构,也称为链栈,它是一种限制运算的链表,即规定链表中的插入和删除运算只能在链表开头进行。链栈结构见图。 链转载 2015-12-31 22:34:43 · 358 阅读 · 0 评论 -
双机调度问题
求解流水作业调度问题的Johnson算法具体描述如下: (1) 设a[i]和b[i](0 设n=4,(a0,a1,a2,a3)=(3,4,8,10)和(b0,b1,b2,b3)=(6,2,9,15)的作业0的三元组为(0,3,0),作业1的三元组为(1,2,1)……如图(a)所示。 (2) 对三元组表按处理时间排序,得到排序后的三元组表d。如图(b)所示。 (3) 对三元组表的每一项转载 2016-06-30 10:13:09 · 1509 阅读 · 0 评论 -
0-1背包问题
背包问题,常见的有三种类型:基本的0-1背包、完全背包和多重背包、二维背包 首先是基本的0-1背包问题。因为这里的物品一般指花瓶、玉器什么的,要么拿、要么不拿,只有0和1两种状态,所以也叫0-1背包。0-1背包虽然简单,却很重要,是“万法之源”,是其他几类问题的基础。 初学者有时会认为,0-1背包可以这样求解:计算每个物品的Vi/Wi,然后依据Vi/转载 2016-06-30 10:11:47 · 350 阅读 · 0 评论 -
货郎担(旅行售货商)动态规划
一,问题由来 货郎担问题也叫旅行商问题,即TSP问题(Traveling Salesman Problem),是数学领域中著名问题之一。 二,问题描述 1)货郎担问题提法:有n个城市,用1,2,…,n表示,城i,j之间的距离为dij,有一个货郎从城1出发到其他城市一次且仅一次,最后回到城市1,怎样选择行走路线使总路程最短?转载 2016-06-30 10:09:13 · 832 阅读 · 0 评论 -
排序算法详解
排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。 我们这里说说八大排序就是内部排序。 当n较大,则应采用时间复杂度为O(nlog2n)的排序方法:快速排序、堆排序或归并排序序。 快速排序:是目前基于比较的内部排序中被认为是最好的方法,当待排序转载 2016-06-29 08:07:21 · 379 阅读 · 0 评论 -
BFPRT 算法java实现
通常,我们需要在一大堆数中求前K大的数,或者求前K小的。比如在搜索引擎中求当天用户点击次数排名 前10000的热词;在文本特征选择中求IF-IDF值按从大到小排名前K个的等等问题,都涉及到一个核心问 题,即TOP-K问题。 通常来说,TOP-K问题可以先对所有数进行快速排序,然后取前K大的即可。但是这样做有两个问题。 (1)快速排序的平均复杂度为,但最坏转载 2015-12-27 14:24:29 · 2478 阅读 · 2 评论 -
二分查找java语言实现
二分查找又称折半查找,它是一种效率较高的查找方法。 折半查找的算法思想是将数列按有序化(递增或递减)排列,查找过程中采用跳跃式方式查找,即先以有序数列的中点位置为比较对象,如果要找的元素值小于该中点元素,则将待查序列缩小为左半部分,否则为右半部分。通过一次比较,将查找区间缩小一半。 折半查找是一种高效的查找方法。它可以明显减少比较次数,提高查找效率。但是,折半查找的先决条件是查找表中的数据元转载 2015-12-27 14:13:45 · 460 阅读 · 0 评论 -
归并排序 Java实现
归并排序(Merge)是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。 归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。 将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合转载 2015-12-27 14:04:45 · 235 阅读 · 0 评论 -
堆排序java代码实现
堆排序是一种利用完全二叉树来解决问题的高效算法,合法的最大堆树要满足一个条件就是每一个结点值都要大于或等于它的孩子结点值。在一个数组中那专业法表示为: arrays[i]>=arrays[2*i+1] && arrays[i]>=arrays[2*i+2]; 最小堆类似,只要改为冒最小值即可。 堆排序树的构造过程找最大值过程由下图,数组arrays[0....n]为:17,8,45,8转载 2015-12-27 13:57:43 · 335 阅读 · 0 评论 -
Java实现冒泡排序算法
一、基本思路: 冒泡排序是一种简单的交换类排序。其基本思路是,从头开始扫描待排序的元素,在扫描过程中依次对相邻元素进行比较,将关键字值大的元素后移。每经过一趟排序后,关键字值最大的元素将移到末尾,此时记下该元素的位置,下一趟排序只需要比较到此位置为止,直到所有元素都已有序排列。 一般地,对n个元素进行冒泡排序,总共需要进行n-1趟。第1趟需要比较n-1次,第2趟需要比较n-2次,.....转载 2015-12-27 13:53:59 · 305 阅读 · 0 评论 -
快速排序算法java实现
所谓的快速排序的思想就是,首先把数组的第一个数拿出来做为一个key,在前后分别设置一个i,j做为标识,然后拿这个key对这个数组从后面往前遍历,及j--,直到找到第一个小于这个key的那个数,然后交换这两个值,交换完成后,我们拿着这个key要从i往后遍历了,及i++;一直循环到i=j结束,当这里结束后,我们会发现大于这个key的值都会跑到这个key的后面,不是的话就可能你写错了,小于这个key的就转载 2015-12-27 13:52:06 · 338 阅读 · 0 评论 -
各种排序算法的分析及java实现
排序一直以来都是让我很头疼的事,以前上《数据结构》打酱油去了,整个学期下来才勉强能写出个冒泡排序。由于下半年要准备工作了,也知道排序算法的重要性(据说是面试必问的知识点),所以又花了点时间重新研究了一下。 排序大的分类可以分为两种:内排序和外排序。在排序过程中,全部记录存放在内存,则称为内排序,如果排序过程中需要使用外存,则称为外排序。下面讲的排序都是属于内排序。 内排序有可以转载 2015-12-27 13:46:50 · 255 阅读 · 0 评论 -
程序员必知必会的10道算法
算法一:快速排序算法 快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要Ο(n log n)次比较。在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他Ο(n log n) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来。 快速排序使用分治法(Divide and conquer)策转载 2015-12-27 13:28:40 · 393 阅读 · 0 评论 -
Java 常用排序算法/程序员必须掌握的 8大排序算法
分类: 1)插入排序(直接插入排序、希尔排序) 2)交换排序(冒泡排序、快速排序) 3)选择排序(直接选择排序、堆排序) 4)归并排序 5)分配排序(基数排序) 所需辅助空间最多:归并排序 所需辅助空间最少:堆排序 平均速度最快:快速排序 不稳定:快速排序,希尔排序,堆排序。 先来看看 8种排序之间的关系:转载 2015-12-26 16:39:11 · 262 阅读 · 0 评论 -
常用算法
在程序员的职业生涯中,算法亦算是一门基础课程,尤其是在面试的时候,很多公司都会让程序员编写一些算法实例,例如快速排序、二叉树查找等等。 本文总结了程序员在代码面试中最常遇到的10大算法类型,想要真正了解这些算法的原理,还需程序员们花些功夫。 1.String/Array/Matrix 在Java中,String是一个包含char数组和其它字段、方法的类。如果没有IDE自动完成转载 2015-12-26 16:34:49 · 263 阅读 · 0 评论 -
经典算法
十大算法等5大经典原创系列作品与一些重要文章的集锦: 一、微软面试100题系列 横空出世,席卷Csdn--评微软等数据结构+算法面试100题 (微软面试100题系列原题+答案索引)微软100题 (微软面试完整第1-100题)微软面试100题2010年版全部答案集锦(含下载地址)全新整理:微软、谷歌、百度等公司经典面试100题[第101-160题] 全新整理:微软、Google等转载 2016-01-01 11:34:29 · 671 阅读 · 0 评论 -
【数据结构】之队列的java实现(二)
在上一篇博文中通过java实现了队列的连续存储,下面来讨论队列的链式存储,即链队列。 链队列的定义: 队列的链式存储结构简称为链队列。它是限制仅在表头删除和表尾插入的单链表。 链队列的数据存储形式: 链队列基本运算的实现: [java] view plaincopyprint? package study_02.datastructure.queue;转载 2015-12-31 22:37:09 · 267 阅读 · 0 评论 -
【数据结构】之队列的java实现(一)
队列的定义: 队列(Queue)是只允许在一端进行插入,而在另一端进行删除的运算受限的线性表。 (1)允许删除的一端称为队头(Front)。 (2)允许插入的一端称为队尾(Rear)。 (3)当队列中没有元素时称为空队列。 (4)队列亦称作先进先出(First In First Out)的线性表,简称为FIFO表。 队列的修改是依先进先出的原则进行的。新来的成员总是加转载 2015-12-31 22:35:59 · 316 阅读 · 0 评论 -
模拟退火算法
模拟退火算法来源于固体退火原理,将固体加温至充分高,再让其徐徐冷却,加温时,固体内部粒子随温升变为无序状,内能增大,而徐徐冷却时粒子渐趋有序,在每个温度都达到平衡态,最后在常温时达到基态,内能减为最小。根据Metropolis准则,粒子在温度T时趋于平衡的概率为e-ΔE/(kT),其中E为温度T时的内能,ΔE为其改变量,k为Boltzmann常数。用固体退火模拟组合优化问题,将内能E模拟为目标函数转载 2016-11-08 22:27:13 · 477 阅读 · 0 评论