2013-05-29 33 views
0

這實際上是LabVIEW中的程序,但我可以在labview中編寫C腳本和/或在C中模擬與LabVIEW中相同的logic。也吸引更多的答案。所以我只需要這個算法。請閱讀整個問題。如何摺疊處理的案例數量?

在我的應用我有5個變量說:

var1 -> type string, 
var2 -> type string, 
var3 -> type array of strings, 
var4 -> type array of strings, 
var5 -> type boolean 

現在這5個變量的控制應該怎麼過濾我從文件中讀取數據。
所以爲此,我有一個開關箱,它將根據這些輸入來執行操作。

爲了控制我做這個開關:

  • 如果Var1爲空,則false
  • 如果var2爲空,則爲false。
  • 如果var3是一個空數組,然後是false
  • 如果var4是一個空數組,然後是false
  • if var5 false of true

因此,我得到了一個5位組合,所以我可以有32個值,因此32種類型的過濾器,即32例!

對於e.g如果var1是空的,var2不爲空,var3不爲空,var4是空的,var5是真實的話,我有(12月13)01101。所以我選擇了第13個過濾器。

編碼這真的很忙,所以我想摺疊的情況下的數量。怎麼做?
我在找什麼是算法。

這裏是LabVIEW代碼

This is the case conrol

VAR1 - >操作員姓名,var2->導師的名字,var3->作業ID,var4->多批次選擇,var5->無效的日期。

編輯。 ; 例如
如果var1和var3不爲空,那麼我必須從文件中讀取數據,使其包含var1和var2數據。

例如2
現在如果var1,var3,var5不爲空,那麼我需要選擇數據,這樣它將具有與var1和var3和var5共同的數據。

例如3
如果我有var1,var3,var4,var5我需要獲取包含var1 var3 var4 var5共有的數據的數據。

例4
如果我只是var3我只需要提取有關var3的數據。

+0

不確定你在問什麼。你仍然需要處理32個不同的情況,並且需要對它們進行編碼。除非你有一些在變量之間沒有依賴關係的邏輯,那麼你只需要編寫10個例子(5個變量,每個都可以是true/false) – Mzf

+0

@Mzf我很遺憾編碼所有這些,但我恐怕在如果未來的變量增加,那麼在未來的情況下它的對數增加。多一個變量,我必須編碼64個案例!它不切實際。這5個變量過濾了多少內容,我必須從文件中讀取:( –

+0

對數增加不好....再次 - 如果變量之間沒有依賴關係,則線性增加 – Mzf

回答

1

有很多可能性來做你正在問/改進建議。

  1. 對於你做的每一個測試,有一個嵌套的Case結構。這裏有一個建議:如果你有某些更可能失敗的測試,把它們放在外面。這樣你可以優化執行。

  2. 您已擁有的案例結構可以使用範圍處理多個案例。例如,您可以在「案例選擇器」框中鍵入1..10來處理數字1到10。通過使某些案例連續可以減少案件數量。

  3. 我不確定你正在使用哪個版本的LabVIEW,但是你正在做的一些測試可以簡化一下。例如,我相信在LabVIEW 2011及更高版本中,可以使用特殊的空陣列測試和空字符串測試功能。

  4. 另外,不要使用5個插入數組函數,而是嘗試一個單獨的構建數組函數,該函數被展開以保存您擁有的布爾數。

我認爲「指數增長」是指這裏增加的類型,如果你有更多的布爾值。案例數量(理論上)是2 ^(變量數量)。

+0

我正在使用labview 2012.實際上,用戶可能會給出5個輸入的任意組合,因此全部具有相同的概率。是的4.是我馬上就會做的事情。而你是正確的,我很害怕這種指數級的上漲。如果客戶要求另一個參數過濾,那麼我必須有2^6個案件的權利?他可以通過給這些參數進行過濾。最後,我現在不是很在意優化,但是編碼時間很短。但是感謝你提供這些正確的建議。請回復 –

+0

至於編碼時間很短,我還會提醒你正在使用的這種情況。它不會給你提供很多關於你正在編碼的案例的自我記錄信息。如果您現在只需多一點時間來記錄文件,或者爲了清晰起見可能需要重新組織一些文件,您可以在數小時後保存自己。 –

+1

Re 2,您還可以通過在案例選擇器框中鍵入逗號來處理一個不連續的值,例如, 1,3,8。 – nekomatic