(开头是一些废话啊,最近感觉学习状态不太好,上高数的时候左耳听进去右耳就出来了,有点跟不上,可能是没吃饭的原因,也可能是最近强度有点大了,下午上完课就给自己休息了一下,结果刷手机全是关于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. 把 URL 中文和一堆百分号转换成字符串

    https://www.cnblogs.com/Enziandom/tag/Web%20%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91 JS 有解析这样的 URL 的函数,主 ...

  2. JSTL 报错 TagLibraryValidator

    今天想要在 JSP 页面上用 JSTL 简化操作,发现导入 jstl.standard 包报错了.我是按照菜鸟上的教程来的.我的 Tomcat 版本是 10.0,之后发现 10.0 版本的 Tomca ...

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

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

  4. Android 数据回显

    public class EchoDataUtils { /** * 保存文件到手机内存 * @param context * @param number * @param psw * @return ...

  5. 优秀PHP程序员技术成长之路

    按照了解的很多PHP/LNMP程序员的发展轨迹,结合个人经验体会,抽象出很多程序员对未来的迷漫,特别对技术学习的盲目和慌乱,简单梳理了这个每个阶段PHP程序员的技术要求,来帮助很多PHP程序做对照设定 ...

  6. 2、flex最后不对齐问题

    https://www.zhangxinxu.com/wordpress/2019/08/css-flex-last-align/

  7. win10bug可导致系统崩溃

    1.使用浏览器访问访问路径:\\.\globalroot\device\condrv\kernelconnect会立刻导致系统崩溃.会影响Windows10 1709及以上版本 2.使用以下代码保存成 ...

  8. Note Taking App Comparison: Notesnook vs Joplin

    I have used many note-taking apps, including Notion, oneNotes, Obsidian, Sublime Text, etc. Here I w ...

  9. linux系统过滤文件,并且通过时间对过滤的文件排序

    命令如下所示: find /home/deep/tf/20220601/study -name '*.h5' |xargs ls -lta

  10. random及循环

    题目:使用两种方式求2-20之间偶数的和,分别使用for和while 1.使用for解法: sum=0 for i in range(2,21,2): sum+=i print ("2-20 ...