dfs

一幅图弄清DFT与DTFT,DFS的关系

南笙酒味 提交于 2020-04-24 22:43:55
很多同学学习了数字信号处理之后,被里面的几个名词搞的晕头转向,比如DFT,DTFT,DFS,FFT,FT,FS等,FT和FS属于信号与系统课程的内容,是对连续时间信号的处理,这里就不过多讨论,只解释一下前四者的关系。   首先说明一下,我不是数字信号处理专家,因此这里只站在学生的角度以最浅显易懂的性质来解释问题,而不涉及到任何公式运算。   学过卷积,我们都知道有 时域卷积定理 和 频域卷积定理 ,在这里只需要记住两点:1.在一个域的相乘等于另一个域的卷积;2.与脉冲函数的卷积,在每个脉冲的位置上将产生一个波形的镜像。(在任何一本信号与系统课本里,此两条性质有详细公式证明)   下面,就用这两条性质来说明DFT,DTFT,DFS,FFT之间的联系:   先看图片:   首先来说图(1)和图(2),对于一个模拟信号,如图(1)所示,要分析它的频率成分,必须变换到频域,这是通过傅立叶变换即 FT(Fourier Transform) 得到的,于是有了模拟信号的频谱,如图(2); 注意1:时域和频域都是连续的 !   但是,计算机只能处理数字信号,首先需要将原模拟信号在 时域离散化 ,即在时域对其进行采样,采样脉冲序列如图(3)所示,该采样序列的频谱如图(4),可见它的频谱也是一系列的脉冲。所谓时域采样,就是在时域对信号进行相乘,(1)×(3)后可以得到离散时间信号x[n],如图(5

[Luogu] P3958 奶酪

被刻印的时光 ゝ 提交于 2020-04-07 08:26:17
Luogu P3958 奶酪 传送门 这个题暴力可过【手动微笑】。好像据我知道的有BFS啦,DFS啦,还有并查集。 不管你怎么写,反正我写的DFS 【再次手动微笑】。首先读入数据,遍历每一个未访问的空洞进行DFS,再按距离判断哪个空洞可以继续到达,最后判断圆心高度加半径是否大于等于奶酪高度即可(即 \(hole[i].z + r \geqslant h\) )。哎,可怜一个水题,我竟然考场上爆炸, 还是太水啦 。 #include <algorithm> #include <cstdio> #include <cmath> typedef long long ll; int T, n, h, r, stp, vis[1001]; bool fnd; double tmp; struct che{ int x, y, z; bool operator < (const che &chi)const{return z < chi.z;} }c[1001]; inline double dist(int now, int i) { return sqrt(double(c[now].x - c[i].x) * (c[now].x - c[i].x) + double(c[now].y - c[i].y) * (c[now].y - c[i].y) + double(c[now].z -

DFS求岛的个数LeetCode 200. Number of Islands

会有一股神秘感。 提交于 2020-04-07 07:36:07
深度优先搜索算法(Depth-First-Search),是搜索算法的一种。它沿着树的深度遍历树的节点,尽可能深的搜索树的分 支。当节点v 的所有边都己被探寻过,搜索将回溯到发现节点v的那条边的起始节点。这一过程一直进行到已发现从源节点可达的所有节点为止。如果还存在未被发现的节点,则选择其中一个作为源节点并重复以上过程,整个进程反复进行直到所有节点都被访问为止。DFS属于盲目搜索。 算法步骤: 1. 访问顶点v; 2. 依次从v的未被访问的邻接点出发,对图进行深度优先遍历;直至图中和v有路径相通的顶点都被访问; 3. 若此时图中尚有顶点未被访问,则从一个未被访问的顶点出发,重新进行深度优先遍历,直到图中所有顶点均被访问过为止 200. Number of Islands Descriptor:Given a 2d grid map of '1's (land) and '0's (water), count the number of islands. An island is surrounded by water and is formed by connecting adjacent lands horizontally or vertically. You may assume all four edges of the grid are all surrounded by

POJ3134--IDDFS(迭代加深dfs)

不问归期 提交于 2020-04-06 17:50:34
题意: http://poj.org/problem?id=3134 应该好理解 思路: 枚举层数(也就是ans) dfs判断d到这个深度可不可以 +各种剪枝就能过 1 #define IOS ios_base::sync_with_stdio(0); cin.tie(0); 2 #include <cstdio>//sprintf islower isupper 3 #include <cstdlib>//malloc exit strcat itoa system("cls") 4 #include <iostream>//pair 5 #include <fstream>//freopen("C:\\Users\\13606\\Desktop\\Input.txt","r",stdin); 6 #include <bitset> 7 //#include <map> 8 //#include<unordered_map> 9 #include <vector> 10 #include <stack> 11 #include <set> 12 #include <string.h>//strstr substr strcat 13 #include <string> 14 #include <time.h>// srand(((unsigned)time(NULL)));

Codeforces Round #631 div1C(或者div2E) Drazil Likes Heap 题解

Deadly 提交于 2020-04-04 17:42:15
题目链接: https://codeforces.com/contest/1329/problem/C 或者: https://codeforces.com/contest/1330/problem/E ( 我来装b了,给各位看看我的压行技术 ,雾) 贪心,如果根节点能删则删,否则把左右儿子当作根分别dfs一下(说明一下,如果删除了某个节点导致深度g以内出现了0就说明不能删,因为这样导致最终无法得到高为g的满二叉堆了) 这里提供一下伪代码,可以和真·代码对照着看 void dfs(int x){ if(a[x]==0)return; while( 可以删除a[x] ) 删除a[x], 记录x; //记录x因为最后要输出这个 dfs(x*2); dfs(x*2+1); } 至于为什么这个贪心是对的呢,感性理解一下就是,每次操作,如果删除大儿子节点的收益一定不如删除它的父亲,因此首先要不断删除根节点。如果发现某节点不能删除,其大儿子也必定不能删除,这样可以发现整条链(由大儿子大孙子组成)都无法被删除。这时候考虑这条链上某个节点的小儿子,它一旦被删除也只会变更小,无法翻身成为大儿子,这样保证了整条链的稳定性,所以不能删除的节点终究还是不能删除(怎么好像有点悲伤),因此确实不用考虑不能删除的节点了 #include <bits/stdc++.h> using namespace std;

Dinic算法学习

不想你离开。 提交于 2020-04-04 06:04:04
转自 此文虽为转载,但博主的网络流就是从这开始的,认为写的不错 网络流基本概念 什么是网络流 在一个有向图上选择一个 源点 ,一个 汇点 ,每一条边上都有一个流量上限(以下称为 容量 ),即经过这条边的流量不能超过这个上界,同时,除源点和汇点外,所有点的入流和出流都 相等 ,而源点只有流出的流,汇点只有汇入的流。这样的图叫做 网络流 。 所谓网络或容量网络指的是一个连通的赋权有向图 D= (V、E、C) , 其中V 是该图的顶点集,E是有向边(即弧)集,C是弧上的容量。此外顶点集中包括一个起点和一个终点。网络上的流就是由起点流向终点的可行流,这是定义在网络上的非负函数,它一方面受到容量的限制,另一方面除去起点和终点以外,在所有中途点要求保持流入量和流出量是平衡的。(引自百度百科) 定义 我们定义: 源点:只有流出去的点 汇点:只有流进来的点 流量:一条边上流过的流量 容量:一条边上可供流过的最大流量 残量:一条边上的容量-流量 几个基本性质 基本性质一: 对于任何一条流,总有流量<=容量 这是很显然的 基本性质二 对于任何一个不是源点或汇点的点u,总有 ∑ p ∈ E k [ p ] [ u ] == ∑ q ∈ E k [ u ] [ q ] ( 其 中 k[i][j] 表 示 i 到 j 的 流 量 ) 这个也很显然,即一个点(除源点和汇点)的入流和出流相等 基本性质三

最大流 dinic

余生长醉 提交于 2020-04-04 05:59:08
Dinic算法(研究总结,网络流) 网络流是信息学竞赛中的常见类型,笔者刚学习了最大流Dinic算法,简单记录一下 网络流基本概念 什么是网络流 在一个有向图上选择一个 源点 ,一个 汇点 ,每一条边上都有一个流量上限(以下称为 容量 ),即经过这条边的流量不能超过这个上界,同时,除源点和汇点外,所有点的入流和出流都 相等 ,而源点只有流出的流,汇点只有汇入的流。这样的图叫做 网络流 。 所谓网络或容量网络指的是一个连通的赋权有向图 D= (V、E、C) , 其中V 是该图的顶点集,E是有向边(即弧)集,C是弧上的容量。此外顶点集中包括一个起点和一个终点。网络上的流就是由起点流向终点的可行流,这是定义在网络上的非负函数,它一方面受到容量的限制,另一方面除去起点和终点以外,在所有中途点要求保持流入量和流出量是平衡的。(引自百度百科) 定义 我们定义: 源点:只有流出去的点 汇点:只有流进来的点 流量:一条边上流过的流量 容量:一条边上可供流过的最大流量 残量:一条边上的容量-流量 几个基本性质 基本性质一: 对于任何一条流,总有流量<=容量 这是很显然的 基本性质二 对于任何一个不是源点或汇点的点u,总有 ∑ p ∈ E k [ p ] [ u ] == ∑ q ∈ E k [ u ] [ q ] (其中k[i][j]表示i到j的流量) ∑p∈Ek[p][u]==∑q∈Ek[u][q

序列自动机求回文子序列

白昼怎懂夜的黑 提交于 2020-04-03 21:43:21
直接看程序吧 LL Dfs(LL x,LL y) { if(f[x][y]) return f[x][y]; for(LL i=1;i<=a;++i) if(nxt1[x][i]&&nxt2[y][i]){ if(nxt1[x][i]+nxt2[y][i]>n+1) continue; if(nxt1[x][i]+nxt2[y][i]<n+1) f[x][y]++; f[x][y]=(f[x][y]+Dfs(nxt1[x][i],nxt2[y][i]))%mod; } return ++f[x][y]; }    来源: https://www.cnblogs.com/cutemush/p/12629015.html

7.16dfs例题:素数环

元气小坏坏 提交于 2020-04-03 15:31:07
素数环: 输入正整数n,对1-n进行排列,使得相邻两个数之和均为素数, 输出时从整数1开始,逆时针排列。同一个环应恰好输出一次。 n<=16 样例:  输入:   6  输出:   1 4 3 2 5 6   1 6 5 2 3 4 思路: 素数环特点,每个数和前一个数的和为素数。由题目得知输出从1开始,可以把初始化容量为n的数组,下标0的值固定为1。然后从下标1开始dfs。 已经填入1,那么从2~n开始尝试填入数组中,前提条件必须满足数组中没有尝试填入的这个数 ||和上一个数之和为素数。 如果满足条件则填入数组中,继续dfs下标得+1。然后做回溯。 出口,下标等于n && 数组的首尾相加为素数,则输出数组,并return。 1 import java.util.Scanner; 2 3 public class Seven_16dfs素数环 { 4 public static void main(String[] args) { 5 Scanner sc = new Scanner(System.in); 6 int n = sc.nextInt(); 7 int[] r = new int[n]; 8 r[0] = 1; 9 dfs(n, r, 1); 10 } 11 12 private static void dfs(int n, int[] r, int cur) {

[leetcode]_Path Sum I && II

杀马特。学长 韩版系。学妹 提交于 2020-04-03 14:26:52
都是考查DFS。经典回溯算法,问题在于我对该类型的代码不熟悉,目前以参考别人的代码,然后加上自己的实现为主,通过类似的题目加强理解。 一、给定一棵二叉树,判断是否存在从root到leaf的路径和等于给定值sum,存在返回true,否则返回false。 思路:DFS。 代码: 1 private boolean ifExist = false; 2 public boolean hasPathSum(TreeNode root, int sum) { 3 dfs(root , sum , 0); 4 return ifExist; 5 } 6 public void dfs(TreeNode node , int sum , int tempSum){ 7 if(node == null) return; 8 9 tempSum += node.val; 10 if(node.left == null && node.right == null && tempSum == sum){ 11 ifExist = true; 12 return; 13 } 14 dfs(node.left , sum , tempSum); 15 dfs(node.right , sum , tempSum); 16 17 } 网络上的DFS代码写的很流畅:参考一下,希望以后能写出这么流畅、舒服的代码。