作者yauhh (喲)
看板Programming
標題Re: [問題] 設計特殊的陣列
時間Fri Sep 7 23:00:02 2012
※ 引述《wsx02 ()》之銘言:
: http://ppt.cc/71it
: 大意是說 呼叫multiplyall(n)會把陣列所有的元素都乘以n 但只花O(1)
: 然後(b)提到的zeroall()我想應該就呼叫multiplyall(0)就可以了吧?
: 請問multiplyall(n)應該用怎樣的設計方式 讓他只花O(1)呢?
: 謝謝!
: 我自己偷吃步的想法是 雖然題目說要改變陣列中全部的element 可是沒說要全部印出來
: 只說這個陣列要能支援initial(),write(k,m),read(k),multiplyall(n)而已
: 不知道可不可以令一個全域變數temp 把multiplyall(n)的n指定給temp
: 當陣列要read的時候把element乘以temp?
不是偷吃步的方法啊,這就是設計一組資料結構:
a) 用大概C的語言,這個陣列起碼包含一些全域變數:
double a[];
long long len = N;
double mul;
void INITIAL() {
a = (double*)malloc(sizeof(double) * len);
mul = 1;
}
void multiplyall(double n) {
if (abs(n) < 0.000001) exit(ERROR);
mul *= n;
}
double read(long long k) {
return a[k] * mul;
}
void write(long long k, double m) {
a[k] = m / mul; //所以不可以multiplyall(0)把 mul 設定為0.
}
至於 ZEROALL() 嘛, 有點難.
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 36.226.94.15
→ bibo9901:calloc ? 118.169.158.96 09/08 00:14
→ yauhh:回答這一題,用calloc是犯規的 36.226.94.15 09/08 00:40
推 wsx02:謝謝 114.42.91.45 09/08 20:22
→ MOONRAKER:何不用一個flag來做zeroall 114.45.202.196 09/09 02:53
→ MOONRAKER:就像邏輯電路裡的reset一樣 114.45.202.196 09/09 02:53
→ yauhh:不行. zeroall()然後write(k,m)就破功 36.226.101.187 09/09 04:49
推 DJWS:MOONRAKER說的是可以做到的 36.225.135.221 09/09 09:49
→ DJWS:只是因為這一題並不是針對邏輯電路而已... 36.225.135.221 09/09 09:52
→ MOONRAKER:對喔,程式中絕不可能達到相同效果。 114.45.202.196 09/09 11:42