第1节 基本概念

1.什么是数据结构?

数据之间的关系是数据结构。

举例:


在这个例子中,数据就是课程、类别和作者,结构就是课程与类别和作者的关系,它体现了一种最简单的线性关系,除了线性结构外,还有集合结构和更为复杂的树形结构和图结构。

2.什么是算法?

有了数据结构,我还要对其进行遍历或查找,或删除或插入或修改。
这个处理过程就是算法。
算法就是处理数据关系的方法。
数据之间有很多关系,一个数据关系处理方法也有很多。
我们希望采用最好的那个算法。
我们通过它们的时间复杂度和空间复杂度来找出最适用的算法。

时间复杂度

时间复杂度就是算法语句的执行次数。
通常有这些1,log(2)n,n,n log(2)n ,n的平方,n的三次方,2的n次方,n!
比如

for(i=1;i<=n;++i)
{
    for(j=1;j<=n;++j)
    {
        c[i][j]=0;//该步骤属于基本操作执行次数:n的平方次
        for(k=1;k<=n;++k)
            c[i][j]+=a[i][k]*b[k][j];//该步骤属于基本操作执行次数:n的三次方次
    }
}

空间复杂度

暂时不关心。
主要包括动态分配的空间,以及递归栈所需的空间等。

3.作业

输入一组整数,求出这组数字子序列和中的最大值,只要求出最大子序列的和,不必求出最大值对应的序列。

最大子序列和:整数序列A1, A2,... An (可能有负数),求A1An的一个子序列AiAj,使得Ai到Aj的和最大。

例如:
序列:-2, 11, -4, 13, -5, 2, -5, -3, 12, -9,则最大子序列和为21。
序列:0, -3, 6, 8, -20, 21, 8, -9, 10, -1, 3, 6, 5,则最大子序列和为43。

解答之一:

"use strict"
const Max_Son= function(arr){
    let max_sum = 0;
    let len = arr.length;
    let i,j;
    for(i=0; i< len; i++){
        let sum = 0;
        for(j=i; j<len; j++){
            sum = sum + arr[j];
            if(sum > max_sum){
                max_sum = sum;
            }    
        }
    }
    return max_sum;
}

console.log(Max_Son([-2, 11, -4, 13, -5, 2, -5, -3, 12, -9]));
console.log(Max_Son([0, -3, 6, 8, -20, 21, 8, -9, 10, -1, 3, 6, 5]));

题目变异:
求整数数组中求最大连续子序列之和,并且记录开始和结束位置。
该题目各种时间复杂度的算法

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容