动态规划——状态转移方程 DP问题的核心即确定动态转移方程。(1)寻找变量,确定子问题。DP表一般为二维,故需要两个变量。(2)寻找总问题与子问题迭代关系,确定中间值、迭代值例1:有5个物品,其重量分别是{2, 2, 6, 5, 4},价值分别为{6, 3, 5, 4, 6},背包的容量为10,计算背包所能装入物品的最大价值。(1)寻找变量在这个问题中,每个物品所对应的重量与价值是确定的。故将物品数量与可分配容量作为变量。总问题转化为在前5件物品中挑选容量不超过10的物品,使价值最大。子问题转化为
最长子序列——动态规划 动态规划算法通常用于求解具有某种最优性质的问题。动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。与分治法不同的是,适合于用动态规划求解的问题,经分解得到子问题往往不是互相独立的。若用分治法来解这类问题,则分解得到的子问题数目太多,有些子问题被重复计算了很多次。如果我们能够保存已解决的子问题的答案,而在需要时再找出已求得的答案,这样就可以避免大量的重复计算,节省时间。我们可以用一个表来记录所有已解的子问题的答案。不管该子问题以后是否被用
最长子字符串的长度——分治法 确定递推方程:假如S1的最后一个元素与S2的最后一个元素相等,那么S1和S2的LCS就等于 {S1减去最后一个元素} 与 {S2减去最后一个元素} 的 LCS 再加1。假如S1的最后一个元素与S2的最后一个元素不等,那么S1和S2的LCS就等于 : {S1减去最后一个元素} 与 S2 的LCS, {S2减去最后一个元素} 与 S1 的LCS 中的较大值。def lcs(a, b, i, j): if i < 0 or j < 0: return 0
计数排序 要理解计数排序,就必须要了解什么是计数,以及为什么只适用于整数。可以将排序问题拆分为一下两个子问题:(1)如何确定原始数组内元素的排位次序并建立排序数组与其对应?即101→1,103→5....① 原始数组内元素是不连续的,那如何将不连续的元素与排序数组一一对应呢。这里通过 元素值-最小元素值=计数数组下标 的方法确定计数数组,计数数组下标为【0,max-len+1】。统计次数作为其元素值,不存在的元素值默认为0。原始数组计数数组② 如图所示,计数数组的下标从原始数组
深入理解递归 什么是递归?在函数中带着新参数调用函数自身,等同于在原来的基础上不断“向下/向内”开辟新的内存空间。注意:到内部调用函数, 以下的代码不会被执行,而是暂停阻塞。用递归可以解决的问题都能用循环解决。循环中存在起始值与迭代值,递归中对应的是什么呢?起始值可以对应为触发函数返回值的第一个值。而迭代值则对应为函数的返回值,返回值中调用函数自身,即可实现迭代。可以用一幅图直观的理解‘递’与‘归’,递——执行函数;归——得到返回值退出函数(1)计算阶乘def factorial(n
二分查找 (1)查找一个数def search(nums, target): left = 0 right = len(nums) - 1 while left <= right: mid = (left + right) // 2 if nums[mid] == target: return mid elif nums[mid] > target: right = mid - 1
Python集合内置函数 创建一个空集合必须用set()而不是{ },因为{ }是用来创建一个空字典集合相比于其他迭代序列,可以实现‘+’(左右差集),‘-’,并,交四个特殊功能(1)set.add()给集合添加元素fruits = {"apple", "banana", "cherry"}fruits.add('orange')>>>{'cherry', 'orange', 'apple', 'banana'}(2)set.clear()移除集合所有元素(3)set....
Python字典常用内置函数 (1)dict.clear()删除字典内所有元素(2)dict.copy()返回一个字典的浅复制(3)dict.fromkeys()dict.fromkeys(seq[, value])创建一个新字典,以序列 seq 中元素做字典的键,value 为字典所有键对应的初始值。seq = ('1', '2', '3')dict1 = dict.fromkeys(seq, 10)>>>{'1': 10, '2': 10, '3': 10}(4)dict
Python 列表常用内置函数 (1) list.append() 在列表末尾添加新的对象aList = [123, 'xyz', 'zara', 'abc']aList.append(2009)>>>[123, 'xyz', 'zara', 'abc', 2009] 如果插入值为列表,可能会出现不符合预期的结果aList = [123, 'xyz', 'zara', 'abc']aList.append([2009, 'csdn', 'lzh'])>>>[123...
Understanding and Modeling of WiFi Signal Based Human Activity Recognition 相关研究现有的无设备人体活动识别和定位工作可分为四类:基于接收信号强度指示器(RSSI)的、基于专用硬件的、基于雷达的和基于CSI的。其中基于CSI的人类活动识别系统主要依靠WiFi信号的统计特征(如多普勒运动方向和信号强度分布)来区分不同的人类活动,缺乏能够将CSI动态和人类活动定量关联的模型。这样的模型很难理解WiFi信号动力学与人类活动之间的关联,限制了基于WiFi的人类活动识别技术的进一步发展。此外,很难对这类系统的性能进行优化,我们不得不采用试错法进行性能优化。CSI介绍环境中人体
Numpy入门——选取数据 1、 单个元素索引1、1 一维数组x = np.arange(1, 13)print(x[1])21、2 多维数组x = np.arange(1, 13).reshape(3, 4)print(x[1])print(x[1][1]) #x[1,1][5 6 7 8]62、 切片索引2、1 多维数组可以用冒号代替某一行/列的所有值。x = np.arange(1, 13).reshape(3, 4)print(x[2, :])print(x[:,