zoukankan      html  css  js  c++  java
  • 特征提取

    特征提取

    描述

    小明想从猫咪的视频里挖掘一些猫咪的运动信息。为了提取运动信息,他需要从视频的每一帧提取“猫咪特征”。
    一个猫咪特征是一个两维的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)
  • 相关阅读:
    第一篇代码 嗨翻C语言 21点扑克
    Windows7 sp1 64位下安装配置eclipse+jdk+CDT+minGW
    MinGW-64 安装
    Windows Live Writer配置步骤
    Css 居中
    c++ 常量成员函数
    c/c++ 引用计数
    C++ 《STL源码剖析》学习-vector
    C/C++ 有符号数和无符号数
    cocos2d 内存管理机制
  • 原文地址:https://www.cnblogs.com/yunxintryyoubest/p/13138807.html
Copyright © 2011-2022 走看看