风也温柔

计算机科学知识库

数据结构与算法java语言 Java常用数据结构与算法概述

  1.最近在学习数据结构与常用算法,首先要了解什么是数据结构?它与算法又有什么样的关系?我觉得要学习一门技术或者一个知识点最简单的首先是要搞清楚它的基本概念。

  数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。(引用百度百科对数据结构的定义)常用的数据结构有以下几种

  在这里插入图片描述

  算法()是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。不同的算法可能用不同的时间、空间或效率来完成同样的任务。一个算法的优劣可以用空间复杂度时间复杂度来衡量(引用百度百科对数据结构的定义)

  时间复杂度:在计算机科学中,时间复杂性,又称时间复杂度,算法的时间复杂度是一个函数,它定性描述该算法的运行时间。这是一个代表算法输入值的字符串的长度的函数。时间复杂度常用大O符号表述,不包括这个函数的低阶项和首项系数。使用这种方式时,时间复杂度可被称为是渐近的,亦即考察输入值大小趋近无穷时的情况。

  一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间就多。一个算法中的语句执行次数称为语句频度或时间频度。记为T(n)。

  一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数数据结构与算法java语言 Java常用数据结构与算法概述,用T(n)表示,若有某个辅助函数f(n),使得当n趋近于无穷大时,T(n)/f (n)的极限值为不等于零的常数,则称f(n)是T(n)的同数量级函数。记作T(n)=O(f(n)),称O(f(n)) 为算法的渐进时间复杂度,简称时间复杂度。

  在各种不同算法中,若算法中语句执行次数为一个常数,则时间复杂度为O(1),另外,在时间频度不相同时,时间复杂度有可能相同,如T(n)=n2+3n+4与T(n)=4n2+2n+1它们的频度不同,但时间复杂度相同,都为O(n2)。

  空间复杂度空间复杂度(Space )是对一个算法在运行过程中临时占用存储空间大小的量度,记做S(n)=O(f(n))。

  常见的时间复杂度并且它们的时间复杂度从小到大依次为

  下面举例说明几种时间复杂度的理解及代码演示

  1.常数阶

   /**常数阶 无论代码执行多少行 ,它没有循环等复杂结构,就执行了一次,那么这代码的时间复杂度就是o(1)

        下面的代码执行的时候,消耗的时间不随某个变量的变化而变化。所以说无论它的代码行数有多长,都可以用O(1)表示*/
        public static void main(String[] args) {
            int i=1;
            int j=2;
            i++;
            j++;
            int m=i+j;
        }

  2.对数阶O(log2^n)

<p><pre> /**对数阶

 * 下面这段代码每执行一次i就接近 n (注意:这个n不可变,在这里我只是给他赋一个初始值) 所以说执行2的x次方后的值不小于n的时候
 * 程序停止
 *  也就是2^n=x;
 *  x=log2^n; 所以这个代码的时间复杂度就为O(log2^n)
 *  这个2为下面代码i*2的2,如果i*3那么则为O(log3^n)
 */
public static void main(String[] args) {
   int i=1;
   int n=100;
   while (i