1、算法概要
算法是用于计算、数据处理和自动推理使用的。算法主要是做精确计算和表示一个有限长列的有效方法。算法一般包含清晰定义的指令用于计算函数。基本上也属于一种思考最简洁的方式。
2、算法特征
算法主要包含五个特征
2.1、有穷性;
是指算法必须能在执行有限个步骤后终止;
2.2、确切性;
算法的每一个步骤必须有确切的定义;
2.3、输入项;
一个算法输入有0或多个输入,以刻画预算对象的初始情况,所谓0就是初始化条件;
2.4、输出项;
反馈对数据加工后的结果。没有输出的算法无意义。
2.5、可行性;
算法中执行的任何计算都可以分步骤进行,每个步骤并在有限时间内完成。
3、算法常用的设计模式
主要有十个设计模式
3.1、完全遍历法
在验证一个问题集合时,且以验证正确性和最优性的时候,就会采用完全遍历法。但在便利的过程中就会消耗大量的内存。
3.2、不完全遍历法
当便利时占用的内存空间特别庞大时,可以使用不完全遍历法来实现。例如各种规则算法和搜索算法即是。
3.3、分治法
把一个问题分区成互相独立的部分,分别求解。分治法的好处在于可以并行计算。
分治法所能解决的问题一般具有以下几个特征:
(1) 该问题的规模缩小到一定的程度就可以容易地解决;
(2) 该问题可以分解为若干个规模较小的相同问题,即该问题具有最优子结构性质;
(3) 利用该问题分解出的子问题的解可以合并为该问题的解;
(4) 该问题所分解出的各个子问题是相互独立的,即子问题之间不包含公共的子子问题。
3.4、动态规划法
当问题整体的最优解是由局部最优解组成的时候,会经常采用这种规划方法。用于求解包含重叠子问题的最优化问题的方法。
3.5、贪婪算法(也叫贪心算法)
常见的近似求解思路。当问题的整体最优解不是(或无法证明是)由局部最优解组成,且对解的最优性没有要求的时候,可以采用的一种方法。
3.6、线性规则法
问题是目标函数和约束条件都是线性的最优化
3.7、简并法
把一个问题通过逻辑或数学推理,简化成与之等价或者近似的、相对简单的模型,进而求解的方法。
3.8、穷举法
穷举法,或称为暴力破解法,其基本思路是:对于要解决的问题,列举出它的所有可能的情况,逐个判断有哪些是符合问题所要求的条件,从而得到问题的解。它也常用于对于密码的破译。
3.9、分枝界限法
分枝界限法是一个用途十分广泛的算法,运用这种算法的技巧性很强,不同类型的问题解法也各不相同。分支定界法的基本思想是对有约束条件的最优化问题的所有可行解(数目有限)空间进行搜索
3.10、回溯法
运用这种算法的技巧性很强,不同类型的问题解法也各不相同。分支定界法的基本思想是对有约束条件的最优化问题的所有可行解(数目有限)空间进行搜索。
6、复杂度
6.1、时间复杂度
时间复杂度是指着算法需要消耗的时间资源。一般来说,计算机算法说问题模型n的函数f(n),算法的时间复杂度因因此被记做
T(N)=O(F(N))
算法执行时间的增长率与f(n) 的增长率正相关,称作渐近时间复杂度(Asymptotic Time Complexity),简称时间复杂度。
常见的时间复杂度有:常数阶O(1),对数阶O(log2n),线性阶O(n), 线性对数阶O(nlog2n),平方阶O(n2),立方阶O(n3),..., k次方阶O(nk),指数阶O(2n)。随着问题规模n的不断增大,上述时间复杂度不断增大,算法的执行效率越低。
6.2、空间复杂度
算法的空间复杂度是指算法需要消耗的空间资源。其计算和表示方法与时间复杂度类似,一般都用复杂度的渐近性来表示。同时间复杂度相比,空间复杂度的分析要简单得多。
6.3、非确定性多项式时间复杂度(np)
非定常多项式(英语:non-deterministic polynomial,缩写NP)时间复杂性类,或称非确定性多项式时间复杂性类,包含了可以在多项式时间内,对一个判定性算法问题的实例,一个给定的解是否正确的算法问题。
6.4、复杂度特性
所有算法都需要符合这三种特性正确性、可读性以及健壮性。
7、算法分类
算法可大致分为基本算法、数据结构的算法、数论与代数算法、计算几何的算法、图论的算法、动态规划以及数值分析、加密算法、排序算法、检索算法、随机化算法、并行算法,厄米变形模型,随机森林算法。
算法可以宏泛的分为三类:
一,有限的,确定性算法 这类算法在有限的一段时间内终止。他们可能要花很长时间来执行指定的任务,但仍将在一定的时间内终止。这类算法得出的结果常取决于输入值。
二,有限的,非确定算法 这类算法在有限的时间内终止。然而,对于一个(或一些)给定的数值,算法的结果并不是唯一的或确定的。
三,无限的算法 是那些由于没有定义终止定义条件,或定义的条件无法由输入的数据满足而不终止运行的算法。通常,无限算法的产生是由于未能确定的定义终止条件。
8、几个算法基础小实践
8.1、求最大值算法
8.2、求最大公约数
8.3、兔子问题
8.4、猴子吃桃子
8.5、乒乓球比赛
8.6、数列求和
8.7、2的问题
8.8、自由落体球
8.9、累乘
8.10、递归求5!
9、资料分享
1、算法笔记(可以看看里面有很多比较有意思的算法) http://www.csie.ntnu.edu.tw/~u91029/
2、20世纪十大算法 http://www.uta.edu/faculty/rcli/TopTen/topten.pdf
3、维基算法百科: http://zh.wikipedia.org/wiki/%E7%AE%97%E6%B3%95
4、百度算法百科: http://baike.baidu.com/link?url=5sSYcikkqGncq7qdeF3JkMKxbyFBZOLjmjqFQUP51NNhZ3zBj_xtrdMiFnkWlREX
5、麻省理工大学算法公开课: http://v.163.com/special/opencourse/algorithms.html
6、算法博客: http://www.iteye.com/blogs/tag/%E7%AE%97%E6%B3%95
7、十三个经典算法研究与总结 http://blog.csdn.net/v_JULY_v/article/details/6305212
https://blog.csdn.net/sj13694848606/article/details/52370476
相关推荐
Java算法全卷涵盖了基本算法和图算法,是学习和提升编程技能的重要资源。这份资料主要针对使用Java语言进行算法实现的开发者,适用于那些对ANT、EJB、J2EE、JAVA和SPRING等技术栈有了解或兴趣的人群。下面我们将深入...
Java算法设计涵盖了许多核心编程概念,是解决复杂问题的关键工具。这个压缩包文件包含了各种算法的实现,让我们逐一探讨它们。 1. **排序算法**:排序是数据处理的基础,这里可能包括了各种经典排序算法,如快速...
从给定的文件信息来看,标题“Java算法PDF版”暗示了这是一份关于Java编程语言中的算法应用和...通过阅读和研究“Java算法PDF版”这样的资料,可以系统地提升这方面的能力,为成为一名优秀的软件工程师打下坚实的基础。
在Java编程语言中,算法是解决问题的关键,它们是程序设计的基础。"Java基础算法训练"主要涉及了对Java语言中的算法应用和语法的理解与实践。这个训练集包含了各种难度的题目,旨在帮助开发者提升在实际编程中运用...
"JAVA零基础算法练习题"就是针对这样的需求而设计的一系列练习题目,旨在帮助初学者提升对Java语言的理解和运用,同时培养解决问题的能力。 首先,让我们深入了解一下算法。算法是一系列精确的规则或步骤,用于解决...
Java算法基础是编程领域中的重要组成部分,特别是在解决复杂问题和优化程序性能时。这个资源"Java-Algorithms-Fundamentals:Java算法基础知识-问题解决和解决方案"显然是一个专注于教授Java编程语言中的算法概念和...
首先,让我们详细探讨一下Java算法的重要性。算法是解决问题的步骤或方法,是计算机科学的基础。在Java编程中,良好的算法设计和实现能力能够极大地提高代码的效率和可读性。通过解决这些算法题,开发者可以锻炼逻辑...
Java算法大全涵盖了编程中最核心、最实用的算法,这些算法是每位Java开发者应当掌握的基础技能。这个压缩包包含了近100种不同的算法实现,旨在帮助开发者提升编程能力,理解和解决实际问题。以下是对其中一些关键...
掌握这些经典的Java算法,对于任何一个希望在编程领域有所建树的开发者来说,都是必要的。这些算法不仅仅是面试中的常客,更是日常开发中不可或缺的工具。例如,在数据结构的学习中,我们经常会用到循环、条件判断等...
Java算法大全源码包是一个非常宝贵的资源,尤其对于学习和提升Java编程技能,尤其是算法能力的开发者来说。这个压缩包包含了一系列与Java编程语言相关的算法实现,这些算法涵盖了数据结构、排序、搜索、图论等多个...
Java 算法基础知识点总结 本文总结了 Java 中 10 个最常见的算法类型,涵盖了字符串、数组、链表、树形结构等多种数据结构。这些算法是程序员在代码面试中最常遇到的问题,了解这些算法的原理对程序员的职业生涯...
对于初学者而言,《Java算法设计与题解》是一个很好的学习起点,它不仅提供了算法设计的基础知识,还通过实例展示了算法的具体应用。对于经验丰富的开发者来说,这本书也是一个宝贵的参考资源,书中对经典算法的深入...
在当今软件行业的发展中,程序员面对的面试挑战越来越大,尤其是在掌握编程语言以及算法设计方面。...此外,算法的学习也能够提升个人的逻辑思维和创新思维,为将来的编程和算法设计工作打下坚实的基础。
总的来说,Java算法大全源码包是一个综合性的学习资源,它可以帮助开发者巩固基础,提升算法思维,掌握编程技巧,并在实际项目中灵活应用。通过深入研究这个开源项目,无论是初学者还是经验丰富的开发者,都能从中...
Java基础算法是编程学习中的重要组成部分,它涵盖了排序、搜索、图论、动态规划等多个领域。这些算法在软件开发中有着广泛的应用,无论是后端服务的优化,还是前端数据的处理,都离不开算法的支持。下面将对Java基础...
《JAVA算法100例_全源码》是一本宝贵的编程学习资源,它详细介绍了多种算法的实现方式,并通过丰富的源码示例加深理解。这些算法不仅涵盖递归和循环等基础概念,还包括了数学逻辑和数据结构的应用,对于初学者和有...
Java算法是程序设计的基础,它在软件开发中扮演着至关重要的角色。这个“java算法140实例”压缩包显然是一份丰富的学习资源,旨在帮助初级Java开发者掌握基础到进阶的算法知识。这里我们将详细探讨其中可能涵盖的...
总之,这个Java算法大全集结了从基础到高级的各种算法知识,对于提升Java开发者的技术水平和解决问题的能力大有裨益。通过学习和实践,可以加深对算法的理解,提高编程能力,并能在实际项目中游刃有余地运用各种算法...
Java算法设计资料主要涵盖的是如何使用Java语言进行有效的算法实现和设计。算法是计算机科学的基础,对于解决复杂问题和优化程序性能至关重要。本资料重点可能是《算法》这本书的第四版,这是一本广泛认可的算法教材...
《Java算法导论》是一本深入探讨如何...总的来说,《Java算法导论》是Java程序员提升算法技能的宝贵资源,通过阅读和实践书中的例子,开发者能够提升问题解决能力,提高代码质量,为解决更复杂的编程挑战打下坚实基础。