公开课学习笔记-[哈佛]计算机科学CS50(三)

第7课函数、数组、字符串、搜索算法 -2011.10.25

举一个phishing的黑客例子,将某个HTML页面copy,只是修改某个链接,可将username和passwd传到另一个server。对于加密和解码,相同key容易受到攻击,例如caesor的rot13移位方式,可以增加key,例如每个位置的移位不同,https使用的是非对称加密方式,即公钥加密方式。有关隐私和安全,在CS105中介绍。

程序有三个方面考察:Correct,Design和Style。

接着继续讲了函数、数组、字符串,并对搜索,做了线性搜索和二进制搜索两种算法的介绍。

第8课GDB、递归,冒泡排序 -2011.10.26

GDB的使用:在gcc命令中加上-ggdb,可以在程序中设置断点执行gdbxxx<程序名>。命令breakmain,指定至某个函数的断点,break23,在23行设置断点。命令run为执行,并在断点处停止,可以断点到断点地运行,可以用continue来运行到下一个断点,continue98,在第99个断点停下(对循环很有帮助);可以用next来逐步执行,可以缩写为n;用printx(某个需要跟踪的参数),将参数的数值打印出来,用step进入function单步执行,进入函数后,可使用next来单行执行。用list来显示执行的代码。backtrace用来查看执行的位置。

介绍排序算法

  • bublesort:比较相邻两位,按大小排序,如学则交换,这样最大(或最小)将在正确的位置,并尽量排序相邻的两位,使之更有序,下次处理n--;最多为n(n-1)/2,最少为n,比下面的算法效率要高。
  • selctionsore:或者每次找到最大(或最小)将其放置在何时的位置,下次处理n--。每次处理都为n(n-1)/2,但交换次数少

上面的算法都是n×n级别的排序效率。当数码大时,消耗是巨大的。算法的效率,最后的算法是因logN收敛,在查找中可以实现,例如二分法。因此一开始有序,可以获取NlogN的效率。

  • Mergesort,归并算法,将数组分为两部分,分别进行排序,然后在将两部分进行合并。每个1/2的部分也可以用这种方式进行排序,时间复杂度为O(nlogn),空间复杂度为O(n)。可以通过递归方式实现,接着介绍递归recursion,要注意收敛。

相关链接:我的与编程思想相关的文章

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值