特征提取

特征提取

描述

小明想从猫咪的视频里挖掘一些猫咪的运动信息。为了提取运动信息,他需要从视频的每一帧提取“猫咪特征”。
一个猫咪特征是一个两维的vector<x, y>。如果x_1=x_2 and y_1=y_2,那么这俩是同一个特征。
如果喵咪特征连续一致,可以认为喵咪在运动。也就是说,如果特征<a, b>在持续帧里出现,那么它将构成特征运动。比如,特征<a, b>在第2/3/4/7/8帧出现,那么该特征将形成两个特征运动2-3-4 和7-8。
现在,给定每一帧的特征,特征的数量可能不一样。小明期望能找到最长的特征运动。

每行代表一帧。其中,第一个数字是该帧的特征个数,接下来的数字每两个为一对<x,y>
特征总数不超过 10^5

说明

 

样例

示例1:

输入: 
features:
[[2,1,1,2,2],
[2,1,1,1,4],
[2,1,1,2,2],
[2,2,2,1,4],
[0],
[0],
[1,1,1],
[1,1,1]]
输出:3
解释:特征<1,1>在连续的帧中连续出现3次,相比其他特征连续出现的次数大,所以输出3
class Solution:
    """
    大致思路:动态规划
    """
    def FeatureExtraction(self, frames):
        # write your code here
        if len(frames) == 0: return 0 

        #初始化
        l = len(frames)
        dp = [0]*l 
        d = [{} for _ in range(l)]

        #计算顺序
        for i in range(l):
            for j in range(frames[i][0]):
                x = frames[i][j*2 + 1]
                y = frames[i][j*2 + 2]
                string = str(x) + 'and' + str(y)

                if (i == 0):
                    dp[0] = 1
                    d[0][string] = 1
                    continue
                
                if (string in d[i - 1].keys()):
                    dp[i] = max(d[i - 1][string] + 1, dp[i])
                    d[i][string] = d[i - 1][string] + 1
                else:
                    dp[i] = max(1, dp[i])
                    d[i][string] = 1

        return max(dp)

 

posted @ 2020-06-16 01:01  风不再来  阅读(124)  评论(0编辑  收藏  举报