(开头是一些废话啊,最近感觉学习状态不太好,上高数的时候左耳听进去右耳就出来了,有点跟不上,可能是没吃饭的原因,也可能是最近强度有点大了,下午上完课就给自己休息了一下,结果刷手机全是关于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. 10分钟搞定简易MVVM

    实现一个简易的 MVVM 分为这么几步来 1.类 Vue:这个类接收的是一个 options. el属性:根元素的id data属性:双向绑定的数据. 2.Dep 类: subNode数组:存放所依赖 ...

  2. python requests 最牛攻略

    目录 安装 Reuqests HTTP 简介 什么是 HTTP HTTP工作原理 HTTP的9种请求方法 HTTP状态码 requests 快速上手 requests 发起请求的步骤 requests ...

  3. HGAME_2023_WEB_WP_WEEK3

    Ping to the host 很明显的rce,简单测试一下发现空格,cat,:被办,且执行无回显,空格用${IFS},%09,$IFS$9等等来绕过,我们利用dnslog将执行结果外带出来,这里使 ...

  4. Invade the Mars

    题目 网上大把 分析 显然不能简单直接最短路 城市被攻占的特点是:保护的城市都被攻占了 那么这个城市被攻占的最早时间必然是所有保护他的城市中最大的被攻占时间 于是我们可以 设 \(dis\) 表示军队 ...

  5. WHAT IS PPM Encoder ?

    About PPM Encoder The PPM encoder allows to encode up to 8 PWM (pulse width modulated) signals into ...

  6. vue-seamless-scroll滚动加点赞衔接处数据不同步问题

    VUE使用vue-seamless-scroll自动滚动加点赞,因为有两个overhidden导致点击不同同步dom,在代码中会出现两处vue-seamless-scroll上下悬接,悬接处点赞触发没 ...

  7. 探索 C 语言的指针

    指针的概念 指针代表一个变量的内存地址,通过&可以拿到变量的内存地址.变量不等于指针,通过*可以拿到指针所指向的变量的值. 在 C 中,存在指针变量,指针变量的声明格式:int* varNam ...

  8. Android:Activity

    什么是 Activity 简单来说 Activity 类似于一个 Web 的页面,表示拥有整个屏幕的界面.电子邮件应用可能有一个显示新电子邮件列表的 Activity.一个用于撰写电子邮件的 Acti ...

  9. Android Studio 模拟器(AVD)访问本机服务器

    问题说明 若安卓模拟器(AVD)调试安卓 App,访问本机上的 Tomcat 服务器时,很有可能会不成功,按照下面的步骤来一遍以尝试解决问题. 模拟器配置 DNS 服务器 (一)找到模拟器安装的位置 ...

  10. Apache HttpClient使用和源码分析

    在上文中分析了 HttpURLConnection的用法,功能还是比较简单的,没有什么封装 接下来看看Apache HttpClient是如何封装httpClient的 目录 组成 请求代码 代码分析 ...