我想创建一个算法,但不知道如何启动。
这个算法实际上是一个方法,它接受一个由N个对象组成的数组,其中包含一些属性createdAt值。我会将数组从旧到新排序(createdAt),然后我必须找出可用数据的一致性,这意味着,每一小时我至少有5条记录,每半小时有2条记录。
示例测试代码:
- (void) normalizeData:(NSArray*)records
{
// sort the records
NSArray* sortedRecords = [records sortWithCreatedAt];
// split all dates in the records, distinct them, and create a dictionary with a key for every date, for value create another dictionary with the hour as key and the records as the value.
NSArray* distinctDates = [sortedRecords valueForKeyPath:@"@distinctUnionOfObjects.createdAt"]; // should only consider month-day-year-hour
NSMutableDictionary* dictionary = [NSMutableDictionary dictionary];
for (NSDate* date in distinctDates)
{
NSString* stringDate = [date string];
NSArray* recordsForDate = [sortedRecords valueForKeyPath:[NSString stringWithFormat:@"[collect].{createdAt=%@}.self", stringDate]]; // let's say you got them with this line
[dictionary setObject:recordsForDate forKey:date];
}
for (NSDate* keyDate in dictionary)
{
NSArray* records = [dictionary objectForKey:keyDate];
Record* previousRecord = nil;
for (Records* record in records)
{
// I'll have to keep the previous record and compare the time difference with the new
NSInteger secondsAfterDate = 0;
if (previousRecord)
{
secondsAfterDate = [record.createdAt timeIntervalSinceDate:previousRecord.createdAt];
// add logic to create trend difference in a model that has for every hour of the records count, the records and suffice description
// logic if the records count and timespan is suffice.
}
previousRecord = record;
}
}
}
如果能对该方法的进程作出任何贡献,我将不胜感激。
此外,最终目标是为处理的记录的每个结果创建一个返回(调用块处理程序)。逻辑应该以每小时至少5条记录结束,并且它们之间的时间间隔不到15分钟。
取记录收集的总时间长度(第一条记录的createdAt和最后一条记录的createdAt之间的差),并将其离散化为bin。将每个物体放在适当的垃圾箱中。然后使用具有两种窗口大小(30分钟和60分钟)的滑动窗口。沿着阵列行走时,不断评估是否满足所描述的条件。
注意,对于上面的方法,正确地将bin宽度定义为时间戳过程的分辨率是很重要的。由于你没有在帖子中指出这一点,如果这是一个问题,请随时发表评论。