q2

定点数编程

风流意气都作罢 提交于 2020-03-26 21:33:49
3 月,跳不动了?>>> 翻译自 Fixed Point Arithmetic on the ARM 介绍 定点算法原理 指数变化 加法和减法 乘法 除法 平方根 溢出 实例 信号处理 图像处理 总结 C 程序 使用汇编编程 翻译自 Fixed Point Arithmetic on the ARM 介绍 本应用笔记介绍了如何使用ARM C编译器和ARM或Thumb汇编器编写高效的定点算术代码。 由于ARM内核是一个整数处理器,因此必须使用整数算术模拟所有浮点操作。 使用定点算法而不是浮点数将大大提高许多算法的性能。 本文档包含以下部分: 定点运算原理:描述了定点运算所需的数学概念。 例子:给出了为信号处理和图形处理编写定点代码的例子,这是两种最常见的用途。 C编程:涵盖了在C中实现定点代码的实际细节。示例程序与一组宏定义一起给出。 汇编程序:介绍汇编程序示例。 定点算法原理 在计算算术中,可以使用一对整数(n,e)来近似表示分数:分别为尾数和指数。这对整数表示分数 n 2 − e n2−e 。指数 e 可以被认为是放置二进制小数点之前必须移动 n 的位数。比如 Mantissa (n) Exponent (e) Binary Decimal 01100100 -1 011001000. 200 01100100 0 01100100. 100 01100100 1 0110010

dp - Codeforces Round #313 (Div. 1) C. Gerald and Giant Chess

浪尽此生 提交于 2020-02-24 20:24:51
Gerald and Giant Chess Problem's Link: http://codeforces.com/contest/559/problem/C Mean: 一个n*m的网格,让你从左上角走到右下角,有一些点不能经过,问你有多少种方法。 analyse: BZOJ上的原题。 首先把坏点和终点以 x 坐标为第一键值, y 坐标为第二键值排序 。 令f i 表示从原点不经过任何坏点走到第 i 个点的个数,那么有DP方程:    f i = C x i x i + y i − ∑( x j <= x i , y j <= y i) C ( x i − x j ) ( x i − x j ) + ( y i − y j ) ∗ f j 当于枚举第一个遇到的坏点是啥,然后从总方案里减掉。 然后再利用组合数取模就行。 (http://blog.csdn.net/popoqqq/article/details/46121519) Time complexity: O(N*N) Source code: /* * this code is made by crazyacking * Verdict: Accepted * Submission Date: 2015-07-22-23.43 * Time: 0MAXMS * MAXMemory: 137KB */ #include

DataFrame数值处理(四)

时光毁灭记忆、已成空白 提交于 2020-02-15 10:45:48
1、生成4行9列的标准正态伪随机数,并为其添加列名和日期的行索引。 a = np.random.standard_normal((9,4)) # 生成9行4列标准正态分布伪随机数 a.round(6) # DataFrame函数参数: data, index, columns, dtype, copy df = pd.DataFrame(a) df.columns = ['No1', 'No2', 'No3', 'No4'] dates = pd.date_range('2015-1-1', periods=9, freq='M') df.index = dates print(df) 输出结果: No1 No2 No3 No4 2015-01-31 -0.991982 -0.179645 -0.045374 0.956476 2015-02-28 1.831624 2.043415 -0.986586 1.073712 2015-03-31 1.508740 2.262742 0.022831 0.543690 2015-04-30 -0.101480 1.321918 0.144027 -0.055291 2015-05-31 -0.445274 -0.242240 -0.188466 0.803470 2015-06-30 0.170965 0.156727 1.015219

栈和队列的相互转化

与世无争的帅哥 提交于 2020-02-12 02:18:36
用桟实现队列 算法思路 1.入队列:将元素放置到s1中 2.出队列:检测s2是否为空,若为空,将s1中的元素搬移到s2中,删除s2栈顶的元素;若不为空,则删除s2栈顶的元素 3.获取队头元素:检测s2是否为空,若为空,将s1中元素搬移到s2中;若不为空,则从s2栈顶直接获取 4.检测队列是否为空:若两个栈都为空,则队列为空 Java代码 class MyQueue { private Stack < Integer > s1 ; //模拟入队列 private Stack < Integer > s2 ; //模拟出队列 /** Initialize your data structure here. */ public MyQueue ( ) { s1 = new Stack < > ( ) ; s2 = new Stack < > ( ) ; } /** Push element x to the back of queue. */ public void push ( int x ) { s1 . push ( x ) ; } /** Removes the element from in front of queue and returns that element. */ public int pop ( ) { if ( s2 . isEmpty ( ) ) {

Python分位数的计算

若如初见. 提交于 2020-02-11 01:39:26
案例1 Ex1: Given a data = [6, 47, 49, 15, 42, 41, 7, 39, 43, 40, 36],求Q1(25分位), Q2(50分位), Q3(75分位), IQR Solving: 步骤: 1. 排序,从小到大排列data,data = [6, 7, 15, 36, 39, 40, 41, 42, 43, 47, 49] 2. 计算分位数的位置 3. 给出分位数 分位数计算法一 pos = (n+1)*p,n为数据的总个数,p为0-1之间的值 Q1的pos = (11 + 1)*0.25 = 3 (p=0.25) Q1=15 Q2的pos = (11 + 1)*0.5 = 6 (p=0.5) Q2=40 Q3的pos = (11 + 1)*0.75 = 9 (p=0.75) Q3=43 IQR = Q3 - Q1 = 28 import math def quantile_p(data, p): pos = (len(data) + 1)*p #pos = 1 + (len(data)-1)*p pos_integer = int(math.modf(pos)[1]) pos_decimal = pos - pos_integer Q = data[pos_integer - 1] + (data[pos_integer] - data

强化学习:双Q学习算法

巧了我就是萌 提交于 2020-01-21 04:50:03
双Q学习算法 vs Q学习算法 问题提出 如图所示,这个MDP有两个非终止节点A和B,每幕都从A开始并选择向左或者向右。选择向右会立刻转移到终止状态并得到值为0的回报,选择向左则会到达节点B且得到值为0的回报。B状态下有很多种可能的动作,每种动作选择后都会从一个均值为-0.1、方差为1.0的正太分布中得到一个回报,然后到达终止状态。 我们的目的是分别用Q学习和双Q学习算法实现这个MDP过程,并设置参数记录在多次循环后该MDP过程在每幕中选择向左的概率,以比较两种算法的最大化偏差,进而比较两种算法的优劣。 问题解决 状态A有两个动作:left:0、 right:1 状态B设置有4个动作:0, 1, 2, 3;选择任何一个动作都会到达终止状态。 状态C(终止状态)一个动作:0;用来更新Q(s,a),此状态下终止MDP,不会选择动作。 Q(s,a)代表Q学习算法的状态-动作值函数;Q1(s,a)和Q2(s,a)代表双Q学习的状态-动作值函数。两者的初始化同上一篇博客的问题解决里的内容类似,不赘述。 其它参数:alpha:0.1,gamma: 1,epsilon: 0.1 算法 给出双Q学习的算法,Q学习算法上一篇博客已给出。 程序 由于程序较长,只给出与双Q学习算法有关的程序代码。注释写的也蛮清晰的。 ''' 函数功能:双Q学习算法动作选择策略 输入:state、epsilon 输出

2019-12-22

送分小仙女□ 提交于 2019-12-22 18:45:16
标题 提问 用一个 while循环语句把队列Q1的内容移动到队列Q2操作后队列Ql应该为空 用一个 while循环语句把队列Q1的内容复制到队列Q2操作后队列Ql和队列Q2应该相等 来源: CSDN 作者: weixin_45898456 链接: https://blog.csdn.net/weixin_45898456/article/details/103654139

四分位数计算方法总结

你。 提交于 2019-12-22 02:56:09
总结一个小知识,仅供参考。 1、数列项为奇数时: 3、5、9、11、17、19、35 先计算位置,在通过位置计算对应的数值 Q1:(n+1)*0.25=2 Q2:(n+1)*0.5=4 Q3:(n+1)*0.75=6 当下标正好为整数时,对应的数值为Q1=5、Q2=11、Q3=19 3、5、9、11、17 Q1:(n+1)*0.25=1.5 Q2:(n+1)*0.5=3 Q3:(n+1)*0.75=4.5 当计算的下标不是整数时,对应的数值为Q1=(3+5)*0.5=4、Q2=9、Q3=(11+17)*0.5=14 2. 数列项为偶数时 3、5、9、11、17、19 Q2的值为中间两个数字和除以2 Q1位置:(n+1)/ 4 = 1.75 Q3位置:3(n+1)/ 4=5.25 对应值得计算为落到位置的区间值,低位+(高位-低位)*小数部分 Q1值:3+(5-3)* 0.75 = 4.5 Q3值:17+(19-17)* 0.25 = 17.5 来源: CSDN 作者: 罗罗诺亚-小鱼 链接: https://blog.csdn.net/Tracycater/article/details/103647939

链表实现一元多项式相加

风格不统一 提交于 2019-12-05 17:29:08
一元多项式相加,多项式相加 #include<stdlib.h> #include<stdio.h> typedef struct pnode { float coef; //系数域 int exp; //指数域 struct pnode *next; //指针域 }PolyNode; PolyNode *PolyAdd(PolyNode *A,PolyNode *B) { int i,j,k; float x; PolyNode *q1,*q2,*ptr,*q; /*q1指向A,q2指向B,ptr保存两个式子相加结果*/ q1=A; q2=B; q=malloc(sizeof(PolyNode)); q->coef=0; q->exp=-1; q->next=NULL; ptr=q; q1=q1->next; q2=q2->next; while((q1!=NULL)&&(q2!=NULL)) //当两个多项式都没有合并结束的时候 { if(q1->exp==q2->exp) //两个多项式系数相等的时候 { x=q1->coef+q2->coef; if(x!=0) //将保存相加的这项保存到ptr中 { q->next=malloc(sizeof(PolyNode)); q=q->next; q->coef=x; q->exp=q1->exp; } q1=q1->next;

AcWing 1091. 理想的正方形

孤者浪人 提交于 2019-12-04 08:46:50
题目描述 有一个 a×b 的整数组成的矩阵,现请你从中找出一个 n×n 的正方形区域,使得该区域所有数中的最大值和最小值的差最小。 输入样例 5 4 2 1 2 5 6 0 17 16 0 16 17 2 1 2 10 2 1 1 2 2 2 输出样例 1 题目分析 这道题一看,发现很像滑动窗口,只不过变成了二维的. 所以就是一个二维滑动窗口. 前置知识 既然是二维的滑动窗口,那么我们就必须先会一维.也就是一维单调队列. 那么就在此简单的讲一下单调队列的实现: 以最大值为例,既然我们想要保证队列开头为答案,那么我们就要保证每次更新使最大值一直放在队列。 当前队头就是目前最大值,那么如果我们要求进入一个新的值的时候,应该怎么办呢? 1.可以想,我们的区间长度是不超过k的那么如果当前队列里和我目前将要进队的这个值的位置相差超过了k那么就得出队。 2.还有一种情况,因为队列是从大到小排序的,最新的值又是从队尾入的,所以我们现在要保持单调性的话,就必须把对尾的所有小于现在数给踢掉. 参考代码 int k; int a[N],q[N]; int head,tail; head=tail=0; for(int i=1;i<=n;++i){ while(head<=tail&&i-q[head]>k) head++; while(head<=tail&&a[i]>=a[q[tail]])