【发布时间】:2020-10-03 22:21:18
【问题描述】:
我有兴趣在字典(或可能是其他数据结构)的帮助下降低下面这段代码的时间复杂度。
据我了解,我的蛮力解决方案的时间复杂度为 O(n^2),但是,可能可以在 O(n) 中完成(非嵌套循环的 n 次)。
任务是针对每一天和位置打印该天和位置的观察结果百分比,即哺乳动物观察结果。
foreach (var day in EachDay(GetDateTimeForFirstObservation(animalObservations),
GetDateTimeForLastObservation(animalObservations)))
{
Console.WriteLine("Day: {0}", day.ToString("dd/MM/yyyy"));
foreach (var location in EachLocation(animalObservations
.Where(ao => ao.Datetime.Day == day.Day).ToList()))
{
Console.WriteLine("Location: {0}", location);
numOfAllAnimalsInLocationAndDay = animalObservations
.Where(aob => aob.Location == location &&
aob.Datetime.Date == day).Count();
numOfMammalsAnimalsInLocationAndDay = animalObservations
.Where(aob => aob.Location == location &&
aob.Datetime.Date == day && aob.Animal.IsMammal).Count();
Console.WriteLine("Percentage of Mammals in location and day: {0:N2}%",
numOfMammalsAnimalsInLocationAndDay/numOfAllAnimalsInLocationAndDay * 100);
}
}
输入看起来像这样:
[
{"DateTime":"2020-02-22 10:10:15", "Location":"Backyard", "Animal": {"Species":"Camel", "IsMammal": "TRUE"}},
{"DateTime":"2020-02-22 11:10:15", "Location":"Backyard", "Animal": {"Species":"Camel", "IsMammal": "TRUE"}},
{"DateTime":"2020-02-22 12:10:15", "Location":"Backyard", "Animal": {"Species":"Ant", "IsMammal": "FALSE"}},
{"DateTime":"2020-02-22 22:10:15", "Location":"Sky", "Animal": {"Species":"Flamingo", "IsMammal": "TRUE"}},
{"DateTime":"2020-02-22 23:10:15", "Location":"Sky", "Animal": {"Species":"Bee", "IsMammal": "FALSE"}},
{"DateTime":"2020-02-23 13:11:15", "Location":"City", "Animal": {"Species":"Racoon", "IsMammal": "TRUE"}},
{"DateTime":"2020-02-24 15:10:00", "Location":"City", "Animal": {"Species":"Dog", "IsMammal": "TRUE"}},
{"DateTime":"2020-02-24 19:10:00", "Location":"City", "Animal": {"Species":"Fly", "IsMammal": "FALSE"}},
{"DateTime":"2020-02-24 19:10:15", "Location":"City", "Animal": {"Species":"Butterfly", "IsMammal": "FALSE"}},
{"DateTime":"2020-02-24 19:10:20", "Location":"City", "Animal": {"Species":"Cat", "IsMammal": "TRUE"}},
{"DateTime":"2020-02-24 19:10:30", "Location":"City", "Animal": {"Species":"Flee", "IsMammal": "FALSE"}},
{"DateTime":"2020-02-25 21:10:15", "Location":"Village", "Animal": {"Species":"Horse", "IsMammal": "TRUE"}},
{"DateTime":"2020-02-25 22:10:15", "Location":"Village", "Animal": {"Species":"Fly", "IsMammal": "FALSE"}},
{"DateTime":"2020-02-25 23:10:15", "Location":"Village", "Animal": {"Species":"Bee", "IsMammal": "FALSE"}},
{"DateTime":"2020-02-25 10:10:15", "Location":"Home", "Animal": {"Species":"Iguana", "IsMammal": "FALSE"}}
]
以及想要的输出:
Day: 22.02.2020
Location: Backyard
Percentage of Mammals in location and day: 66,67%
Location: Sky
Percentage of Mammals in location and day: 50,00%
Day: 23.02.2020
Location: City
Percentage of Mammals in location and day: 100,00%
Day: 24.02.2020
Location: City
Percentage of Mammals in location and day: 40,00%
Day: 25.02.2020
Location: Village
Percentage of Mammals in location and day: 33,33%
Location: Home
Percentage of Mammals in location and day: 0,00%
【问题讨论】:
标签: c# dictionary time-complexity nested-loops