DSA 提問與解答 (回應)
 Share
The version of the browser you are using is no longer supported. Please upgrade to a supported browser.Dismiss

 
View only
 
 
ABCDEFGHIJKL
1
時間戳記學號 StudentID姓名 Name日期 Date課堂提問的內容及老師的回覆FB問題與提供的解答
2
2018/2/27 下午 5:57:58B06902119張原豪2018/2/27Q:下禮拜考試會用到C++嗎?
A:下次考試只會有觀念性的問題,還不會要寫code
3
2018/2/27 下午 6:11:06b06902021吳聖福2018/2/27回答「為何要學C?」:「C較C++更為基礎」
4
2018/2/27 下午 7:14:45b03501045陳志源2018/2/27用C和C++的不同,我答C比較快
5
2018/3/5 上午 12:12:24B06902115袁才育2018/2/27Q:下一次考試會需要用到C++嗎?
A:不會,只有用到一些基本的觀念而已
6
2018/3/6 下午 2:52:01b04209032劉安齊2018/3/6回答 Linux 查看 cpu 和記憶體的方法https://www.facebook.com/groups/1563759110611710/permalink/2018632105124406/
7
2018/3/6 下午 3:06:28B06902063吳綺緯2018/3/6Q:為什麼fix shallow copy 要避免 a=a的狀況?會發生什麼問題?A:防呆 避免不必要的動作
8
2018/3/6 下午 3:59:40b04209032劉安齊2018/3/6struct 和 class 的差異「回答 struct 和 class 剛剛的回答都是錯的 詳細見 http://slashlook.com/articles_20170328.html」
9
2018/3/6 下午 4:01:28r06921095吳睿哲2018/3/6Q:complier 章節中 bat檔的寫法可以講詳細一點嗎?
A:帶入的參數與路徑要設定正確
10
2018/3/6 下午 4:18:50B06902055林震2018/3/6myVec c = a;
c.data = new int[c.size];
Copy shallow問題可以這樣解決嗎?
11
2018/3/6 下午 4:50:31B06902111林慶珠2018/3/6為什麼要用new allocate記憶體 跟普通宣告有何不同
new是dynamic宣告 可在程式執行宣告
普通宣告存在stack區 new在heap
12
2018/3/6 下午 4:51:06r05723067郭建國2018/3/6Q:分身的英文及介紹
學生回答:A:pass by reference https://openhome.cc/Gossip/CppGossip/PassBy.html
13
2018/3/6 下午 4:56:05R05522829夏蜃詰2018/3/6void memleak() { int *data = new int; *data = 15; } 如投影片說的程式中,若沒有歸還記憶體的話,跳出函式後指標變數會消失,而記憶體還是被占用?
老師回答:在沒有結束函式,基本上都會被占用
14
2018/3/6 下午 4:57:03b04408037劉昕2018/3/6Q:默認的copy constructor要去哪裡找?如果我不知道底層長怎樣,那我怎麼知道要怎麼重新定義?死背?A:要看你的意圖
15
2018/3/6 下午 4:58:00b03501045陳志源2018/3/5struct和class的差別上台回答說class的member data default設定是private
16
2018/3/6 下午 5:33:48B06902113柯柏丞2018/3/6Q(slido): homework 0其中提到的eror的定義不太了解
A(Pro): 反矩陣中包含大量浮點數 運算時難免會產生誤差
17
2018/3/6 下午 5:35:47B06902113柯柏丞2018/3/6Q(slido): public在C語言中有沒有對應的語法?它的實際用途是甚麼?
A(Pro): 一般class時裡面的資料預設為private 設為public是為了讓資料可以隨意更改
18
2018/3/6 下午 7:26:39b05202043呂佳軒2018/3/6回答怎麼把檔案傳到工作站
(slido)
可以在本機直接用scp把檔案拷貝到工作站上 scp filename username@linux1.csie.ntu.edu.tw:~
19
2018/3/6 下午 8:39:05b04201020林建銘2018/3/6問題:myVec& myVec ::operator=(const myVec& v){...return *this}定義=時為什麼要以myVec為首而不是void?
同學回答:這樣就能 一次讓 a = b = c (b=c; a=b)。
20
2018/3/6 下午 8:54:36B06902042劉愷為2018/3/6Q:請問delete時,是只有把這個變數要求的記憶體清空還是把整個變數的存在都清空?
A:清空記憶體而已
21
2018/3/6 下午 9:14:23b06902049林首志2018/3/6在slido上發問「c++中 struct和class的主要差別是什麼」。老師讓同學回答:struct預設是public,class預設是private。後來其他同學補充說,兩者都可特別指定是public還是private,但後來又有同學反駁說他們都是錯的,並給出一個網站http://slashlook.com/articles_20170328.html,後來又有人反駁說那個網址說的是C#,上個人講的才是對的。後來還有人補充繼承方式的資料:https://hatsukiakio.blogspot.tw/2009/05/cclassstruct.html。
22
2018/3/7 上午 3:03:06b05502063許定為2018/3/6於slido提問:關於string不會有share memory的問題,請老師詳細說明,以及是否有其他類型也是一樣不會有問題
老師回答:可以多試試看!
23
2018/3/7 上午 3:04:22b05502063許定為2018/3/6於slido發問:關於double deletion會造成的現象不是很了解
老師回答:直接開了個範例給我們了解
24
2018/3/7 下午 3:11:41b01303095楊雅晴2018/3/6Q: 請問 delete [] data; 這一句要怎麼分析?可以詳細講一下 []是指什麼嗎? data是哪裡傳進來的?
老師讓同學回答:
不加[]的話會像是一般刪除
不同的compiler可能造成不同的結果
有可能只刪第一個元素造成後面的free不掉 or 錯誤
25
2018/3/7 下午 8:55:00b06902001陳義榮2018/3/6有人在slido提問myVec如果不寫解構子是不是就不會有double deletion的問題。
我(andy)回答這樣就不會double free了,這樣一次free都沒有,因為你沒寫解子,所以連第一個都不會delete到。
26
2018/3/7 下午 8:57:28b06902001陳義榮2018/3/6有人分享在LInux查看CPU、記憶體的方法,我分享在terminal裡輸入`gnome-system-monitor &`的方法
27
2018/3/8 上午 11:04:40r06944025陳品君2018/3/5&'的使用時機。老師稍微講解,並請有志之士去fb社團整理發文
28
2018/3/10 下午 11:20:13b06902001陳義榮2018/3/7[問題]請問homework1裡的copy constructor 跟 assignment constructor
是要連他的address一起複製,還是只要他的value就好呢?
[解答]應該要另外開一塊記憶體,然後把值一個個放進去,如果連address都複製的話,你新開的空間就丟失了喔
29
2018/3/11 下午 8:08:30b06902117高聖傑2018/3/5回答老師在影片中提出bad_alloc在Linux環境下exception handling的問題
30
2018/3/11 下午 8:11:26b06902117高聖傑2018/3/6在課堂中回答同學提出 "delete [] data" 的問題
31
2018/3/11 下午 8:14:51b06902117高聖傑2018/3/6我問:請問使用reference是否能解決shallow copy的問題?老師答:這個我也不清楚,最快的方法就是你回去馬上寫個程式碼測試看看就知道了。
32
2018/3/13 下午 2:12:43b03303032劉祐瑄2018/3/6Q: Double delete的原因和時間點 A: 因為兩個pointer指到同地方,第一次刪除後該地方就沒有東西了,時間點在跳出該scope時
33
2018/3/13 下午 3:07:37b05203047徐衍新2018/3/13T: QuickSort 是 stable sort 嗎? 答: 不是
34
2018/3/13 下午 3:25:27r05723016劉冠廷2018/3/13Q : int binarySearch 裡有提到 overflow risk,老師在影片裡說"可能會爆掉"跟"正的有時候會變成負的",可以請老師提供一個例子嗎,我有點不懂
A : overflow 表示 "超過表示範圍",一旦超過,即可能跑出負值ˇ
35
2018/3/13 下午 3:53:08b06902043林立珩2018/3/13Q:為何函式傳入二維陣列須提供行數? A:因為電腦以一維記憶體儲存二維陣列,若不提供行數則無法得知多少單位為一個列
36
2018/3/13 下午 3:53:28B06902059謝宜儒2018/3/13Q:還是不太懂為什麼投影片中宣告2D array時要用兩個米字(int** M)
A:因為M是指到一個陣列的“指標” 而這個陣列裡的每個元素又分別是一個“指標” 分別指向一個int的一維陣列(也就是2d陣列裡面的一個row) 所以M是一個雙層指標 要用2個*來宣告
37
2018/3/13 下午 3:54:15B06902059謝宜儒2018/3/13Q:int array[ ] [col] 為什麼只要[ ]內只有col要標出來?
A:因為二維陣列的記憶體是連續的 必須提供col才知道每個row要斷在哪裡
38
2018/3/13 下午 3:55:32r05723016劉冠廷2018/3/13Q : int array[ ] [col] 為什麼[ ]內只有col要標出來?
A : 之所以col得標出來,是因為要讓電腦知道要跳掉幾格才會跑到下一個row
39
2018/3/13 下午 3:59:31B06902125黃柏瑋2018/3/13Q:在建立generic linked list用的<typename E>是什麼用的 A:這樣就可以不受型態的限制
40
2018/3/13 下午 4:01:32B06902125黃柏瑋2018/3/13Q:為什麼投影片裡面宣告2D array要用兩個米字號 A:因為那是pointer to pointer
41
2018/3/13 下午 4:07:39b03202027許芝瑜2018/3/13int rowSum(int array[][COL])為什麼要寫()內要寫成那樣?答:每個row是存在一起的,要寫[COL]是因為要跳到下一個row要跳COL個
42
2018/3/13 下午 4:08:03b03501042陳彥愷2018/3/13我的Q:想要知道 .sh檔 與 makefile 之間的差別?
老師A:makefile與.sh檔完全不同的東西,makefile是統合檔案compile,.sh檔則是把要執行的指令一列列列出來執行
43
2018/3/13 下午 4:11:03b06902063吳綺緯2018/3/13Q:還是不太懂為什麼投影片中宣告2D array時要用兩個米字(int** M) A:因為她是先宣告一個n陣列,每個元素只到另外一個陣列的頭(可以看他的圖示)所以是指到指標的指標,所以需要**
44
2018/3/13 下午 4:12:18b03202027許芝瑜2018/3/132D array的第二章投影片,為什麼int** M要有兩個**?是因為M是二維嗎?答:因為先宣告一個n維陣列,每個元素只到另一個陣列的頭,所以是指到指標的指標,因此有**
45
2018/3/13 下午 4:17:17B06902055林震2018/3/13只要是複雜度logn的搜尋方式都能稱作binary search嗎?
老師:不是,在map章節會有更詳細的介紹
46
2018/3/13 下午 4:35:48r05723016劉冠廷2018/3/13Q : 請問在new的時候為什麼不是寫 *data = new int[5]?
A : data為一pointer,其指向一個長度為5的向量
47
2018/3/13 下午 4:36:34B06902042劉愷為2018/3/13Unary and Binary Operator 分別是甚麼阿 可以解釋一下嗎 ?
A: 兩個矩陣的加減乘除屬於Binary 單一一個矩陣的運算為Unary
48
2018/3/13 下午 4:37:21b05611033杜杰翰2018/3/13Q:作業的測資好像有問題,看自己的code對他隨機生成的matrix做運算過程都正確,但是最後結果卻跟測資不一樣,懷疑是他生成random matrix的時候就不一樣了

A:我在unix上面測試結果是沒錯。如果沒設random seed的話每次產生的random數值會一樣,有可能在不同平台上產生的random數列會有不同結果。
49
2018/3/13 下午 4:47:57b06902119張原豪2018/3/13(Slido)
Q: 2D array的第二章投影片,為什麼int** M要有兩個**?是因為M是二維嗎?
A: 因為M裡存的是指到指標的指標
50
2018/3/13 下午 4:48:50b04502090林柏佑2018/3/13Q:作業會有部分給分嗎
A:再跟助教討論
51
2018/3/13 下午 4:49:38b06902119張原豪2018/3/13(Slido)
Q: insert sort function裡面的參數為什麼要用 *char A 不是 *int A?
A: int 佔 4 byte, 但char 只佔 1 byte, 用char 會比較省記憶體
52
2018/3/13 下午 4:51:15b03502030郭權2018/3/13Q:
Recursive 跟 Iterative 具體上的差異在哪,投影片只有簡略帶過,特別是在debug時差異在哪
A:
自己呼叫自己叫做Recursive、不會呼叫自己Iterative。Recursive會呼叫很多次自己,有問題時會不知道是在哪一層出錯
53
2018/3/13 下午 5:53:35b06901073羅韻瑢2018/3/13slido 問: 為甚麼(left+right)/2會overflow
同學老師都有回答: 當left + right 值太大時會overflow
slido幫同學回答
同學問題: 為甚麼binary search 不會掉入無窮迴圈? left不是本來就< right?
回答: 每次重新執行binary search 如果往右 left =mid +1,往左 right = mid -1
54
2018/3/13 下午 7:04:16d06944017徐偉盛2018/3/13(Slido)
Q: 可以解釋“Why do we need to specify the column size?”嗎?
A: 剛才已經講過了,因為這樣才知道記憶體連續大小
55
2018/3/13 下午 7:05:08d06944017徐偉盛2018/3/13(Slido)
Q: compiler optimization options: -O0, -O2, -O3, , -Ofast的差異為何?
A: 請自行上網查解
56
2018/3/13 下午 7:29:36b03204032李彥均2018/3/13Q:quicksort不是O(N^2)嗎? A:worst case O(N^2) average case O(nlogn)
57
2018/3/13 下午 8:34:32R06944061張以希2018/3/13Can we say binary search is better than linear search due to better asymptotic complexity? Yes, complexity之後會講。
58
2018/3/13 下午 9:24:45B06902113柯柏丞2018/3/13Q(slido): 投影片中宣告二維陣列的方式和直接用的int M[n][m]的差別在哪呢?
A(Pro): 前者為動態分配可分段的記憶體 後者則需要連續的記憶體空間
59
2018/3/14 上午 11:28:46B06902001陳義榮2018/3/13老師問recursive function有什麼缺點,我回答不好debug
60
2018/3/14 下午 4:09:48b03608037邱佳禾2018/3/13slido的問題:為什麼mid=(left+right)/2會有overflow risk? 我的回答:如果陣列太大,left+right超過int所能表示的上限就會變負數
61
2018/3/16 上午 9:41:44b06902123黃柏升2018/3/12在助教課提問,關於C++ "this" 的使用 ,以及operator[]的含意
this 可以省略,在作業中的函數。
operator[] 是回傳array[],是一個pointer,然後再加上一個[]就能取值,使得matrix[ i ][ j ] 這樣的寫法為正確
62
2018/3/16 下午 11:14:46b05501090羅昱恆2018/3/16
Q: 「請問一下作業一有人也是用高斯消去法來做反矩陣的嗎? 我測公開測資沒問題 ,也有把列跟列互換的情況寫好,例如[0 0 1 0 0;0 0 0 0 1;0 0 0 1 0;1 0 0 0 0;0 1 0 0 0]
也測過這種矩陣猜看看是不是overflow [0.001 0 30000000 400 3;.... ] 結果都跟matlab算得一樣 ,能否求救有誰碰到這種wrong answer解決掉的嗎?這筆測資可能問題出在哪呢?」

A: 「我也是用高斯消去法 過了
不過根據runTest.sh Subtask6會不會其實是乘法運算啊」
63
2018/3/17 上午 11:22:39b04207026林佛慧2018/3/13Q:hw1 的inverse 最多會到多少個? A: 小於500
64
2018/3/17 上午 11:28:42b04207026林佛慧2018/3/15
Q: 請問一下作業1裡面的matrix.h中,我們把assignment operator重新定義的函式宣告為
Matrix Matrix:: operator=(const Matrix& rhs)
然而若依照第一周shallow copy的ppt裡面第三頁的寫法寫成
Matrix& Matrix:: operator=(const Matrix& rhs)
(多一個&)
兩者都可行嗎?差別在哪?
這又延伸出另個問題:
上面的兩種寫法最後return的都會是*this嗎?(假設已經在先把*this指向想要的新matrix了)

A:「兩者應該都可以,有&的狀況,傳出時不需要複製;但沒有&的話,傳出時就要複製內容」「使用&的情況,不用另開記憶體去儲存你回傳出來的矩陣,而是直接取用位址,回傳出該位址的內容」
65
2018/3/19 下午 7:55:33b06902069許博翔2018/3/8Q:"&"有時候是表示位置,有時候是分身,會不會很容易搞混
A:原本設計就是這樣了,所以要多注意
66
2018/3/20 上午 1:50:30B05902099曾彬輝2018/3/13Q: What is the difference between a unary and binary operator?
A: Unary and act on one operand while binary operator can act on two operands
67
2018/3/20 下午 2:48:45b04209032劉安齊2018/3/20時間複雜度越低基本上就越好嗎?除了比較佔記憶體外有其他缺點嗎?比較耗費記憶體,也比較花時間。O(n^3)代表時間會是O(n)的三次方倍,例如8秒與2秒之差。此外記憶體看你有沒有GC(垃圾處理),有的話記憶體不一定會花比較多,是程式碼而定。
68
2018/3/20 下午 2:56:02b04209032劉安齊2018/3/20老師在錄影中提到 sorting 時都是去搬動資料的 pointer,不太理解這個意思,能麻煩老師舉簡單的例子嗎?謝謝資料儲存在記憶體,我們可以不用一直搬來搬去,pointer的意思是標籤,我們排序的時候處理,只要針對標籤做處理就好,真的要拿資料的時候,在用標籤找實際資料就好。就像是圖書館找書,都是先找書號,再去書櫃拿書。
69
2018/3/20 下午 3:32:08b03502121李宜修2018/3/20老師問費波那契數列的數學歸納法,我上去證明
70
2018/3/20 下午 3:34:59b03502121李宜修2018/3/15助教課詢問: ./runTest.sh 為什麼不能跑? 助教: 因為在我的系統runTest.sh 沒有x 不是執行檔 要用bash runTest.sh 來編譯
71
2018/3/20 下午 4:25:11b06902025李豈翔2018/3/13在slido上提問double* & 的作法,老師回答他也不清楚,會額外開一堂講習課。
72
2018/3/20 下午 4:26:00b06902025李豈翔2018/3/13老師問遞迴的好處,我回答作法上較迴圈為直觀
73
2018/3/20 下午 4:27:22b06902025李豈翔2018/3/13老師問stable sort是甚麼,我回答stable sort不會倒換原始順序,如果他們鍵值一樣
74
2018/3/20 下午 4:44:43b04408037劉昕2018/3/20Q:請問系統會在某些時候自動去呼叫我自己寫的 destructor 嗎?若不會,那我不寫是不是也沒關係?A:會呀,不寫會memory leak
75
2018/3/20 下午 4:44:49b04502090林柏佑2018/3/20在map003.cpp的範例中,不是很了解那個struct strCompare是如何運作的,不清楚為何最後排序會顛倒過來看一下程式碼,如果還有問題問小老師
76
2018/3/20 下午 4:47:59B06902055林震2018/3/20時間複雜度越低基本上就越好嗎?除了比較佔記憶體外有其他缺點嗎?
不同演算法不同的難度和時間複雜度,因此要視實際狀況調整。
77
2018/3/20 下午 4:50:25B05504006陳定毅2018/3/20Q:老師剛剛在歸納法的Inductive Hypothesis裡面假設了「n<=k都是對的」但實際上在歸納法裡面只會假設n=k是對的~~ A:維基百科其實有n<=k的做法~ 但是我個人認為去台上寫的只要假設n=k n=k+1都成立 也是可以的作法 反正只要條件有n=1 2都成立 可以想像有一台機器自動遞迴 自動證明完畢
78
2018/3/20 下午 4:51:15R06723061游博任2018/3/20如果unsorted的比較快 那為甚麼還需要sorted的 還是有其他限制?
79
2018/3/20 下午 5:31:55r06723041鄭晏奇2018/3/20Q.會不會碰到常數很大的情況,使得 O(n) 的時間複雜度反而比 O(n^2) 還大? 例如 n + 10000000000000 = O(n) A. 絕對會,因為 Big-Oh 是一個粗估的情況,分析之後若 O(n) 的複雜度真的很大就要考慮用 O(n^2)。 另外老師還提到若只是要排序 3 個數字,就直接用暴力法比一比就好,此時還用 merge sort, quick sort 反而不效率,雖然他們的複雜度比較低。
80
2018/3/20 下午 5:35:53r06723041鄭晏奇2018/3/20Q. 老師影片中提到真正在 sorting 時是搬動 pointer. 不太懂實際的情況是如何,老師可以舉得簡單的例子嗎?
A. 真正搬動資料會很不孝慮,可以想像今天有一整個 sheet 是公司員工資料,有名字、性別、職位 ...
這樣在 sorting 時如果搬動整個欄位就會很不孝慮,所以我們可以去搬動他們的 pointer ,這樣 sorting 完之後我們就可以看到第一個資料是什麼(經過排序完的 pointer.) 之後功課可能會遇到,可以去看一些 c++ documentation 的例子
81
2018/3/20 下午 5:40:55r06723041鄭晏奇2018/3/20Q. 還是不太懂為什麼 binary search 在 search 時的時間複雜度為什麼是 m * log(n) (m: lenth of keys, n: # of keys)
A. 要記得, Big-Oh 是 worst-case 計算的複雜度,所以我們是用最直觀、直接的方法去做 search。 所以 log(n) 是 binary search 字母的時間, m 是 keys 的長度,因此是 m log(n)
82
2018/3/20 下午 6:17:07R05522829夏蜃詰2018/3/20請問map<int,string>::interator 的interator是指標的一種嗎? 前面是定義它指向的型態嗎?
83
2018/3/20 下午 7:37:22b06502023許智翔2018/3/20Q:map01.cpp裡,i=gradeList.find("Jacobi");if(i==gradeList.end()){do something},如果Jacobi是最後一筆資料,那gradeList.end()不就會指到Jacobia嗎?
A:gradeList.end會指到最後一筆資料後面一格
84
2018/3/20 下午 7:39:53b06502023許智翔2018/3/20(回答同學)
同學:上網看了關於Template的應用但是還不太懂其主要作用是甚麼
我:假設要寫一個相加函式,int add(int x, int y),這樣只有輸入是int能使用,但如果用template寫成,template <class T> T add(T x, T y),這樣輸入別的變數型態也可以了。
85
2018/3/20 下午 10:08:03r05246007郭宣宏2018/3/19有去找蔡昀達助教的office hour
86
2018/3/20 下午 10:08:03b05505022吳維文2018/3/20演習課
87
2018/3/20 下午 10:08:03b04601019陳昱權2018/3/20演習課
88
2018/3/20 下午 10:08:03b03802019卓沛妤2018/3/20演習課
89
2018/3/20 下午 10:08:03b03202027許芷瑜2018/3/20演習課
90
2018/3/20 下午 10:08:03b05902025朱宥諺2018/3/20演習課
91
2018/3/20 下午 10:08:03d06944017徐偉盛2018/3/20演習課
92
2018/3/20 下午 10:08:03b03202005黃于瑄2018/3/20演習課
93
2018/3/20 下午 10:08:03b06902121陳翰生2018/3/20演習課
94
2018/3/20 下午 10:08:03b06902037吳柏成2018/3/20演習課
95
2018/3/20 下午 10:08:03b06902059謝宜儒2018/3/20演習課
96
2018/3/20 下午 10:08:03b06902047陳彥2018/3/20演習課
97
2018/3/20 下午 10:08:03b06902005尚宜樟2018/3/20演習課
98
2018/3/20 下午 10:08:03b05703001洪瑋廷2018/3/20演習課
99
2018/3/20 下午 10:08:03b05703100郭仲嘉2018/3/20演習課
100
2018/3/20 下午 10:08:03b06902039賈本晧2018/3/20演習課
Loading...
Main menu