2014-08-28 208 views
1

我在寫一個工具,用戶可以爲公式的不同值選擇不同的選項。驗證範圍

例如:式F =值

if (F>10) option = 1 

if (F<5) option = 2 

if (F=7) option = 6 

用戶通過一個輸入這些條件中的一個。在他進入新的條件之前,我需要知道現有條件是否正常。如果有兩個條件,如F < 5F = 8,則應將其識別爲錯誤。

F > 2F < 4都可以,因爲我可以認爲它是2 < F < 4F < 4。沒有覆蓋範圍是可以的(可以設置默認選項)。

是否有任何數據結構來做到這一點或任何算法?

提前致謝!

+0

因爲用戶正在傳遞一個包含表達式的字符串,所以最好的辦法是執行一些字符串分析來減輕負載。例如,如果用戶輸入'F = 6',你就知道沒有別的東西可以工作,所以你不能再允許。 – christopher 2014-08-28 07:50:01

+0

你可以添加更多的上下文嗎?什麼是錯誤條件和什麼是可接受的條件? – Deutro 2014-08-28 07:50:05

+0

這些看起來與線性優化中的約束非常相似。您可以嘗試使用Simplex實現來檢查可行性。 – 2014-08-28 07:51:01

回答

3

其實很簡單,你只需要有2個變量 - lowerBoundupperBound,它們在開始時被初始化爲-infnityinfinity

當一個新的條件到達時,

  • 如果是F<a,更新:upperBound = min{upperBound, a-1}
  • 如果是F>a,更新:lowerBound = max{lowerBound , a+1}
  • 如果是F=a,更新:lowerBound = max{lowerBound , a}, upperBound = min{upperBound, a}

如果在任何時候lowerBound > upperBound - 沒有解決方案

我在這裏假設爲整數,但對於非整數也很容易修改。