詳細活動請參閱: http://labview.com.tw/codingchallenge/20040601~20040731/codi ngchallenge.asp
贈品資訊請參閱: http://labview.com.tw/codingchallenge/20040601~20040731/gift .asp
(贈品由NI公司提供)
程式碼競賽 - 找出中位數
你的任務就是設計一個VI,從含有3,000,000(三百萬)或3,000,001個亂數element的1D Array中,快速找出「中位數」。每一個element皆為範圍介於0-1,000的雙精確數。
在統計學中,所謂的中位數就是從一序列的數字中,先依數字大小排序。假設總共有n個數,若n為奇數,則最中間那一個數就是中 位數;如果n是偶數,那麼最中間那兩個數的平均數,就是中位數。
在這場比賽中,您不能使用LabVIEW內建的Array排序程式,如Sort 1-D Array.vi、Sort 1-D Array PtByPt.vi、Sort Complex Numbers.vi ...等等。如果您想要將Array排序,您必須自己寫排序的程式。您也不可以使用LabVIEW內建的求中位數程式,如Median.vi、Median PtByPt.vi、Median Filter.vi、Median Filter PtByPt.vi...等。
下面是一個簡單的解說。如果有一個Array是 <1, 3, 0>,我們要先將他排序成<0, 1, 3>,由於這個Array裡面有3個element,所以中位數就是最中間的那一個數,以此例來說,中位數是「1」。另一 個例子,如果有一個Array是<3, 8, 4, 0, 14, 6>,那我們要先將他排序成<0, 3, 4, 6, 8, 14>,由於這個Array裡面的element是偶數,所以中位數就是最中間那兩個數「4,6」的平均數,因此,中位數 是「 5」。
評分的標準:
- 正確性
- 執行速度
- 程式碼的style關於程式碼的Style,您可以參考:養成良好的程式撰寫習慣三部曲
提示:
- 由於您不能使用LabVIEW內建的演算法,所以建議您先到網路上,找尋中位數的驗算法,通常那會是一個好的開始
- 使用我們提供的開始VI(codingchallenge.zip),作為美好的開始吧。
這個競賽的特別規定:
- 所有的程式碼都要使用LabVIEW。
- 不可使用外部的程式碼,如DLLs、CINs、exes... 等等。
- 不可以使用LabVIEW內建的排序工具,如Sort 1-D Array.vi、Sort 1-D Array PtByPt.vi、Sort Complex Numbers.vi...等。 也不可以使用LabVIEW內建的中位數VI,如Median.vi、Median PtByPt.vi、Median Filter.vi、Median Filter PtByPt.vi...等。
- 請帶著愉快的心情參加這個競賽!
支援:
- 如果您對我們舉辦的活動有任何意見,請到「Coding Challenge 程式碼競賽」張貼您的意見與建議。
- 如果想要討論這一次Coding Challenge的技術問題,請到http://labview.com.tw/forum/forum_topics.asp?FID=23,提出問題,參與討論。
繳交程式G
- 上傳檔案的檔名,為下列四種之ㄧ:vi, llb, zip, rar,不可以上傳副檔名為exe的檔案
- 請將您的程式,寄到:[email protected]。郵寄時′偏怴A2004/7/31晚上12:00截止收件。
Benjamin38169.7556018519
哇,有比賽耶,不知道Ben老大是否要下海,雖然現在很多事要做,不過有時間我也來試看看
歡迎歡迎...不過還是論文要緊唷...你是今年畢業吧...加油!
Function>>Array都不能用嗎?
如:Array Index.Build Array.Insert into Array...等嗎
說明,除了下面的VI不可以使用之外,其他的LabVIEW內建的VI都可以使用:
:Sort 1-D Array.vi
:Sort 1-D Array PtByPt.vi
:Sort Complex Numbers.vi
:Median.vi
:Median PtByPt.vi
:Median Filter.vi
:Median Filter PtByPt.vi
請大家來參加這個競賽吧...有很大的機會可以獲獎唷...
請問Benjamin要怎麼測執行速度 ?
另外,如果用formula structure,裡面的code是C,這樣算符合第一條規定嗎
yao38176.3788773148
不好意思有點看不懂題目,可以再解釋一下下面的意思嗎?謝謝
你的任務就是設計一個VI,從含有3,000,000(三百萬)或3,000,001個亂數element的1D Array中,快速找出「中位數」。每一個element皆為範圍介於0-1,000的雙精確數。
我知道意思了!
ancle38177.7443055556
[QUOTE=ancle]
不好意思有點看不懂題目,可以再解釋一下下面的意思嗎?謝謝
你的任務就是設計一個VI,從含有3,000,000(三百萬)或3,000,001個亂數element的1D Array中,快速找出「中位數」。每一個element皆為範圍介於0-1,000的雙精確數。
我知道意思了!
[/QUOTE]
呵呵,我還是再說明一下:
就是工程師在測你的程式的時候,有可能會用輸入3,000,000(三百萬)的亂數到你的程式,或是輸入3,000,001個亂 數到你的程式,你的程式必須要能針對奇數個input或是偶數個input做不同的判斷。
而每一個亂數,我們也定義它為「範圍介於0-1,000的雙精確數」。這樣大家在設計的時候,可以將這個因素也考慮進去。

ancle
10
剛剛自己測了一下執行時間,只能以慘不忍睹來形容,一度以為是當機了,可否請版主先提出最低執行時間的門檻,好讓我是否決定要寄 檔案,謝謝
[QUOTE=ancle]
剛剛自己測了一下執行時間,只能以慘不忍睹來形容,一度以為是當機了,可否請版主先提出最低執行時間的門檻,好讓我是否決定要寄 檔案,謝謝
[/QUOTE]
抱歉,我自己還沒有實際寫過這個程式,所以我不知道執行的時間是多少?不過,如果一個人寄多份程式參加比賽的話,評分的時候會選 擇最新的那個檔案來評分。
說到評分,我只有寫評分的標準,但是沒有寫評分的比重,比如說:速度佔百分之多少;寫程式的風格佔百分之多少。我下個星期PXI TAC過後,會詢問NI Taiwan,我想這些規則一定要先訂定清楚,才可以讓大家有一個公開、透明的資訊。
[QUOTE=yao]
請問Benjamin要怎麼測執行速度 ?
另外,如果用formula structure,裡面的code是C,這樣算符合第一條規定嗎
[/QUOTE]
如果使用formula node,因為那也是LabVIEW的一部分,所以是可以的。可以使用formula node。

[QUOTE=Benjamin][QUOTE=ancle]
剛剛自己測了一下執行時間,只能以慘不忍睹來形容,一度以為是當機了,可否請版主先提出最低執行時間的門檻,好讓我是否決定要寄 檔案,謝謝
[/QUOTE]
抱歉,我自己還沒有實際寫過這個程式,所以我不知道執行的時間是多少?不過,如果一個人寄多份程式參加比賽的話,評分的時候會選 擇最新的那個檔案來評分。
說到評分,我只有寫評分的標準,但是沒有寫評分的比重,比如說:速度佔百分之多少;寫程式的風格佔百分之多少。我下個星期PXI TAC過後,會詢問NI Taiwan,我想這些規則一定要先訂定清楚,才可以讓大家有一個公開、透明的資訊。
[/QUOTE]
請問一下,是不是要附上程式時,是不是要連同個人資料一併附上呢?
而個人資料需要附上哪些資料呢?
[QUOTE=Airbolt]
[QUOTE]
請問一下,是不是要附上程式時,是不是要連同個人資料一併附上呢?
而個人資料需要附上哪些資料呢?
[/QUOTE]
剛剛在 開始VI(codingchallenge.zip) 裡頭的 note ,
找到了填寫個人資料的地方。
PS: 如果沒有下載這個 VI ,我想應該會跟我有相同的困惑吧?!
因為比賽規則沒有說一定要使用這個 VI 開始 寫作。
Airbolt38180.6456944444
[QUOTE=Airbolt]剛剛在 開始VI(codingchallenge.zip) 裡頭的 note ,
找到了填寫個人資料的地方。
PS: 如果沒有下載這個 VI ,我想應該會跟我有相同的困惑吧?!
因為比賽規則沒有說一定要使用這個 VI 開始 寫作。[/QUOTE]
抱歉,我馬上將您的建議補上去。
謝謝您的建議。
不知各位先進的寫作情形如何,有多少人有"交卷", 我自己用merge array 的方式排列就是沒法和Function的 sort 1-D array 的速度相比, sort 1-D array 大概五分鐘就排好三百萬組array, 不知是否各位先進知道為何LV 的Function 排列如此的快, 而自己寫的程式就要跑幾小時.
有這麼誇張嗎??
用sort 1-D arrary約250ms吧.....
我用自己寫的目前測到約120000~240000ms 之間吧...2~4分鐘吧!
3000000和3000001我目前是跑同樣的程式...希望目標可以做到一分鐘以內吧!!
電腦系統:Dell P4-2.8GHz
不好意思
我的電腦是700MHz, Ram只有128Mb
不過想請教Ronaldsmith,你有用到formula node 嗎, 因我嘗試的方式都是純粹用內部基本的Function 兜起來的(像sequence , case ,for loop及加減等), 並且是先在子陣列排列好後再併回原始陣列,因自己試了好幾種排列法,但效果並不十分顯著, 也許是電腦等級的問題, 但我想使用的function 不同也會有極大的影響.
希望這次最後得獎的作品可以讓我們網友 "瞻仰"一下, 是如何有效率的使用LV解決這類的問題.
我並沒有用到formula node啦, 我純粹是使用LV內基本的一些function都起來的, 我想應該是可以更快吧?!不過我對記憶體的配置這一塊還不夠熟悉....努力研究中囉!排列法還是有影響的喔..我也只是了兩種排列法跟一種刪去法...還是要繼續努力的想的!!
大家要一起加油囉.....我最喜歡腦力激盪囉!
[QUOTE=t122ab]
不好意思
我的電腦是700MHz, Ram只有128Mb
不過想請教Ronaldsmith,你有用到formula node 嗎, 因我嘗試的方式都是純粹用內部基本的Function 兜起來的(像sequence , case ,for loop及加減等), 並且是先在子陣列排列好後再併回原始陣列,因自己試了好幾種排列法,但效果並不十分顯著, 也許是電腦等級的問題, 但我想使用的function 不同也會有極大的影響.
希望這次最後得獎的作品可以讓我們網友 "瞻仰"一下, 是如何有效率的使用LV解決這類的問題.
[/QUOTE]
直接用mean.vi更快,15ms,我的電腦等級才Celeron 1.7G而已, C果然高階語言中是最快的