→ ssccg:既然有優先順序,不就算出最多能抽幾組乙,減掉這數量再算06/07 20:13
→ ssccg:最多幾組甲就好了?06/07 20:13
: 如果這是個function ,那要怎麼知道有幾組乙(不重覆),asp.net的方法我不太熟
: 然後去執行交集運算C#(剛從數學版得到的資訊 )幾次
: http://msdn.microsoft.com/zh-tw/library/system.linq.enumerable.except.aspx
: 又集合了幾個網友的資訊
: C# ASP.NET 有 counting sort的函式可用嗎?
: 先排出優先權最高的set放進一List或array
: 然後再counting sort知道有n組 乙set
: 差集運算 n 次
: 下一個set
: loop
如果你只是要算數量
其實不需要管set,直接根據數量統計就好了
先統計各個值可被取的數量
然後依優先順序對每個set找出該set包含的值哪個的可取數量最少
這個數量就是set最大組數
把可取數量有被取走的值都減掉這個組數再算下一個set
就可以得到所有set的組數了
以下假設值是string:
// 依優先權排好的set
HashSet<string>[] setQueue = { 乙, 甲, ... };
// 一串值
string[] valuePool = {"B","C","E", ...};
// 結果
int[] result = new int[setQueue.Length];
Dictionary<string,int> valueCounts = valuePool.GroupBy(v => v)
.ToDictionary(g => g.Key, g => g.Count());
for(int i = 0; i < setQueue.Length; ++i)
{
result[i] = setQueue[i].Min(val =>
valueCounts.Keys.Contains(val) ? valueCounts[val] : 0
);
if(result[i] > 0)
foreach (string val in setQueue[i])
valueCounts[val] -= result[i];
}
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.130.236.108
※ 編輯: ssccg 來自: 220.130.236.108 (06/08 14:21)