小伙伴们,
unsw最终的不眠之夜马上就要到来了,
大家的头发还好嘛?
为了誓死保卫大家的分(头)(发)
DueApe特地请来了导师们
为大家奉上了一系列超棒定心丸!
  • quiz串讲
  • lab试题
  • practices
  • 历年期中期末
  • 考试原题倾情讲解...
期末秘籍
伙伴们,这次期末
赶紧抓住末班车的机会,
让大佬带你carry全场!!

今天,我们请到了超nice的导师Charlesunsw的小伙伴们带来了quiz 8的讲解。
先为大家放上讲解视频:
(高清版视频点文章末尾“阅读原文”观看)
下面就是老师倾情奉献的讲解笔记
赶快拿出小本本记下来吧~
quiz 8 讲解笔记
首先,我们先来看一下quiz8 的题目要求:
最终我们只需求取关注关于整型数字倍数和次幂的内容,并且所有polynomial是一元多项式,意思是只能有一个x未知数的多项式。
并且martin 只要求我们大家完成关于‘相加’和‘相乘’的操作,相当于给我们的工作量减少了一半。
Ok,那我们具体问题具体分析:
看到目标传入参数Polynomial('2x^3 + x - 4')的形式本质是字符串,所以我们首先要把我们需要的数据都提取出来。
提取方法大致分为三类:
切片法
对目标字符串'2x^3 + x - 4' 进行切片。对不同模板的’x’做不同的处理:a. nx^n类,我们就需要x前后的n倍数和对应n次幂,b x^n, n倍次幂类,c. nx 类,n倍数单次幂类。
模板法
针对切片当中提到的模板进行识别,直接提取对应位置的n数值(类似于处理assignment1当中人说话内容的模板)即可。
正则表达式过滤法
通过re模块,搞定对应的 数字匹配 r’\d+‘对应数字的多次操作,使用 ’-*‘来匹配对应负数0次或者1次出现的过滤。
这里推荐使用正则,虽然消耗内存严重,但对于一次作业还是小case了。
提取完成后,对于数值存储的方式来说,就又有以下三种类型的数据结构来进行存储:
数值存储方式
直接列表法
但凡使用到存储的地方都可以用列表,无论是单独式子的一项还是所有项保存的大的列表套列表,都是可以的。
优势:
a. 不用考虑结构逻辑,只要对应好位置和目标式子相互对应即可
b. 列表本身有序,对于martin要求的输出从大次幂向小次幂项排列具有天然的有序性。
字典+元组法
字典的数据类型是key:values对应的,所以非常适配于单项式中的倍数和次幂数的对应方法。
并且在add   方法中,我们并不需要改变次幂数,所以根据取出的数字本身我们可以写成 {次幂数:倍数} 的字典形式,在查找对应的相同次幂也非常实用,只需要对比字典的key值即可取到相应的倍数。
链表法
此题本身是一道经典的使用单链表实现的单项式操作的面试题目。我们可以根据但单链表的本身,完成对node节点的构造和初始化。
我们只需初始化node的两个values,对应self.exp1 = 次幂数,self.time = times ,每一个节点对应多项式中的一项,然后整体链接所有节点即可。
考虑好使用的数据结构后,我们需要针对题目实现对应的add    mul  改写钩子内部封包的函数完成对相应 a+b a+=b a*b a*=b 的操作,
这里其实我们之需要完成  add    mul  两个函数即可,Python的解释器会自动默认跳转实现 += 和*= 对应在add和 mul两个函数中。
对应加法的操作
第一种列表的数据结构只要找到对应的元素即可完成操作,原理完全相同。
我们着重说关于结构处理的第二和第三个方法:
在我们是使用{次幂数:倍数}时:
  • 循环遍历两个式子对应的字典,当存在相同的key值时,做对应values的相加操作。
  • 在没有相同的key时,说明列表对应的次幂不同,直接补充到列表中即可。
For a in dict1:
        If a in dict2:
  Dict1[a] = dict1[a] + dict2[a]
        Else:
               Dict1[a] = dict2[a]
相同的如果是链表操作:
  • 相同时,列表中对用node.times = node1.times+node2.times
  • 不相同时,我们比较链表a中的当前mode.exp1的值,在链表b中的位置,进行insert() 对节点进行插入即可。
对应乘法的操作
我们对应乘法时,只要在完成了加法操作后,你肯定已经熟悉了我们说过的数据结构的所有问题。
假设:
式1:x^3+2x+1
式2:2x+2
我们即可遍历式1中的每一个单项式,与式2做乘法操作,x^3*(2x+2)可得到2x^4+2x^3,我们可以发现,他的原理依然简单即:次幂项相加,倍数相乘,形成新的元组即可。
最终我们重新遍历一下,使用sorted()方法,默认设置reverse= True按照从大到小排列即可。
最后,如果你不想写两遍相同的输出形式,你可以去改写repr    内部封装函数,来控制polynomial类的输出。
上面笔记的全部内容了
另外对于COMP9021的所有知识点
老师还贴心的为大家总结到了PDF文档中
想要的小伙伴们后台回复“9021”即可领取哦~
好啦,以上就是今天的全部内容啦

小伙伴们记得记笔记哦
考试加油!
考试加油!!
考试加油!!!
DueApe新课速递
重新定义海外中段教育
我们是以技术为驱动的海外教育互联网企业
我们聚焦CS/IT留学生课业辅导、求职就业
我们拥有领衔全球的大规模精英工程师社群
Make Your Education Under Control
我们重新定义海外中段教育
点一下你会更好看
继续阅读
阅读原文