查看: 37243| 回复: 71
跳转到指定楼层
上一主题 下一主题
收起左侧

[入门|算法|数据结构] 普林斯顿 算法课 (上)学习总结,附每周Project链接

   
全局:
公开课
学校名称: MOOC
Unit号: 6
开课时间: 2018-05-09
课程全名: Algorithms, Part I
平台: Coursera

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
课程链接:https://www.coursera.org/learn/algorithms-part1我的每周Project链接:https://github.com/Self-Learner-DD?tab=repositories

这是一门经典的数据结构与算法课,免费,分上下两部分,上部分内容包括Union-Find, basic data structures(Array, LinkedList, Queue, Stack, prioprity queue, symbol table...), sorting algorithms (selection sort, insertion sort, shell sort, quick sort, merge sort, heap sort), searching algorithms (Binary search tree, Red-Black BST, hashing), 所以程序都用java实现,代码风格简洁,很值得学习。

讲一下我上这门课的背景:
我自己的背景是纳米材料方向的博士,去年六月分考虑转行,本科上过的那点CS课程可以忽略了,之前的基础也就是上过introduction  to computer science and programming using python. 十月分的时候开始刷题,那时候在实习(非CS实习),每天只能刷一两道题,见到的题基本上都是不会的,所以找了这门课开始补一补算法和数据结构方面的基础。这门课的算法是用Java实现的,我那时只会python,所以本来想不学具体implementation,只学算法概念,然后再试着用python去实现,后来发现不行,不懂java语法,不做implementation理解起算法来很吃力,还记得第一章的作业是用Union Find去simulate Percolation threshold, 现在看起来比较routine,但当时看到的时候真是一脸懵逼。。。课程和作业的难度挺大的,特别是对我这样几乎零基础的人,不过内容真的很好,讲得很实用,而且作业是能够提交和被评测的,不会出现闷头做了也不知道对错的情况。我用了三个月(11/2017 - 02/2018)上完了课程的上部分,遇到不懂的Code就自己一行一行得跟着打一遍,还上了一点Berkeley的CS61B(也是一门经典的算法课程,比Princeton这门更基础一些,但是好像只有视频,没有公开课版本,所以作业不能被grade)学习Java语法,实在理解不了的就先放下继续往下看,写作业之前再复习下本章的内容,作业做不出来就去搜别人的答案,第一遍作业做到80分能提交就好,继续往后上,上到后面发现前面的内容就变得有点基础了,然后再回来二刷,把作业做到100,我自己的作业答案已经贴在前面了。

现在在陆陆续续得上第二部分,主要讲图和字符串相关的算法,有了这些基础之后,刷题会感觉好很多,很多题虽然还是不会做,但是理解答案不成问题了。现在Leet code我也陆续的刷到快400题了。

如果有跟我一样基础比较差的人,希望我的帖子能够鼓励到你,转行初期,刷题,上课,做project这些方方面面的东西会让人感觉overwhelming,我到现在题没有刷得很熟练,也没怎么做project,还是会感觉overwhelming,但是一步步来吧,慢慢坚持下来,再回过头去看,会发现自己已经迈出很大一步了。





评分

参与人数 22大米 +73 收起 理由
mangopassion + 1 给你点个赞!
elsawatson + 1 赞一个
yeehaah + 3 赞一个!
5919393 + 3 给你点个赞!
小当家123 + 1 很有用的信息!

查看全部评分


上一篇:CS61B学完还要学哪些东西才能找工作?
下一篇:普林斯顿算法课 第一部分

本帖被以下淘专辑推荐:

推荐
konve123 2018-5-26 17:44:30 | 只看该作者
全局:
最近剛跟完了演算法的上下部份
大概花了三個月的時間

這是我寫在長期加分帖的心得
希望分享給每個對這門課有興趣的同學
也歡迎一起討論
這是我作業:https://github.com/yhtsao/princeton-algs

1. 課程的基本信息:課程平台,開課學校,課程全名,開課時間,課程鏈接。
        課程平台:Coursera
        開課學校:Princeton University
        課程全名:Algorithms, Part I & II
        開課時間:一直都會開
        課程鏈接:Part I - https://www.coursera.org/learn/algorithms-part1/
                          Part II - https://www.coursera.org/learn/algorithms-part2/

2. 課程難度,作業量,每週花在這門課的時間,以及你的基礎(是初學者?還是本來就是你的專業內容?)
        我的背景:本科CS, 碩士CS, 以前已經在學校修過演算法相關課程,目前工作也是在寫JAVA
        課程難度:對本科生來說,不會太難
        花的時間:我花了大概三個月的時間把兩個部分上完,上跟下分別都拆成六週的課程,
                每週的視頻大概都是三到四個小時,前五週都會有作業,總共是10次作業,每次作業大概會花5-6小時完成
                如果認真一點,空閒時間不要打混,用平日晚上還有週末的時間,應該兩個月就夠了
               
3. 各種感想、收穫、課程內容介紹、你對這門課的評價等等~~這個就自己發揮啦(請具體!)
        這是我第一次跟的公開課,原本只想把第一部分跟完就好,後來還有點時間就繼續把第二部分也上完了。
        第一部分:Stack, Queue, Sorting, Symbol table, BST, Hash Table
        第二部分:Graph (DFS, BFS), MST, Shortest Path, Max Flow & Min Cut, String processing (Radix sort, trie, substring)

        因為本身是CS專業出身,對於大部分的演算法都是有點基礎的
        但我必須說這堂課最值得上的地方,就是老師在介紹每個演算法的時候,都會把前因後果說明得非常清楚
        假設為瞭解決A問題,一開始一定是用brute-force的解法,之後才介紹了B解法,
        但B解法有memory complexity的issue,為瞭解決這issue,又有了另一個C解法
        
        老師介紹每個演算法,都會在最後放上java sample code來佐證這個演算法,會讓人對這個演算法有更直覺的理解
        以前上課,大部分放上的都是pseudo code,就會比較沒感覺
        也會對於介紹演算法的各種應用,這部分也是我覺得很棒的地方
        因為以前學演算法都像是為了考試而理解它,學完還是不懂為什麼需要有這些算法的存在
        
        大部分的作業也都是讓你用課堂上的演算法去應用在現實情況,
        例如:他會讓你用graph去解決word net (每個詞彙跟另一個詞彙的關係)的問題,而不是實作graph
        
4. 如果讓你重新學過這門課,你會在學習方法上,背景提升上會有什麼樣的改進(選答)        
        我會先把課程講義看一遍再開始上課,會更容易跟上老師上課內容

5. 這門課和其他你跟過的課,用過的資源或者是學校上過的課有什麼區別?(選答,如果你還跟過其他類似的課的話)
        這門課用的課本不是聖經本(Introduction to Algorithm),而是用Algorithms, 4th Edition by Robert Sedgewick and Kevin Wayne
        以前上演算法課程有一段介紹divide and conquer 和 dynamic programing
        但這門公開課沒有特別針對這兩個概念去做說明

6. 給以後打算學這門課的同學一些建議(請具體!可包括任何方面)
        如果是CS專業的同學,但還不會寫JAVA,可以直接來上,裡面沒用到太難JAVA的語法,還算好懂
        如果不是CS專業的同學,建議先會寫一點JAVA再來跟這堂課,畢竟這堂課JAVA只是輔助,
        如果上這堂課花太多時間在理解JAVA code,就跟這堂課的目的背道而馳了
        
        視頻的部分,老師講話的語速很慢,所以理解上不會有太大問題,我都是開1.25x速在上課

        作業的部分,建議都是跟完當週視頻在開始寫,
        因為老師在課程介紹的演算法應用,通常會是當次作業的內容
        我寫作業的順序是看完spec之後,他還會有個checklist的網頁
        裡面都是一些以前被提問過的問題,已經相對應的回答,可以讓你避開一些雷
        還有一個區塊是Possible Progress Steps,會有一些實作的步驟讓你參考
        我大部分都是跟著他的progress steps去實作,會比較快上手

        如果滿分十分,我會給這門課十分
        真心推薦給每個對演算法有興趣的同學,或是對演算法感到疑惑的人

评分

参与人数 10大米 +17 收起 理由
生蚝来十个 + 1 给你点个赞!
jasonzhouu + 1 赞一个
fmusk + 1 赞一个
小当家123 + 1 很有用的信息!
NewRita + 3 很有用的信息!

查看全部评分

回复

使用道具 举报

推荐
Cosmos218 2018-5-20 23:05:42 | 只看该作者
全局:
CS61B的project可以做的,本地评测,还有gui,做的也很爽~感觉前部分的java语法讲得很好,熟悉语法后再上普林算法会更平缓。我当时不会java直接上普林算法痛苦死了
回复

使用道具 举报

推荐
AaronZhao 2018-5-11 07:31:44 | 只看该作者
全局:
给楼主点赞!我也正在学习算法,做了一个GitHub repo整理了一些笔记
https://github.com/aaronoah/algorithm-cracker

评分

参与人数 3大米 +18 收起 理由
Self_Learner + 3 给你点个赞!
沽名钓誉 + 10 给你点个赞!
billthefreeman + 5 笔记不错

查看全部评分

回复

使用道具 举报

🔗
YADDA 2018-5-10 21:30:45 | 只看该作者
全局:
好棒啊! 我也正在打算开始跟~ 向楼主学习
回复

使用道具 举报

🔗
yuanjing_sky 2018-5-10 21:36:03 | 只看该作者
全局:
楼主,你好厉害,真的很佩服
回复

使用道具 举报

🔗
千冬岁 2018-5-11 07:23:04 | 只看该作者
全局:
感谢!要努力学习!
回复

使用道具 举报

🔗
solv6868 2018-5-16 02:16:56 | 只看该作者
全局:
这门课如果完全变成0基础的话,可以看一下sedgewick大神的https://introcs.cs.princeton.edu/java/home/
回复

使用道具 举报

🔗
vera9243 2018-5-16 10:04:41 | 只看该作者
全局:
给楼主点赞,我也在上,关注
回复

使用道具 举报

全局:
楼主有没有活跃的讨论群呀
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表