--- tags: 112計概 --- # Lab10 & Hw10 & EZtra4 討論區 :::info 1. 發問前,請看是否已有人提出,也可以補充回答內容 2. 請按照格式進行發問 3. 為方便維護管理與其他人查詢,本討論區僅供討論**本次作業問題**,其他問題請至對應討論板 ::: 以下為範例 Q: 這是問題範例 > A: 這是回答範例 > [name=SUNGOD] [color=red] --- Q1: 10-2寫到,You can only modify the code in TO DO, and you cannot declare any additional variables or use functions.請問我在TO DO的範圍內多加幾行也是合法的嗎,只要不多宣告變數? > A: 也不能用function,然後盡量少行少字 > [name=SUNGOD] [color=red] Q2: 想確認一下10-1-4及10-1-6是指`qblebesort.c`是`bubblebesort.c`的2倍/1000倍嗎? > A: 好像是,喔對了1-4是指在"輸出行數"上是2倍;1-6是指在"執行時間"上是快1000倍 > [name=SUNGOD] [color=red] Q3:quick sort的worst case是O(n^2),而bubble sort一直都是O(n^2),想確認一下10-1-4及10-1-6是指`qblebesort.c`是`bubblebesort.c`的2倍/1000倍,還是`bubblebesort.c`是`qblebesort.c`2倍/1000倍? ![image](https://hackmd.io/_uploads/ry-MYvnBp.png) > A: 1-4 是指找到一筆測試資料,bubblebesort.c的行數是2n行,qblebesort.c是n行。 > 1-6 是指找到一筆測試資料,bubblebesort.c的執行秒數是m秒,qblebesort.c的執行秒數是m/1000秒。(英文好難) > [name=SUNGOD] [color=red] Q4:請問10-1-3要比較的 the sum of bubblebe string lengths 是指什麼呢? 會這樣問是因為兩個程式的output都是"bub\n"or"ble\n"or"be\n",不太清楚要比的字串長度是什麼。另外也確認一下這題的input必須要用10-1-2指定的lab10-1生成的test case嗎? > A: 字串長度是指除了\n以外的字元總和,例如bub就是3,bub\nbe\n就是5,就跟[EZtra 4](https://oj.cerana.tech/contest/6/problem/33)的定義一樣。(不過如果同學要連換行都算一個字元的話也OK)。 > [name=SUNGOD] [color=red] Q5: 請問`qblebesort.c`需要通過(AC)lab10-2嗎? > A: ~~你過的了喔?我沒辦法~~。但是理論上照著寫應該每個人的qblebesort.c效果會一樣(吧),因為cmp是指定的,而qsort是內建的。 > [name=SUNGOD] [color=red] Q6:同Q3問,因為我照spec給定的compare的程式碼寫,基本上bubblebe的行數都會遠大於qsort的行數。 > A: 同Q3回 > [name=SUNGOD] [color=red] Q7:請問10-1-3的測資有指定嗎?或是輸入任一筆測資然後比較兩個程式的總字數就可以呢? > A: 他跟10-1-2是連在一起的,所以你在10-1-3輸入的測資必須和之前交上E3的Lab 10-1產生的相同 > [name=SUNGOD] [color=red] Q8:請問10-1-x有規定n的最小值嗎? > A: n>0,整數 > [name=SUNGOD] [color=red] Q9:因為要求最後的pdf要包含test data和execution results,所以10-1-3是需要把100筆測資和幾萬頁的bubblebe都做成pdf嗎? > A: 作業交幾萬頁不正常吧,你再想想。result可以只截部分可以看得出整體結果的圖片,例如100筆測資就是Lab10-1繳交的code所以可以簡單描述一下策略和分布;輸出也可以自行統計一下。 > [name=SUNGOD] [color=red] Q10:學長我生成出來的hw10-1-3的結果有180Mb這樣是正常嗎? > A: 不正常,但是有可能。 > [name=SUNGOD] [color=red] Q11:所以bubblebesort.c是直接把lab10-2的程式改成while != NULL的就好對嗎? > A: 寫法很多,而且lab10-2改成多筆輸入的寫法也會AC,同學可以去驗證看看 > [name=SUNGOD] [color=red] Q12:請問hw10-1-4的行數有沒有包含最後的空白行?如bub\nbe\n這樣算2還是3行? > A: 不差那行,都行。 > [name=SUNGOD] [color=red] Q13:請問hw10-1-3的字數大概在哪個範圍?我做出來的.txt檔都超過10mb > A: 10mb~150mb都有機會,要看你們的大測資分布。 > 我這裡有一筆數字都偏大的: > ![image](https://hackmd.io/_uploads/SJMuoVy8a.png) > 跟偏小的: > ![image](https://hackmd.io/_uploads/Byz-241L6.png) > [name=SUNGOD] [color=red] Q14:請問hack md上 Hint: You can use “#ifdef” to submit code that accomplishes the above tasks at the same time 是麼意思呢?可以請助教示範要怎麼使用嗎?謝謝。 > A: 就是說因為HW有個要求是你繳交的bubblebesort.c code需要能通過Lab 10-2,但是可能在寫某些HW的時候有額外的紀錄參數會比較好表示輸出大小/執行時間,那使用在Lab 9教的ifdef 就可以比較方便的同時達成以上多項要求。 > ![image](https://hackmd.io/_uploads/ByNj9XeIa.png) > [name=SUNGOD] [color=red] Q15:請問內建的qsort運作原理是甚麼呢? 系統如何決定quick sort 演算法中的pivot呢? 在bubblebesort.c中,無論input data是甚麼,永遠會印出n*(n-1)/2筆strings;但是我找不出qsort.c印出幾筆strings的規則。 >![image](https://hackmd.io/_uploads/ByVYmMgIT.png) >![image](https://hackmd.io/_uploads/BkNeVzx8T.png) > 不必去查,STL的qsort如何找pivot這超出範圍了(而且如果我沒記錯,他用了不只quick sort),但是同學如果還想知道可以去找找自己電腦的include文件可能會找到。同學只需要粗略的統計一下字串的數量就可以了,規律還不需要太了解。 > [name=SUNGOD] [color=red] Q16:續Q15,hw10-1-7 Try to explain the difference in the number of string outputs & execution time between the two.是要我們從時間複雜度的角度切入嗎?bubblebesort.c是O(n^2),那qsort.c呢?網路上說是O(nlogn),要怎麼驗證呢?謝謝助教。 > 同上,這堂課沒教複雜度,不必證的很完整,邏輯上解釋得通即可。 > [name=SUNGOD] [color=red] Q17: 同Q7問,之前上傳e3的時候因為是把seed設為time(NULL),有點產生不出一樣的測資了,現在指定seed然後在pdf報告中說明,可以嗎? > OK > [name=SUNGOD] [color=red] Q18: 續Q5問,我本地的compiler是MinGW的。我很確定mingw的qsort表現和gcc不同。 example 1: ``` 4 1 2 3 4 ``` 在gcc的輸出是 ``` be be be be ``` 而在mingw下的輸出是 ``` ble ble ble ble ble ble ``` example 2 ``` 7 1 4 2 5 7 6 3 ``` output 2 in gcc ``` ble be be ble ble be ble be be ble be ``` output2 in mingw ``` bub be ble ble be be bub be ble be ble bub be ble be bub be be bub be ble ``` 但是我已經用mingw環境寫了大半個作業了。想請問助教這樣是可以過的嗎? 還是我要用gcc的環境重寫一次整份作業? 謝謝助教。 > OK,環境的部分不用擔心,我是看code的,執行結果不太一樣但合理也可以。 > [name=SUNGOD] [color=red] Q19: 請問這次時間也會往後延嗎,助教我快死ㄌ ? > 改了,如果還是不行可以參考一下[這個](https://aa.nycu.edu.tw/chcourse_post/112%e4%b8%8a%e5%ad%b8%e6%9c%9f_%e5%81%9c%e4%bf%ae%e8%aa%b2%e7%a8%8b%e7%94%b3%e8%ab%8b%e8%87%b312%e6%9c%888%e6%97%a5%ef%bc%88%e4%ba%94%ef%bc%89%e4%b8%8b%e5%8d%885%e9%bb%9e%ef%bc%88nycu-student-course-w/) > [name=SUNGOD] [color=red] Q20: 請問hw10-1-6做不出來怎麼辦?我測試到的n可能要到上萬才會符合千分之一倍的時間要求,可是測資一到上萬VS就很容易崩潰,根本沒法做測試,請問這是正常的嗎? > 不是,可以更小,而且理論上N<10^6 vs應該都還是可以跑? ~~而且少交一兩題不會怎樣吧~~ > [name=SUNGOD] [color=red] Q21: 可是我用n=10000,然後從1到10000的數列順序沒變的測資去測,用bubblesort的時間是1.13673秒,用qsort的時間是0.00246秒,而且我無法直接貼測資進行運算<-(這就是為甚麼Lab10要教File I/O),因為我用n=5000時,兩種排序程式都會當掉<-(有可能寫錯了或是請同學換台電腦,助教這邊用n=100000都是可以跑得,而且有時候不是當掉,只是真的跑很久(例如:30分鐘,詳細時間估算可以參考助教之前寫的[筆記](https://hackmd.io/Zdj5tEWTSr2h66LfNOfMRw))),無法輸出結果,只能轉為txt檔進行輸出,然後bubblesort的txt檔大小都會到幾百mb,VS很容易就直接跳掉<-(同上,~~而且少交一兩題不會怎樣吧~~)。 > <-(是我打的) > [name=SUNGOD] [color=red] Q22: 請問是否可以使用!=EOF來? > 同Q11,Lab 10-2可以過就好。 > [name=SUNGOD] [color=red] Q23: 請問一旦n大於10000就很容易遇到這種情況該怎麼辦?![image](https://hackmd.io/_uploads/B1g6FpTWL6.png) > SUNGOD又在亂講 > n = 10000 > ![image](https://hackmd.io/_uploads/B1zsllMUp.png) > n = 100000 > ![image](https://hackmd.io/_uploads/BJD7elzIp.png) > [name=HY] [color=blue] > 我的也不會 > [name=SUNGOD] [color=red] Q24: 請問hw10-1-4~6在改n的時候還需要遵守lab10-1 n_sum要超過20000的限制嗎,還是我可以不管它? > 不管,而且光是只能有一筆這點就違反限制了 > [name=SUNGOD] [color=red] Q25: 請問complier使用clang與gcc輸出差很多,是否可用clang寫作業 ``` 3 2 1 3 ``` 在gcc的輸出是 ``` be ble be ``` 在clang的輸出是 ``` bub bub be be be be be ``` > 同Q18,不同環境可以,不過作業裡要說明一下 > [name=SUNGOD] [color=red] Q26: 請問hw10-1繳交的兩個c檔一定要包含操作4~6小題的#ifdef之類的code嗎,可不可以只在pdf中放各自code的截圖就好? > 可是這樣沒練到#ifdefㄟ > [name=SUNGOD] [color=red] Q27: 承上題問,因為我有修改sort程式讓n是從makefile輸入,這部分可以只截圖放在pdf並說明嗎,我已有寫計算時間的#ifdef了,但不知道n從外部輸入能不能寫成#ifdef > 好喔 > [name=SUNGOD] [color=red] Q28: 嘿對原來我HW10-1-4跟10-1-6兩個sort的lines還有excution time都寫反了怎麼沒有同學告訴我啊? (不過好險我已經延期了) (Q3的就應該直接講出來) > [name=students] [color=green]