(开头是一些废话啊,最近感觉学习状态不太好,上高数的时候左耳听进去右耳就出来了,有点跟不上,可能是没吃饭的原因,也可能是最近强度有点大了,下午上完课就给自己休息了一下,结果刷手机全是关于AI的内容,谢谢你,大数据。躺了两个小时感觉状态也不是太好。)

我在网上购买了有关算法的书,通过阅读的方式对网课所学的内容进行回忆和补充



看完书之后我才发现李教授讲得真的是太好了,简洁明了,由于书和网课的进度并不统一,我打算把它们分成两个模块来记笔记,同时也为我的AI再开一个模块。

由于状态不对劲,今晚不一定会更博客,而已要研究的东西也挺多的,写一半先发了吧。

============================================================================================================

看书的收获

之前在李教授那边的网课上完有关时间复杂度的内容后,我依然不是很能想象出如果要我自己去优化一段代码,我要怎么优化。

我真的要把代码的时间复杂度算出来,然后去想怎么样可以让时间复杂度减少一个量级吗?

在看完书之后,我对如何优化代码有了新的理解,书上举了一个递归函数的例子:

long int
Fib( int N)
{//斐波那契数
if( N<=1 )//第一行
return 1;//第二行
else
return Fib( N - 1 ) + Fib( N - 2);//第三行(感觉写注释确实挺烦的)
}

这是一段执行效率非常低的代码,因为在第三行中第一次调用Fib( N - 1 )时实际已经计算过一次Fib( N - 2 )了(这个知道斐波那契数的人应该知道),但随后这个信息被抛弃,而在第二次调用这个函数时再计算了一次,被抛弃的信息量递归地合成起来并导致巨大的运行时间(看到这里思维真的被打开了,书上不断强调说用得好的递归很厉害,但我还没看见例子)。

可以通过保留一个简单的数组并使用一个for循环来减少运行时间(不是很能理解,晚自习试试看)

书上的例子提醒了我,减少运行时间的最好的方式就是去掉冗余,充分利用每一次计算得到的数据,在往后设计代码时,我也会尝试将每一步得到的数据都尝试加以利用,在后续分析如何优化时,我也可以这样做。

接着还有一个我不是很能理解的例子:

int Max( const int A[],int N)
{
int ThisSum,MaxSum,i,j,k; MaxSum = 0;//第一行
for( i = 0; i < N; i++ )//第二行
for( j = i; j < N; j++ )//第三行
{
ThisSum = 0;//第四行
for( k = i; k <= j; k++ )//第五行
ThisSum += A[k];//第六行 if( ThisSum > MaxSum )//第七行
MaxSum = ThisSum;//第八行
}
return MaxSum;//第九行
}

然后就是这一大串东西了



接着针对第五第六行进行优化:

int Max( const int A[],int N)
{
int ThisSum,MaxSum,i,j,k; MaxSum = 0;//第一行
for( i = 0; i < N; i++ )//第二行
{
ThisSum = 0;//第三行
for( j = i; j < N; j++ )//第四行
{
ThisSum += A[j];//第五行 if( ThisSum > MaxSum )//第六行
MaxSum = ThisSum;//第七行
}
}
return MaxSum;//第八行
}

其实在第五第六行中,已经产生了变量J,而每一次循环中J的值都是我们需要的值,然而原先的算法却额外产生了一个与j的数值一样的K来给A赋值,这就产生了冗余。

网课

有关线性表的函数:

初始化线性表:InitList(&L):构建一个空的线性表L。

销毁线性表:DestoryList(&L):销毁线性表L占用的内存空间。(和内存有关的都要加&吗?)

判断线性表是否为空表:ListEmpty(L):若L为空表,则返回1,否则返回0.

求线性表的长度:ListLength(l):返回L中元素个数n。

输出线性表DispList(L):线性表L不为空时,顺序显示L中各节点的值域。

求线性表L中指定位置(i)的某个数据元素GetElem(L,i,&e):用e返回L中第i(1<=i<=n)个元素的值(简单来说就是把i保存在e中。)

定位查找LocateElem(L,e):返回L中第一个值域与e相等的逻辑位序。若这样的元素不存在则返回值为0.(如果与e相等的值在L中的第一个,返回值是多少?)

插入一个数据元素ListInsert(&L,i,e):在L的第i(1<=i<=n)个元素之前插入新的元素e,L的长度增1.

删除数据元素ListDelete(&L,i,&e):删除L的第i个元素,并用e返回其值,L的长度减一。

AI(挺重要的,可以看一下吗)

由于我当上了三班的宣传委员,我想着也不能吃白饭,就让我的AI做了一张海报的背景图试试,第一张是原图,第二张是效果:





这个背景图启发了我,原先我一直在想,就算AI给我图再怎么好看,我也只是会了一个工具而已,对我本身的能力没有什么提升,但现在不一样了,学会一张海报如何做得好看,把各种各样的图片组成在一起,这不仅是我个人能力的体现,更是我想追求的人的艺术。

3月1日至3月2日——数据结构与算法分析阅读笔记,线性表,AI。的更多相关文章

  1. 【¥200代金券、iPad等您来拿】 阿里云9大产品免费公测#10月9日-11月6日#

    #10.09-11.06#200元代金券.iPad大奖, 9大产品评测活动! 亲爱的阿里云小伙伴们: 云产品的多样性(更多的云产品)也是让用户深度使用云计算的关键.今年阿里云产品线越来越丰富,小云搜罗 ...

  2. 一条SQL语句中算日销售额和月销售额

    刚刚做项目的时候用到的 用户表:用户ID,用户名,余额 流水表:时间,用户ID,用户名,类型(0充值,1消费),变更金额 现在要查每个用户的日销售额和月销售额,本来最简单的方法是先把所有用户查出来,然 ...

  3. 本周MySQL官方verified/open的bug列表(11月15日至11月21日)

    本周MySQL verified的bug列表(11月15日至11月21日) 1. Bug #70923    Replication failure on multi-statement INSERT ...

  4. 本周MySQL官方verified/open的bug列表(11月8日至11月14日)

    本周MySQL verified的bug列表(11月8日至11月14日) 1. Bug #70859-DWITH_EXAMPLE_STORAGE_ENGINE=1 is ignored     URL ...

  5. 本周MySQL官方verified的bug列表(11月1日至11月7日)

    本周MySQL verified的bug列表(11月1日至11月7日) 1.Bug #70839JSON_VALID allows to have two elements with the same ...

  6. 武汉Uber优步司机奖励政策(12月28日到1月3日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  7. 青岛Uber优步司机奖励政策(12月28日到1月3日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  8. 南京Uber优步司机奖励政策(12月28日到1月3日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  9. 南京Uber优步司机奖励政策(12月14日到12月20日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  10. 长沙Uber司机奖励政策(8月24日到8月30日)

    本周奖励(8月24日到8月30日) 滴滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://w ...

随机推荐

  1. P23_列表渲染

    列表渲染 wx:for 通过 wx:for 可以根据指定的数组,循环渲染重复的组件结构,语法示例如下: 默认情况下,当前循环项的索引用 index 表示:当前循环项用 item 表示. 手动指定索引和 ...

  2. STM32F4库函数初始化系列:DMA串口接收

    1 void _UART2_Configuration(void) 2 { 3 USART_InitTypeDef USART_InitStructure; 4 5 USART_OverSamplin ...

  3. 【eslint 插件开发】禁用 location 跳转外部链接

    背景 公司 h5 项目需要为跳转的外部链接统一增加参数.举个例子,假设有如下代码: location.href = 'https://www.test.com/a?id=xxx' location.r ...

  4. 大规模 IoT 边缘容器集群管理的几种架构-0-边缘容器及架构简介

    ️Reference: IoT 边缘计算系列文章 什么是边缘容器? 边缘容器的概念 边缘容器是分散的计算资源,尽可能靠近最终用户或设备,以减少延迟.节省带宽并增强整体数字体验. 可以访问互联网的设备数 ...

  5. 【Raspberry Pi / 树莓派】小小工控机担起大大责任

    CM4 Nano是一款基于Raspberry Pi / 树莓派 Compute Module 4(简称CM4),由EDATEC面向工业应用设计的嵌入式计算机, 充分利用CM4在结构上灵活性解决CPU, ...

  6. 列表(list)内置方法补充、字典(dict)内置方法、元组(tuple)内置方法、集合(set)内置方法

    目录 一.列表(list)内置方法补充 二.字典(dict)内置方法 三.元组(tuple)内置方法 四.集合(set)内置方法 一.列表(list)内置方法补充 # reverse()颠倒列表内元素 ...

  7. Typescript 回调函数、事件侦听的类型定义与注释--拾人牙慧

    实际项目中会运到的 Typescript 回调函数.事件侦听的类型定义,如果刚碰到会一脸蒙真的,我就是 这是第一次我自己对 Typescript 记录学习,所以得先说一下我与 Typescript 的 ...

  8. 通过Rsync实现文件远程备份

    转载:博客园 https://www.cnblogs.com/huligong1234/p/13513395.html

  9. IP 地址分类及子网划分

    IP 地址分类 在现实生活中,一个市区有许多的区,区下面又有很多的街道,街道下面又有很多的小区,A 市区.B 市区就是一个范围,每一个范围都有不同的居民数量.类比到计算机网络,A 类地址可以容纳256 ...

  10. Java语言输出菱形图型

    package fuxi;public class Diamond {    public static void main(String[] args) {        printHollowRh ...