【算法设计与分析】
文章平均质量分 83
蓝精灵的自由宇宙
爱生活,生活爱你!
展开
-
(二) java并发编程--为什么使用多线程
(一)并发历史(1.1) 计算机硬件在计算机发展早期,计算机还没有操作系统;自始至终的执行一个程序,这个程序直接访问机器的所有资源。每次只运行一个程序,不能很好的利用稀缺的计算机资源。(1.2 ) 操作系统的诞生操作系统的诞生让多个程序可以同时运行,程序在各自的进程(process)中运行,互相分离,各自独立运行,有操作系统来分配资源,比如内存、文件句柄、安全证书。如果需要原创 2017-11-18 23:10:09 · 791 阅读 · 1 评论 -
(四)算法--排序算法分治 快速排序
快速排序思想:快速排序算法是通过一趟将要排序的数据分割成独立的两部分,通常以首位的数字作为分割点,让分割点左边的数据都小于分割点右边的数据,这样就确定了分割点所在的位置。然后按照此种方法,对这两部分数据分别进行快速排序,直到整个数据变成有序序列。平均时间复杂度:O (nlogn)http://developer.51cto.com/art/201403/430986.h原创 2017-11-14 17:25:26 · 711 阅读 · 1 评论 -
(三)算法--排序算法选择排序和冒泡排序
选择排序和冒泡排序是比较直观的排序,算法解决策略上属于蛮力法,简单直接。冒泡排序为什么叫做冒泡排序,可能就像是水里面的泡泡,大的先出来,所以称为冒泡排序吧。思想:每次都冒出大的排到后面(或者每次都冒出小的排在最前面)原理:1 、比较每两个相邻的元素,如果它们逆序的话(逆序,如果是从小到大排序,就是大的在后面;如果是从大到小排序,就是小的在后面;按照这样的顺序),原创 2017-11-14 13:27:47 · 851 阅读 · 1 评论 -
(二)算法--排序算法总概
1、什么是算法?Algorithm(算法)是原创 2017-11-13 15:40:15 · 379 阅读 · 1 评论 -
(一)算法--查找算法顺序查找和二分查找(递归和非递归方式)
我们抛开二分查找算法,如果有这样的一个需求,需要在一些数字中找出有没有某个数字,我们应该怎么做? 1 首先我们会想到用什么数据结构存放这些数? 数据结构就是计算机存储组织、组织数据的方式。可以这样理解,生活中我们穿的衣服需要放到一个地方,衣服可以放到衣橱中,也可以放到行李箱中,也可以放到衣架中,这里的衣架、衣橱、和行李箱及是衣服的存放结构。所原创 2017-11-12 18:45:22 · 8510 阅读 · 4 评论 -
(九)分支限界法
分支限界法(branch and bound method)按广度优先策略搜索问题的解空间树,在搜索过程中,对待处理的节点根据限界函数估算目标函数的可能取值,从中选取使目标函数取得极值(极大或极小)的结点优先进行广度优先搜索,从而不断调整搜索方向,尽快找到问题的解。分支限界法适合求解最优化问题。1、分支限界法思想上节中回溯法是从根节点出发,按照深度优先的策略搜索问题的解空间树,在搜原创 2014-01-22 08:54:15 · 23431 阅读 · 9 评论 -
(五)减治法
上节中我们讲述了分治法,分治法是把一个大问题划分为若干子问题,分别求解子问题,然后再把子问题的解进行合并得到原问题的解。而减治法同样是把大问题分解成为若干个子问题,但是这些子问题不需要分别求解,只需求解其中的一个子问题,也无需对子问题进行合并。所以,可以说减治法是退化的分治法。【减治法思想】:减治法(reduce and conquer method)将原问题的解分解为若干个子问题,并且原问题原创 2014-01-22 08:53:17 · 10664 阅读 · 0 评论 -
(三) 蛮力法
蛮力法(brute force method,也称为穷举法或枚举法)是一种简单直接地解决问题的方法,常常直接基于问题的描述,所以,蛮力法也是最容易应用的方法。蛮力法特性:(1)理论上,蛮力法可以解决可计算领域的各种问题。(2)蛮力法经常用来解决一些较小问规模的问题。(3)对于一些重要的问题(如排序、查找、串匹配),蛮力法可以设计一些合理的算法,这些算法具有实用价值,而且不受输入规模原创 2014-01-22 08:52:20 · 18032 阅读 · 4 评论 -
(一) 算法设计基础
所谓燕过留痕也,就从算法设计与分析第一部分开始,进行总结。1算法的基本概念1.1算法机器重要特性算法被公认为是计算机技术的基石。通俗的讲,算法是解决问题的方法,现实生活中关于算法的实例不胜枚举,如一道菜谱、一个安装转椅的操作指南等,再如四则元算、算盘的计算口诀等。严格的说,算法是对特定问题求解步骤的一种描述,是指令的优先序列。此外,算法的五个特性如下所示:输入(in原创 2014-01-22 08:51:31 · 4137 阅读 · 2 评论 -
(二) 算法分析基础
1.1 算法的时间复杂度性分析算法是解决问题的方法,一个问题可以有多种解决方法,不同的算法之间就有了优劣之分。如何对算法进行比较呢?算法可以比较的方面很多,如易读性、健壮性、可扩展性等,但不是最关键的方面,算法的核心和灵魂是效率,也就是解决问题的速度。试想,一个需要运行很多年才能给出正确结果的算法,就是其他方面的性能再好,也是一个不实用的算法。算法的时间复杂性。算法的时原创 2014-01-22 08:51:50 · 2351 阅读 · 0 评论 -
(八)回溯法
回溯法(back track method)也称为试探法,是蛮力法的改进。在包含问题的所有可能解空间中,从根节点处罚,按照深度优先策略进行搜索,对于解空间树的某个节点,如果该节点满足问题的约束条件,则进入该子树继续进行搜索,否则将以该节点为根节点进行剪枝。回溯法常常可以避免搜索所有可能解,适用于组合较数较大的问题。【采用回溯法解决0/1背包问题】【问题描述】:例如,对于n=3的0/原创 2014-01-22 08:53:57 · 5779 阅读 · 2 评论 -
(七)贪心法
贪心法比较简单,从这个算法的名字看来差不多都了解了,贪心,贪心的人是只顾一时的利益,不顾长远的利益。 贪心法把一个问复杂问题分解为一系列较为简单的局部最优选择,每一步选择都是对当前的一个扩展,直到获得问题的完全解。贪心法的典型应用是求解最优化问题,而且对许多问题能得到最优解,即使不能得到最优解也能与最优解很好的近似。【贪心法设计思想】:原创 2014-01-22 08:53:37 · 2284 阅读 · 1 评论 -
二分查找算法(递归与非递归两种方式)
首先说说二分查找法。二分查找法是对一组有序的数字中进行查找,传递相应的数据,进行比较查找到与原数据相同的数据,查找到了返回1,失败返回对应的数组下标。采用非递归方式完成二分查找法。java代码如下所示。原创 2014-04-27 15:44:26 · 143703 阅读 · 26 评论