Re: [問題] 指標陣列會影響速度?
看得好辛苦....
看在你丟了我水球的份上我回一下好了
※ 引述《mdki19 (JL)》之銘言:
: 我想請問如果把第一段程式碼改寫成第二段程式碼的話
: (不要每次取取記憶體的值,取一次就好)
: 計算的速度是否會提升?
: 我自己測試結果是有差
: 但是不確定
我來上個色兼重排版比較好講
for(i=1;i<8;i++)
{
first_bin_min[i] = min(
Multi_Vote[multi_x].first_bin[i] ,
pDoc->Img_Info[y].Multi_Info[multi_x].edgelet1_first_bin[i]
);
first_bin_score[i] = first_bin_min[i]/
(Multi_Vote[multi_x].first_bin[i] +
pDoc->Img_Info[y].Multi_Info[multi_x].edgelet1_first_bin[i] -
first_bin_min[i]);
if((Multi_Vote[multi_x].first_bin[i] +
pDoc->Img_Info[y].Multi_Info[multi_x].edgelet1_first_bin[i] -
first_bin_min[i]) == 0) first_bin_score[i] = 0;
}
(第二段恕刪)
你這段程式該做的其實不是只有你所改的那樣而已 你改的那個只是小 case 而已
我這樣排版+上色之後 才比較容易看出你要做的是
"把兩個數中的小數除以大數 如果大數為 0 就令結果為 0"
兩個數分別是標紅字和綠字的兩個東西
因此黃字是兩數中的小數 而藍底的則是兩數中的大數
這麼長一串的指令我想你寫完過個一個月再回來看就看不懂了
那麼 我把它改成這樣你覺得如何:
for(i=1; i<8; i++)
{
double minval = min(
Multi_Vote[multi_x].first_bin[i],
pDoc->Img_Info[y].Multi_Info[multi_x].edgelet1_first_bin[i]
);
double maxval = max(
Multi_Vote[multi_x].first_bin[i],
pDoc->Img_Info[y].Multi_Info[multi_x].edgelet1_first_bin[i]
);
if(maxval == 0)
first_bin_score[i] = 0;
else
first_bin_score[i] = minval / maxval;
}
功能一模一樣 (你可以看我對應上的色) 但這樣是否就清楚的表示了你所要的事情?
而且以你的"需求"來看
你的第一段每圈做了陣列取值九次
第二段只不過改進到每段陣列取值六次
我這樣改每圈陣列取值只有四次而已...
(再龜毛一點可以改到剩兩次 不過那沒必要)
況且你這個迴圈只有八圈 改進這種東西並不會對總時間造成多少的影響
不如改成一個讀起來好懂的東西來的有用
---
另外
不要為了那一丁點效率去用 a+b-min(a,b) 來算 max(a,b)
而且說不定這樣寫並沒有省到什麼
即使省去了一個比較分支但換來了兩個算術運算
但像原 PO 這種情形每次存取 a b 都要經過一大串的指標存取
其實並沒有省到哪裡去....
這也就是為什麼我在我改寫的這一段裡改成直接用 min 和 max 簡潔明瞭
--
1989/02/22 優希堂悟 1990/02/22 冬川こころ 1993/07/05 小町つぐみ 1994/05/21 高江
ミュウ 1995/04 歡迎來到 星野遊々 1997/03/24 守野いづみ 1997/03/24 伊野瀬チサト
1998/06/18 守野くるみ 1999/10/19 打越鋼太郎的 楠田ゆに 2000/02/15 樋口遙 2002/
12/17 八神ココ 2011/01/11 HAL18於朱倉岳墜機 2011/04/02 ∞與∫的世界 茜崎空啟動
2012/05/21 第貮日蝕計畫預定 2017/05/01~07 LeMU崩壞事故 2019/04/01~07 某大學合宿
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.30.133
推
03/28 23:15, , 1F
03/28 23:15, 1F
推
03/28 23:16, , 2F
03/28 23:16, 2F
推
03/28 23:18, , 3F
03/28 23:18, 3F
→
03/28 23:18, , 4F
03/28 23:18, 4F
→
03/28 23:19, , 5F
03/28 23:19, 5F
→
03/28 23:20, , 6F
03/28 23:20, 6F
→
03/28 23:21, , 7F
03/28 23:21, 7F
→
03/28 23:22, , 8F
03/28 23:22, 8F
推
03/29 00:15, , 9F
03/29 00:15, 9F
推
03/29 00:38, , 10F
03/29 00:38, 10F
討論串 (同標題文章)