---
# System prepended metadata

title: Lab10 & Hw10 討論區
tags: [112計概]

---

---
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]