GVKun编程网logo

断言 Scipy 单变量样条严格递增

15

在这篇文章中,我们将为您详细介绍断言Scipy单变量样条严格递增的内容。此外,我们还会涉及一些关于801.MinimumSwapsToMakeSequencesIncreasing为使两个数组严格递增

在这篇文章中,我们将为您详细介绍断言 Scipy 单变量样条严格递增的内容。此外,我们还会涉及一些关于801. Minimum Swaps To Make Sequences Increasing 为使两个数组严格递增,所需要的最小交换次数、HDU 6357.Hills And Valleys-字符串非严格递增子序列(LIS最长非下降子序列)+动态规划(区间翻转l,r找最长非递减子序列),好题哇 (2018 Multi-Univer...、IM 即时通信学习总结(2):IM 学习基础 - 严格递增、javascript – 表达式的单变量导数(符号)的知识,以帮助您更全面地了解这个主题。

本文目录一览:

断言 Scipy 单变量样条严格递增

断言 Scipy 单变量样条严格递增

寻找单调插值、pchip 和/或 akima。这些至少是局部单调的。

801. Minimum Swaps To Make Sequences Increasing 为使两个数组严格递增,所需要的最小交换次数

801. Minimum Swaps To Make Sequences Increasing 为使两个数组严格递增,所需要的最小交换次数

[抄题]:

We have two integer sequences A and B of the same non-zero length.

We are allowed to swap elements A[i] and B[i].  Note that both elements are in the same index position in their respective sequences.

At the end of some number of swaps, A and B are both strictly increasing.  (A sequence is strictly increasing if and only if A[0] < A[1] < A[2] < ... < A[A.length - 1].)

Given A and B, return the minimum number of swaps to make both sequences strictly increasing.  It is guaranteed that the given input always makes it possible.

Example:
Input: A = [1,3,5,4], B = [1,2,3,7]
Output: 1
Explanation: 
Swap A[3] and B[3].  Then the sequences are:
A = [1, 3, 5, 7] and B = [1, 2, 3, 4]
which are both strictly increasing.

 [暴力解法]:

时间分析:

空间分析:

 [优化后]:

时间分析:

空间分析:

[奇葩输出条件]:

[奇葩corner case]:

有两个if时,为了防止两个if都不满足的情况,swap not_swap太小而搅屎棍干扰结果,初始值每次都设置成最大N

[思维问题]:

对dp很恐惧,没做过 不知道交换以后应该怎么检查,但是后续检查其实没有必要

[英文数据结构或算法,为什么不用别的数据结构或算法]:

个数的dp需要新建数组

两个变量赋值相等,可以用连等号~

not_swap[i] = swap[i] = N;

[一句话思路]:

头一回做:递增可能不能换 能换可能不递增,所以需要把两步分开

[输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入):

[画图]:

[一刷]:

[二刷]:

[三刷]:

[四刷]:

[五刷]:

  [五分钟肉眼debug的结果]:

[总结]:

有两个if时,为了防止两个if都不满足的情况,swap not_swap太小而搅屎棍干扰结果,初始值每次都设置成最大N

[复杂度]:Time complexity: O(n) Space complexity: O(n)

[算法思想:递归/分治/贪心]:贪心

[关键模板化代码]:

坐标型:不存在前0位(没意义),第0位就能用 返回f[n - 1]

1- n位在循环中用,第0位直接在定义中用

swap[0] = 1;

[其他解法]:

[Follow Up]:

[LC给出的题目变变变]:

 [代码风格] :

class Solution {
    public int minSwap(int[] A, int[] B) {
        //ini: swap[1000], not_swap[1000]
        int N = A.length;
        int[] swap = new int[1000];
        int[] not_swap = new int[1000];
        swap[0] = 1;
        not_swap[0] = 0;
        
        //for loop 1 < n
        for (int i = 1; i < N; i++) {
            swap[i] = N; not_swap[i] = N;
            //compare normal or not
            if (A[i - 1] < A[i] && B[i - 1] < B[i]) {
                not_swap[i] = Math.min(not_swap[i], not_swap[i - 1]);
                swap[i] = Math.min(swap[i], swap[i - 1] + 1);
            }
            //compare exchangeable or not
            if (A[i - 1] < B[i] && B[i - 1] < A[i]) {
                not_swap[i] = Math.min(not_swap[i], swap[i - 1]);
                swap[i] = Math.min(swap[i], not_swap[i - 1] + 1);
            }
        }
        
        return Math.min(swap[N - 1], not_swap[N - 1]);
    }
}
View Code

 

HDU 6357.Hills And Valleys-字符串非严格递增子序列(LIS最长非下降子序列)+动态规划(区间翻转l,r找最长非递减子序列),好题哇 (2018 Multi-Univer...

HDU 6357.Hills And Valleys-字符串非严格递增子序列(LIS最长非下降子序列)+动态规划(区间翻转l,r找最长非递减子序列),好题哇 (2018 Multi-Univer...

 

6357.

Hills And Valleys

 

自己感觉这是个好题,应该是经典题目,所以半路选手补了这道字符串的动态规划题目。

题意就是给你一个串,翻转任意区间一次,求最长的非下降子序列。

 

一看题面写的0Ai9 (i=1,2,,n).就知道肯定有点东西,只要这么写,肯定就是有某个神奇的操作可以解决这道题目。

比赛的时候脑壳都要炸了也没想出来,补题的时候懂了,我可以定义一个b串为0123456789,这肯定是递增的,所以我翻转b的某个区间,然后去和a匹配,因为我把b再翻转回来,还是递增的。

当然了,因为是非严格的递增子序列,有相等的情况,所以相等的时候判断一下,直接+1就可以了。然后枚举一下b的翻转区间就可以了。因为还要输出翻转的区间,所以在dp的时候,用个数组分别保存一下l,r端点就可以了。其他的没什么。

感觉这种思路还是很值得思考的,不处理a,通过其他的操作间接处理a,以后写题要多想想,也写过类似思路的,通过其他的操作间接得到答案,但是一打比赛就没脑子,mdzz,为什么我这么菜༼༎ຶᴗ༎ຶ༽

 

参考了其他人的题解写出来的。

首先官方题解:

 

然后别人的博客:HDU6357——Hills And Valleys

 

代码:

 1 //1008-6357-非严格递增子序列(最长非下降子序列)-字符串+dp-区间翻转,r找最长非递减子序列,好题哇
 2 #include<iostream>
 3 #include<cstdio>
 4 #include<cstring>
 5 #include<algorithm>
 6 #include<bitset>
 7 #include<cassert>
 8 #include<cctype>
 9 #include<cmath>
10 #include<cstdlib>
11 #include<ctime>
12 #include<deque>
13 #include<iomanip>
14 #include<list>
15 #include<map>
16 #include<queue>
17 #include<set>
18 #include<stack>
19 #include<vector>
20 using namespace std;
21 typedef long long ll;
22 
23 const double PI=acos(-1.0);
24 const double eps=1e-6;
25 const ll mod=1e9+7;
26 const int inf=0x3f3f3f3f;
27 const int maxn=1e5+10;
28 const int maxm=20+10;
29 #define ios ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
30 
31 int n,a[maxn],dp[maxn][maxm],b[maxm];
32 int ans,L,R,l,r,h;
33 int al[maxn][maxm],ar[maxn][maxm];
34 
35 int solve()
36 {
37     for(int i=0;i<=h;i++)
38         dp[0][i]=0;//初始化
39     for(int i=1;i<=n;i++){//a和b匹配
40         for(int j=1;j<=h;j++){
41             dp[i][j]=dp[i-1][j];
42             al[i][j]=al[i-1][j];//记录左端点
43             ar[i][j]=ar[i-1][j];//记录右端点
44             if(a[i]==b[j]){//如果有相等的情况,+1
45                 dp[i][j]=dp[i-1][j]+1;
46                 if(l==j&&!al[i][j])//如果当前的j就是b开始翻转的左端点,更新记录
47                     al[i][j]=i;
48                 if(r==j)//右端点
49                     ar[i][j]=i;
50             }
51             if(dp[i][j-1]>dp[i][j]){//更新答案
52                 dp[i][j]=dp[i][j-1];
53                 al[i][j]=al[i][j-1];
54                 ar[i][j]=ar[i][j-1];
55             }
56         }
57     }
58     return dp[n][h];
59 }
60 
61 char s[maxn];
62 
63 int main()
64 {
65     int t;
66     scanf("%d",&t);
67     while(t--){
68         scanf("%d%s",&n,s+1);
69         for(int i=1;i<=n;i++)
70             a[i]=s[i]-''0'';
71         h=0;
72         for(int i=0;i<=9;i++)
73             b[++h]=i;
74         L=R=l=r=1;
75         ans=solve();
76         for(int i=0;i<=9;i++){
77             for(int j=i+1;j<=9;j++){
78                 h=0;
79                 for(int k=0;k<=i;k++)
80                     b[++h]=k;//翻转区间的左部分不变
81                 l=h+1;
82                 for(int k=j;k>=i;k--)//要翻转的区间把数字翻转
83                     b[++h]=k;
84                 r=h;
85                 for(int k=j;k<=9;k++)//反转区间的右部分不变
86                     b[++h]=k;
87                 int tmp=solve();
88                 if(ans<tmp&&al[n][h]&&ar[n][h]){//更新结果
89                     ans=tmp;
90                     L=al[n][h];
91                     R=ar[n][h];
92                 }
93             }
94         }
95         printf("%d %d %d\n",ans,L,R);
96     }
97 }

 

 

 

 

 

溜了溜了,滚去补数据结构了。

 

IM 即时通信学习总结(2):IM 学习基础 - 严格递增

IM 即时通信学习总结(2):IM 学习基础 - 严格递增

2019 年 11 月 18 日

目录

概念

递增函数

递增数列

递增

严格递增

区别

一般形式


概念

严格递增:如果 x1<x2,  则 f (x1)<f (x2)

一般的增函数:如果 x1<x2,  则 f (x1)≤f (x2),或者说对某些点函数值可以相等

递增函数

其实直接从定义出发,可以知道,对于一个函数 f (x),f (x) 单调递增、f (x) 递增、f (x) 不减、f (x) 是增函数这四件事情是完全一样的。我们统一称之为单调递增。严格递增,也就是严格单调递增,的定义为,对任意 x1<x2,有:

  • f(x1)<f(x2)

而单调递增的定义为,对任意 x1<x2,有:

  • f(x1)<=f(x2)

就差在一个等号。用拉格朗日中值定理,可以证明,对于 f (x) x∈R 来说:

  • 若 f''(x)>0 恒成立,那么 f (x) 是严格单调递增的。
  • 若 f''(x)>=0 恒成立,那么 f (x) 是单调递增的。
  • f''(x)=0 是 f''(x)>=0 的特殊情形,所以当然也是单调递增的。

所以,就算一个函数是常数,我们也可以说它是单调递增的。(当然它也是单调递减的,这个情形比较特殊)

 

递增数列

对于一个数列,如果从数列的第 2 项起,每一项的值都不小于它前面的一项的值,则称这样的数列为递增数列。

递增

递增定义:定义域中任意 x1,x2,若 x1>x2,有 f (x1)≥f (x2),则称 f (x) 在定义域上单调递增。

递增数列定义: 从第 2 项起,每一项都不小于它的前一项的数列叫做递增数列。 [2] 

公式:

严格递增

严格递增定义:定义域中任意 x1,x2,若 x1>x2,有 f (x1)>f (x2),则称 f (x) 在定义域上严格单调递增。

严格递增数列定义: 从第 2 项起,每一项都大于它的前一项的数列叫做递增数列。 [2] 

公式:

区别


  递增数列与严格递增数列的区别:严格递增数列是模仿严格单调递增函数的定义来递增数列的,而递增数列定义认为某两相邻项相等也算递增数列。 [1]

一般形式

递增数列的一般形式可以写成:a1,a2,a3,…,an,an+1,an+2,…

其中,an+1≥an (n≥1,且 n 为整数)

数列中的项必须是数,它可以是实数,也可以是复数。 [1] 

用符号 {an} 表示数列,只不过是 “借用” 集合的符号,它们之间有本质上的区别:

  • 1. 集合中的元素是互异的,而数列中的项可以是相同的。
  • 2. 集合中的元素是无序的,而数列中的项必须按一定顺序排列,也就是必须是有序的。

 

javascript – 表达式的单变量导数(符号)

javascript – 表达式的单变量导数(符号)

我使用 JavaScript编写了一个HTML代码来区分单个变量函数.
我的代码是 here.我使用Mathjax打印输出.但产生的产出并未简化.例如,sin(x)/ cos(x)的导数产生为

((((cos(x))*(cos(x)))-((sin(x))*(-(sin(x)))))/((cos(x))^2))

这可以简化为

(sin(x)^2+cos(x)^2)/cos(x)^2

我用Dijkstra的调车码算法构造了表达式树.然后递归地构造了导数的表达式树.但我对简化有问题.

任何人都可以帮助简化输出产生的?我的知识不仅仅是基本的数据结构.

解决方法

我只能想到代数规则的实现.

>极端难以编码
>甚至更难调试

1.创建简化方程列表

>喜欢:

cos^2(x)+sin^2(x)=1
...

>这很容易
>但要注意不要在这里添加循环方程(所以它会循环而没有结束)
>或不简化输出的规则

2.创建替代方法列表

3.通过等式

>测试所有简化规则
>如果它是可应用的,那么应用它(难以编码)
>如果没有找到,那么尝试替换(极端难以正确编码)
>如果仍然没有找到,那么停止

4.所有等式的表示都是第3点

>方程式可以用更多方式写出来>乘法> exponentiol>分数等…>您需要测试所有变化

关于断言 Scipy 单变量样条严格递增的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于801. Minimum Swaps To Make Sequences Increasing 为使两个数组严格递增,所需要的最小交换次数、HDU 6357.Hills And Valleys-字符串非严格递增子序列(LIS最长非下降子序列)+动态规划(区间翻转l,r找最长非递减子序列),好题哇 (2018 Multi-Univer...、IM 即时通信学习总结(2):IM 学习基础 - 严格递增、javascript – 表达式的单变量导数(符号)等相关知识的信息别忘了在本站进行查找喔。

本文标签: