算法概念:
# 一个有限指令集
#接受一些输入(有些情况下不需要输入)
#产生输出
#一定在有限步骤之后终止
#每一条指令必须
#有充分明确的目标,不可以有歧义
#计算机能处理的范围之内
#描述应不依赖于任何一种计算机语言以及具体的实现手段
如下选择排顺序描述:
void SelectionSort (int List[], int N ) { /*将N个整数List[0]。。。List[N-1]进行非递减排序 */ for (i=0; i<N; i++) { Minposition = ScanForMin(List, i ,N-1); /*从List[]到L实体【n-1]中找最小元,并将其位置赋值给MiniPosition*/ Swap( List[i],List[MinPosition] ); /*将未排序部分最小值换到有序部分的最后位置*/ } }
前面讲述的是算法的基础,下面将解决最大子列和问题:
问题描述:给定N个整数的序列{A1,A2,A3,....,An},求函数 f( i , j ) = max{第 i 到 j 的序列和} 的最大值。
#include<stdio.h> #include<stdlib.h> /*----------------------------- ---------最大子列和问题-------- --- 给定N个整数的序列{A1,A2,A3,....,An}, --- 求函数 f( i , j ) = max{第 i 到 j 的序列和} --- 的最大值。 如:[1,2,4,5,-2,4,5,2,1,9,0,3] -------------------------------*/ //算法一书暴力算法,每次需要重头算起,时间复杂度O(N^3) int MaxSubseqSum1(int A[],int N) { int ThisSum,MaxSum=0; int i, j, k; for( i = 0; i < N; i++ ) {/*i是子列左端位置*/ for( j = i; j < N; j++ ){/* j 是子右端的位置*/ ThisSum=0; /* ThisSum是从A[i]到A[j]的子列和*/ for( k = i; k <= j; k++ ) { ThisSum += A[k]; if( ThisSum > MaxSum ) /*如果当前子列和大于已记录的最大子列和则更新记录*/ MaxSum = ThisSum; } } } return MaxSum; } //利用上次算出的i到j的值,直接加上当前值即可,时间复杂度O(N^2) int MaxSubseqSum2(int A[],int N) { int ThisSum,MaxSum=0; int i,j; for( i = 0; i < N; i++ ) {/*i是子列左端位置*/ ThisSum=0; /* ThisSum是从A[i]到A[j]的子列和*/ for( j = i; j < N; j++ ){/* j 是子右端的位置*/ ThisSum += A[j]; if( ThisSum > MaxSum ) /*如果当前子列和大于已记录的最大子列和则更新记录*/ MaxSum = ThisSum; } } return MaxSum; } //分而治之 int MaxSubseqSum3(int A[],int N) { int ThisSum=0,MaxSum=0; int i; for( i = 0; i < N; i++) { ThisSum += A[i]; if( ThisSum > MaxSum ) MaxSum = ThisSum; else if( ThisSum < 0 ) ThisSum = 0; } return MaxSum; } int main(){ int N,A[100000]; int i,t; //输入数组长度 scanf("%d",&N); //输入数据 if( N <= 0 || N > 100000) { printf("Input Array Length Invalid \n "); exit(0); } for(i = 0; i < N ; i++ ){ scanf("%d",&A[i]); } printf("%d",MaxSubseqSum3(A,N)); return 0; }
相关推荐
### 数据结构知识点总结 #### 一、算法特性 1. **算法保证计算结果的正确性**:算法的设计目的是解决特定问题或完成特定任务,因此它必须确保在其定义域内的所有输入下都能产生正确的输出结果。这表明算法在设计时...
在本"C语言Mooc视频-第2章2"的学习资源中,我们主要聚焦于C语言的基础部分,特别是关于顺序结构的编程概念。顺序结构是程序设计中最基础的控制流程,它按照代码行的顺序逐一执行,是每个程序员必须掌握的基本技能。 ...
* Java 语言中的控制结构包括顺序结构、选择结构和循环结构。 * if-else 语句的执行顺序和范围需要注意,例如 if (x < -100) {System.out.println("第 1 区域");} else if (x ) {System.out.println("第 2 区域");...
基于MOOC平台的《数据结构》课程设计与实现,是指在MOOC平台上专门设计并实施《数据结构》这一课程的方案。《数据结构》是计算机科学中的一门重要基础课程,它教授如何有效地存储、组织和处理数据,是各类算法与程序...
在这个“数据结构与算法MOOC”的第三周课程中,我们将深入探讨这两种数据结构。 栈(Stack)是一种后进先出(Last In, First Out,简称LIFO)的数据结构。它的主要操作包括压入(push,将元素添加到栈顶)和弹出...
5. **数组**:数组是存储同类型元素集合的数据结构。习题可能涵盖一维数组、二维数组的声明、初始化、访问和操作,以及数组与指针的关系。 6. **指针**:指针是C语言的一大特色,它允许我们直接操作内存。习题会...
然后,通过"mooc-java-programming-i-main"这个项目文件,你将实践编写第一个"Hello, World!"程序,这是每个程序员的起点,它展示了如何在Java中输出文本。 接着,深入学习Java的基础语法,包括数据类型(整型、...
数据结构是计算机科学中的核心课程之一,主要研究如何在计算机中组织和管理数据,以便高效地进行存储、检索和处理。南京邮电大学(南邮)的数据结构课程涵盖了这一领域的重要概念和算法,包括线性结构、树形结构、图...
这个"JAVA-MOOC-part-1-master"目录可能包含了相关的源代码文件、练习题、讲解文档和教学视频,方便学员按照自己的节奏学习和实践。通过这个部分的学习,学员将能够熟练掌握Java的基础知识,并具备独立编写简单Java...
在【压缩包子文件的文件名称列表】中只有一个条目“001”,这可能表示一系列的学习资料或者笔记,通常这种编号方式用于表示文件的顺序,比如001可能是课程的第一部分,包含了基础概念、环境搭建或第一个简单的程序...
课程通过一系列的讲解和实例,让学生深入理解Python3的语法特性、数据结构、函数、模块以及面向对象编程等核心概念。课程链接提供了详细的课程内容和结构,便于学生自主学习和跟踪课程进度。 【标签】虽然没有直接...
浙江大学的《数据结构与算法》课程,通过MOOC平台为广大学习者提供了高质量的教学资源,包括PDF格式的PPT,帮助学生深入理解这一领域的基本概念和实践技能。 首先,我们来看看课程中涉及到的一些主要知识点: 1. *...
- **第一台采用冯·诺依曼结构的计算机**:EDVAC的设计采用了冯·诺依曼结构,这是它的显著特点之一。 #### 13. 冯·诺依曼结构描述 - **数据与程序采用十进制的方式进行存储**:错误,冯·诺依曼结构采用二进制。...
这个项目是针对2020年的一项在线课程(MOOC)的第11部分,旨在帮助学员掌握构建实际Web应用程序所需的关键技能。 在全栈Web开发中,JavaScript是一种至关重要的编程语言,它不仅用于前端交互,也用于后端服务器端...
1. 分布式:Hadoop可以在多台服务器之间分布数据和计算任务,确保系统的可用性和可扩展性。 2. 扩展性:Hadoop设计灵活,能够轻松添加更多硬件节点以处理更大规模的数据。 3. 高容错性:通过数据复制和节点监控,...
MapReduce是大数据技术中的一个核心组件,它是一种分布式并行编程模型,能够处理大量数据。下面是关于MapReduce的知识点: 1. 概述 MapReduce是一种分布式并行编程模型,能够处理大量数据。它由Google公司提出,...
**第一章 ROS简介** ROS的主要目标是为机器人开发提供一套全面的工具集,包括数据处理、硬件抽象、低级别控制、消息传递、传感器和执行器接口等。ROS的核心特性包括: 1. **ROS Master**: 管理整个ROS网络,负责...
知识点1:MOOC(大型开放式在线课程)的定义和特点 MOOC,即大型开放式在线课程,是一种在线教育形式,它具有以下特点:面向大众、开放注册、在线学习、互动性强、支持个性化学习等。MOOC是现代远程教育的重要组成...
数据仓库是一个专门为决策支持设计的、结构化的、只读的数据存储系统,它从不同的操作型数据库中抽取、转换和加载数据,以提供对历史数据的快速查询和分析。数据仓库具有面向主题、集成性、稳定性和时间变化四大特征...