2011-04-01 89 views
0

這是我的英文問題:如何創建具有不同權重(調度)的對象的均勻分佈?

  • 我有幾個WidgetContainer對象。
  • 每個WidgetContainer將至少有一個Widget
  • 每個WidgetContainer想要顯示其每天Widgetsn的次數。
  • Widgets可以在'x'號碼上顯示Venues
  • A Widget在下一個預定的WidgetContainer'sWidget代替它的位置之前恰好顯示爲t秒。
  • 如果在那段時間整天的未填充起來,然後什麼都不顯示(廣告應均勻地分散在整個一天t秒時間)

這裏是僞代碼所表示的對象:

var WidgetContainers = [ 
    { 
     DailyImpressionsRequired: 52, // should be split between Venues 
     Widgets: ["one", "two"], 
     Venues: ["here", "there"] 
    }, 
    { 
     DailyImpressionsRequired: 20, 
     Widgets: ["foo"], 
     Venues: ["here", "there", "everywhere"] 
    }, 
    { 
     DailyImpressionsRequired: 78, 
     Widgets: ["bar", "bat", "heyhey!"], 
     Venues: ["up", "down", "allAround"] 
    } 
]; 
var SecondsInADay = 86400; 
var DisplayInterval = 30; // seconds 
var TotalNumverOrVenues = /*eh, some calulations...*/; 
var AvailableSlots = /*eh, some calulations...*/; 
var SlotsNeeded = /*eh, some calulations...*/; 

我需要找到一種有效的方式來計算這些對象的均勻分佈的計劃。這些「對象」是LINQ到SQL對象,所以一些LINQ的建議將是很好

我的想法,現在就是擊敗了WidgetContainers他們Widgets;將它們的DailyImpressions除以Widgets

如果沒有多個不同的場所需要考慮,我可以輕鬆搞定。

我有一種感覺,我只是需要看到別人對這個問題的看法,因爲我一直盯着看這麼久。

因此,任何幫助,可能會指出我在正確的方向或提供一些問題的角度,即使它是顯而易見的,將不勝感激!

+1

所以...是DailyImpressions場館之間的分裂,或每個地點? – RichardW1001 2011-04-01 15:19:07

+0

他們將在場地之間分割。因此,如果我需要30次展示,並且他們必須在3個場館展示,每個場地將會獲得10個。(你不愛我的1337數學技能嗎?= - ) – 2011-04-01 15:21:09

+1

也許如果你能告訴我們你的例子有什麼正確的答案,只是爲了確保人們的理解是正確的 - 我認爲會有6個場地(僅計數不同),可用的時間段是(每天秒數)*(不同的場地)/(顯示時間間隔)= 17280,需要的時間槽是總和((不同部件)*(需要每日展示次數))= 358? – RichardW1001 2011-04-01 15:31:06

回答

0

基礎上很多,如果我的理解,這應該給你正確的答案:

static void Main(string[] args) 
     { 
      List<WidgetContainer> data = new List<WidgetContainer>(); 

      data.Add(new WidgetContainer { 
       Widgets = new List<String> {"one","two"}, 
       Venues = new List<String>{"here","there"}, 
       DailyImpressionsRequired=52}); 

      data.Add(new WidgetContainer { 
       Widgets = new List<String> {"foo"}, 
       Venues = new List<String>{"here","there","everywhere"}, 
       DailyImpressionsRequired=20}); 

      data.Add(new WidgetContainer { 
       Widgets = new List<String> {"bar","bat", "heyhey!"}, 
       Venues = new List<String>{"up","down", "allAround"}, 
       DailyImpressionsRequired=78}); 

      var SecondsInADay = 86400; 
      var DisplayInterval = 30; // seconds 

      var TotalNumverOfVenues = data.SelectMany(x=> x.Venues).Distinct().Count(); 
      var AvailableSlots = SecondsInADay * data.SelectMany(x=> x.Venues).Distinct().Count()/DisplayInterval ; //assuming you didn't already have the count as a variable - will re-evaluate so don't use this for real! 
      //var AvailableSlots = SecondsInADay * TotalNumverOfVenues/DisplayInterval ; //the better way - avoids recalculating count 
      var SlotsNeeded = data.Sum(x => x.DailyImpressionsRequired); 

     } 
+0

人,現在看起來更加複雜。大聲笑。我必須根據可用性PER場地在整個可用插槽中分散印象。啊,我瘋了。 – 2011-04-01 16:27:43