一.递归和循环的区别
void loop() { for(int i=0;i<N;i++) printf("%d\n",i); }
void recursion(int n) { if(n){ recursion(n-1); printf("%d\n",n); } }
void Test1() { start=clock(); loop(); end=clock(); printf("ticke1=%f\n",(double)(end-start)); printf("time = %f\n",(double)((end-start)/CLK_TCK)); start=clock(); recursion(N); end=clock(); printf("ticke1=%f\n",(double)(end-start)); printf("time = %f\n",(double)(end-start)/CLK_TCK); printf("clk-tck=%f\n",CLK_TCK); }
看起来差不多,但是递归存在压栈的过程,会存在栈溢出问题
二.多项式计算
double f1(int a[],int n,double x) { double result=0; for(int i=0;i<n;i++) result=result+a[i]*pow(x,i); return result; }
double f2(int a[],int n,double x) { double result=0; for(int i=n;i>0;i--) result=a[i-1]+x*result; return result; }
第二个算法较优,第一个算法复杂度太高。聪明地利用算法,提高效率
三.最大字段和
给定K个整数组成的序列{ N1, N2, ..., NK },“连续子列”被定义为{ Ni, Ni+1, ..., Nj },其中 1 <= i <= j <= K。“最大子列和”则被定义为所有连续子列元素的和中最大者。例如给定序列{ -2, 11, -4, 13, -5, -2 },其连续子列{ 11, -4, 13 }有最大的和20。现要求你编写程序,计算给定整数序列的最大子列和
算法一: O(n3)
//暴力法 三重循环 int count1() { int maxCount=0; int temp=0; for(int i=0;i<len;i++) for(int j=i;j<len;j++){ for(int k=i;k<=j;k++){ temp+=s[k]; if(temp>maxCount) { maxCount=temp; head=i; tail=k; } } temp=0; } return maxCount; }
算法二:O(n2)
//暴力法,二重循环 int count2() { int maxCount=0; int temp=0; for(int i=0;i<len;i++){ for(int j=i;j>0;j--){ temp+=s[j]; if(temp>maxCount) { maxCount=temp; head=j; tail=i; } } temp=0; } return maxCount; }
算法三:O(n*logn)
//分治法,nlogn复杂度 int count3(int left,int right) { if(left==right) if(s[left]>0) return s[left]; else return 0; int mid =(left+right)/2; int maxLeft=count3(left,mid); int maxRight=count3(mid+1,right); int templ=0,tempr=0; int maxl=0,maxr=0; for(int i=mid;i>=left;i--) { templ+=s[i]; if(templ>maxl){ maxl=templ; } } for(int i=mid+1;i<=right;i++) { tempr+=s[i]; if(tempr>maxr){ maxr=tempr; } } int border=maxl+maxr; if(maxl>maxr) if(maxl>border){ return maxl; } else{ return border; } else if(maxr>border){ return maxr; } else{ return border; } }
算法四:O(n)
//在线处理 int count4(int num) { int ThisSum=0,MaxSum=0; for(int i=0;i<num;i++) { ThisSum+=s[i]; if(ThisSum>MaxSum) MaxSum=ThisSum; else if(ThisSum<0) ThisSum=0; } return MaxSum; }
相关推荐
这份“数据结构高分笔记part1”显然是为了帮助备考研究生入学考试的专业学生准备的,旨在提供深入的数据结构理解,助力他们在考试中取得优异成绩。 笔记可能涵盖以下几个关键知识点: 1. **基本概念**:首先,笔记...
郝斌数据结构笔记 数据结构概述: 数据结构是指在计算机中对数据的存储、组织和管理的方式。它是软件最核心的课程,学完了啥也干不了。数据结构 = 个体的存储 + 个体的关系存储,算法 = 对存储数据的操作。 知识点...
郝斌数据结构笔记 。
这篇“数据结构笔记”可能包含了关于这个主题的深入理解和实践应用。结合给出的标签“源码”和“工具”,我们可以推测这份文档不仅讨论了理论知识,可能还涉及到了实际编程实现和相关工具的使用。 在数据结构的学习...
数据结构(C语言描述)学习笔记、学习文档 数据结构(C语言描述)学习笔记、学习文档 数据结构(C语言描述)学习笔记、学习文档 数据结构(C语言描述)学习笔记、学习文档 数据结构(C语言描述)学习笔记、学习文档 ...
"求职笔记.docx"可能是一份与数据结构相关的求职准备资料,可能涵盖了面试常见问题、数据结构的重要性以及如何在实际工作中应用这些知识。这部分内容可能包含了一些面试技巧和行业动态,帮助你更好地准备技术面试。 ...
### Java数据结构与算法学习笔记知识点总结 #### 一、数据结构概述 数据结构是对数据的一种组织形式,它决定了数据的存储方式以及处理数据的方法。常见的数据结构包括但不限于数组、链表、栈、队列、二叉树、图等...
本篇将详细介绍《数据结构笔记(C++版)》中的关键知识点,帮助读者深入理解数据结构的基础概念及其在C++中的实现。 #### 二、数据结构的核心概念 1. **数据**: 能够被计算机处理的各种符号的集合,包括数字、字符、...
总之,这份资料为准备考研的同学提供了一个全面的数据结构学习资源,通过笔记和习题的结合,有助于考生在考试中取得优异成绩。在复习过程中,考生应注重理论与实践的结合,不断思考和练习,才能真正掌握数据结构的...
但是,根据标题“数据结构笔记.pdf”,我可以提供有关数据结构的基础知识点。 数据结构是计算机存储、组织数据的方式。它旨在以某种方式将数据存储在计算机中,以便于可以进行有效的访问和修改。更确切地说,数据...
"408考试数据结构高分笔记2019版(天勤论坛)"是一份针对这一考试的重要参考资料,它包含了丰富的理论知识和实战技巧,旨在帮助考生深入理解和熟练应用数据结构的基本概念、算法和设计方法。 笔记首先会涵盖数据...
线性表是一种基本的数据结构,由n个(n≥0)数据元素组成,每个元素最多只有一个直接前驱和后继。线性表的操作包括构造空表、获取表长、查找特定元素、插入元素、删除元素等。顺序存储结构是线性表的一种实现方式,...
《数据结构笔记(C语言版)》源自清华大学严蔚敏、吴伟明的经典教材,涵盖了数据结构的基础理论和实践方法。 1. 数据结构的定义:数据结构是数据之间的相互关系,它包括逻辑结构、存储结构和数据运算三个方面。逻辑...
这份“数据结构电子笔记”涵盖了这一领域的重要概念和算法,是学习和理解数据结构的理想资源。 笔记可能包含了以下关键知识点: 1. **线性数据结构**:包括数组、链表(单链表、双链表、循环链表)、栈和队列。...