浙大《数据结构》学习&练习(一)算法初步
1.数据结构是数据在计算机中的组织方式,类比图书在图书馆中的存储,应该如何分类,如何在书架上存取。
2.抽象数据结构是对一类的数据的一种组织方式的通用(抽象)描述,包括类型的名称,数据对象集和操作集。数据对象集定义了是什么样类型的数据,操作集定义了数据的处理方式。
3.评价算法的优劣使用时间复杂度T(N)和空间复杂度S(n)。前者体现了算法占用的时间,后者体现了算法占用的存储空间,都和数据的规模有关。
4.测试程序运行时间的一个传统方法。
#include <time.h> //clock()会返回程序开始运行到clock()被调用时的时间
//CLK_TCK是个常数,为机器时钟每秒走的打点数 //clock_t是函数clock()的返回类型,即时钟打点clock tick
clock_t start, stop; double duration; int main()
{
//把要测试的内容放在clock()调用的地方
start = clock(); //start为程序运行到第一次调用的时间 anyFunction(); //某个函数 stop = clock(); //stop为程序运行到第二次调用的时间 duration = ((double)(stop - start)) / CLK_TCK; }
5.应用实例:求最大子列和问题
本题旨在测试各种不同的算法在各种数据情况下的表现。各组测试数据特点如下:
- 数据1:与样例等价,测试基本正确性;
- 数据2:102个随机整数;
- 数据3:103个随机整数;
- 数据4:104个随机整数;
- 数据5:105个随机整数;
输入格式:
输入第1行给出正整数K (≤);第2行给出K个整数,其间以空格分隔。
输出格式:
在一行中输出最大子列和。如果序列中所有整数皆为负数,则输出0。
输入样例:
6
-2 11 -4 13 -5 -2
输出样例:
20
第四种算法精妙就精妙在它的处理思路是一个一个数字处理,简单推导一下,只要当前子列与新加入的数的和是负数,那么新加入的数必定是大于现在的最大和的,那当前子列的结果就可以抛弃,最大的子列直接变成新加入的数本身,然后从该数开始重新累加即可。
测试代码(C++):
#include<iostream>
using std::cout;
using std::cin; int MaxSubSeqSum2(int A[], int N);
int MaxSubSeqSum4(int A[], int N); int main()
{
int Numbers;
//cout << "How many integer numbers in total?\n";
cin >> Numbers; int *A = new int [Numbers];
//cout << "Enter the numbers:\n";
for (int i = 0; i < Numbers; i++)
{
cin >> A[i];
}
cout << MaxSubSeqSum4(A, Numbers) << "\n";
delete []A; system("pause");
return 0; } /* tranditional algorithm */
int MaxSubSeqSum2(int A[], int N)
{
int ThisSum;
int MaxSum = 0; /* head begin from 0,1,...,n */
for (int n = 0; n < N; n++)
{
/* ThisSum stores results of every subquene for current head */
ThisSum = 0;
for (int j = n; j < N; j++)
{
ThisSum += A[j];
if (ThisSum > MaxSum)
{
MaxSum = ThisSum; /* update MaxSum */
}
else
{
/* do nothing */
}
}
}
return (MaxSum > 0 ? MaxSum:0);
} /* better algorithm */
int MaxSubSeqSum4(int A[], int N)
{
int ThisSum = 0;
int MaxSum = 0; /* handle one number each time */
for (int i = 0; i < N; i++)
{
ThisSum += A[i];
if (ThisSum > MaxSum)
{
MaxSum = ThisSum; /* update MaxSum */
}
else if (ThisSum < 0) /* the next number must be larger than MaxSum */
{
ThisSum = 0; /* so current subseq is meaning less */
}
else
{
/* do nothing */
}
}
return MaxSum;
}
浙大《数据结构》学习&练习(一)算法初步的更多相关文章
- 算法设计和数据结构学习_5(BST&AVL&红黑树简单介绍)
前言: 节主要是给出BST,AVL和红黑树的C++代码,方便自己以后的查阅,其代码依旧是data structures and algorithm analysis in c++ (second ed ...
- 数据结构学习之字符串匹配算法(BF||KMP)
数据结构学习之字符串匹配算法(BF||KMP) 0x1 实验目的 通过实验深入了解字符串常用的匹配算法(BF暴力匹配.KMP.优化KMP算法)思想. 0x2 实验要求 编写出BF暴力匹配.KM ...
- 数据结构学习之栈求解n皇后问题
数据结构学习之栈求解n皇后问题 0x1 目的 深入掌握栈应用的算法和设计 0x2 内容 编写一个程序exp3-8.cpp求解n皇后问题. 0x3 问题描述 即在n×n的方格棋盘上,放置n个皇后 ...
- TensorFlow入门学习(让机器/算法帮助我们作出选择)
catalogue . 个人理解 . 基本使用 . MNIST(multiclass classification)入门 . 深入MNIST . 卷积神经网络:CIFAR- 数据集分类 . 单词的向量 ...
- 关于《数据结构》课本KMP算法的理解
数据结构课上讲的KMP算法和我在ACM中学习的KMP算法是有区别的,这里我对课本上的KMP算法给出我的一些想法. 原理和之前的KMP是一样的https://www.cnblogs.com/wkfvaw ...
- 特征点检测学习_2(surf算法)
依旧转载自作者:tornadomeet 出处:http://www.cnblogs.com/tornadomeet 特征点检测学习_2(surf算法) 在上篇博客特征点检测学习_1(sift算法) 中 ...
- 模式匹配之surf----特征点检测学习_2(surf算法)
在上篇博客特征点检测学习_1(sift算法) 中简单介绍了经典的sift算法,sift算法比较稳定,检测到的特征点也比较多,其最大的确定是计算复杂度较高.后面有不少学者对其进行了改进,其中比较出名的就 ...
- Scratch编程与高中数学算法初步
scratch编程与高中数学算法初步 一提到编程,大家可能觉得晦涩难懂,没有一定的英语和数学思维基础的人,一大串的编程代码让人望而步,何况是中小学生. Scratch是一款由麻省理工学院(MIT) ...
- 【算法与数据结构专场】BitMap算法基本操作代码实现
上篇我们讲了BitMap是如何对数据进行存储的,没看过的可以看一下[算法与数据结构专场]BitMap算法介绍 这篇我们来讲一下BitMap这个数据结构的代码实现. 回顾下数据的存储原理 一个二进制位对 ...
- 集成学习值Adaboost算法原理和代码小结(转载)
在集成学习原理小结中,我们讲到了集成学习按照个体学习器之间是否存在依赖关系可以分为两类: 第一个是个体学习器之间存在强依赖关系: 另一类是个体学习器之间不存在强依赖关系. 前者的代表算法就是提升(bo ...
随机推荐
- Selenium 如何复用浏览器【解决扫码登录等问题】
Selenium中复用已经打开的浏览器进行自动化测试,可以辅助我们解决某些登录需要扫二维码之后,才能进行的操作 目前只支持谷歌Chrome浏览器,那需要做哪些准备操作呢?往下看 1.windows和M ...
- MonoBehaviour生命周期与对象数据池应用
预热游戏对象: tempObject = Instantiate(cubePrefab) as GameObject ; tempObject .SetActive( false ); 游戏对象tem ...
- 数据库系统第六章【关系数据理论】(B站视频)
目录 数据库系统第六章[关系数据理论](B站视频) 一.前言 二.规范化 函数依赖 三种分类 如何确定函数依赖? 平凡函数依赖vs非平凡函数依赖 完全函数依赖vs部分函数依赖 传递函数依赖 码 超码 ...
- php中无参函数的RCE
学习一下php中无符号的问题. 1.无参数 <?php if(';' === preg_replace('/[^\W]+\((?R)?\)/', '', $_GET['code'])) { ev ...
- 部署一套完整的Kubernetes高可用集群(二进制,最新版v1.18)下
七.高可用架构(扩容多Master架构) Kubernetes作为容器集群系统,通过健康检查+重启策略实现了Pod故障自我修复能力,通过调度算法实现将Pod分布式部署,并保持预期副本数,根据Node失 ...
- pycharm可以运行但无法debug的解决方法
错误信息:pydev debugger: process 4588 is connecting 如果您尝试了网上的很多方法如防火墙设置,去掉 ".idea"文件,甚至重装pycha ...
- 在MyBatis中采用模糊查询变量的引用标志应当是$而不是#
具体如下例: @Select("select count(*) from hy_stock where name like '%${keyword}%' or code like '%${k ...
- 上传文件到服务器指定位置 & 从服务器指定位置下载文件
需要的jar包: 去maven仓库自己搜索com.jcraft下载jar包 <dependency> <groupId>com.jcraft</groupId> & ...
- 原生JDK网络编程- Buffer
Buffer用于和NIO通道进行交互.数据是从通道读入缓冲区,从缓冲区写入到通道中的.以写为例,应用程序都是将数据写入缓冲,再通过通道把缓冲的数据发送出去,读也是一样,数据总是先从通道读到缓冲,应用程 ...
- 电子邮箱有哪些隐藏技能,读懂了效率提升N倍!
很多人将邮箱作为常见的通讯工具,然而,大部分职场人只了解其五分之一的功能.电子邮箱还有很多隐藏技能,身为商务精英的你,必须往下看看哦!今天跟随TOM邮箱小编导,来挖掘下邮箱的潜藏技能吧~ 作为经常外出 ...