精华内容
下载资源
问答
  • %2^7-1个伪随机码,载波频率为20KHz,利用MATLAB出QPSK调制波形的频谱和星座,其中码元速率为20kbps function [] = btest() %% 生成伪随机码 pngen = commsrc.pn('NumBitsOut',128); % 创建伪随机噪声发生...
  • 文章目录题目题目解析最后的解题代码 题目 题目解析 看完题目,很明显的给出字符串,要求判断该字符串是否可接受,这就...我们可以先出自动机的状态转移,根据状态转移得出对应的状态转移表,故可以通过数组来

    题目

    在这里插入图片描述

    题目解析

    看完题目,很明显的给出字符串,要求判断该字符串是否可接受,这就很明显了,形式语言与自动机恰好有这样的题目,给出可输入变量的集合,然后构造一个可接受某种语言的自动机,对于这道题的要求就相当于对可接受语言的描述,而给出的字符串就是随机给出的语言,我们只需要构造好对应语言的DFA就可以通过DFA确定该语言是否可接受。

    好了理论的课本知识分析到此为止,具体的代码如何敲呢?我们可以先画出自动机的状态转移图,根据状态转移图得出对应的状态转移表,故可以通过数组来描述该表,然后把对应的字符换成对应的输入编号(列标),通过自动机扫描完整个字符串变可以通过最后到达的状态是否可接受来判断字符串是否可接受即可。

    1. 根据题意画出状态转移图。在这里插入图片描述
    2. 将状态转移图转化为状态转移表以方便数组表示。在这里插入图片描述
    3. 将状态转移表用数组表示
    vector<vector<int> > transfer({
                    {0,  1,  6,  2,  -1, -1},
                    {-1, -1, 6,  2,  -1, -1},
                    {-1, -1, 3,  -1, -1, -1},
                    {8,  -1, 3,  -1, 4,  -1},
                    {-1, 7,  5,  -1, -1, -1},
                    {8,  -1, 5,  -1, -1, -1},
                    {8,  -1, 6,  3,  4,  -1},
                    {-1, -1, 5,  -1, -1, -1},
                    {8,  -1, -1, -1, -1, -1},
                    });
    
    1. 通过读取字符来进行自动机的状态转移。
    for(int i = 0; i < n; ++i){
                state = transfer[state][_make(s[i])];
                if(state < 0) return false;
            }
    
    1. 查看最后停下的状态是否可接受。
    return finals[state];
    

    最后的解题代码

    class Solution {
    public:
        bool isNumber(string s) {
            if(s.empty()) return false;
            int n = s.size();
    
            int state = 0;
    //在整个数的首部和尾部加上空格都是合法的,所以单独又开辟出一个8状态用于处理后面有空格的情况
            vector<bool> finals({0, 0, 0, 1, 0, 1, 1, 0, 1}); // 合法的终止状态
    
    //用二维数组画状态表,行标代表状态,列标表示在该状态下输入的变量,根据输入和当前状态来进行状态跳转(0状态为开始状态)
            vector<vector<int> > transfer({
                    {0,  1,  6,  2,  -1, -1},
                    {-1, -1, 6,  2,  -1, -1},
                    {-1, -1, 3,  -1, -1, -1},
                    {8,  -1, 3,  -1, 4,  -1},
                    {-1, 7,  5,  -1, -1, -1},
                    {8,  -1, 5,  -1, -1, -1},
                    {8,  -1, 6,  3,  4,  -1},
                    {-1, -1, 5,  -1, -1, -1},
                    {8,  -1, -1, -1, -1, -1},
                    });
            //开始根据输入的变量进行状态转移
            for(int i = 0; i < n; ++i){
                state = transfer[state][_make(s[i])];
                if(state < 0) return false;
            }//检查是否为合法状态(状态机是否接受该语言)
            return finals[state];
        }
    
    private:
        int _make(const char& c){
            switch(c){
                case ' ': return 0;
                case '+': return 1;
                case '-': return 1;
                case '.': return 3;
                case 'e': return 4;
                case 'E': return 4;
                default: return _number(c);
            }
        }
    
        int _number(const char& c)
        {
            if(c >= '0' && c <= '9')
                return 2;
            else
                return 5;
        }
    };
    
    
    展开全文
  • 傅立叶 使用傅里叶级数绘制的可视化。 您可以绘制自己的路径,它将计算并呈现可视化效果。 请注意,用户界面非常丑陋,但是您可以随时更改它:) 如何使用 按下“新路径”按钮将启动新路径。 允许您一条连续的线...
  • 不会介绍每个优化项目具体如何操作。PS:后续会有系列文章针对不同优化分类下的具体优化操作进行更详细的介绍。 <h2>1. 度量标准与设定目标 在进行性能优化之前,我们需要为应用选择一个正确的度量标准&...
  • 19.3.3用Rational Rose画状态图 19.4活动 19.4.1什么是活动 19.4.2详解活动 19.4.3用Rational Rose画活动 19.5小结 第20章包、构件和部署 20.1包 20.1.1什么是包 20.1.2详解包 20.1.3...
  • opengl 学习笔记

    2020-09-23 08:42:02
    假设当我们想告诉OpenGL去线段而不是三角形的时候,我们通过改变一些上下文变量来改变OpenGL状态,从而告诉OpenGL如何去绘图。一旦我们改变了OpenGL的状态为绘制线段,下一个绘制命令就会出线段而不是三

    状态机
    OpenGL自身是一个巨大的状态机(State Machine):一系列的变量描述OpenGL此刻应当如何运行。OpenGL的状态通常被称为OpenGL上下文(Context)。我们通常使用如下途径去更改OpenGL状态:设置选项,操作缓冲。最后,我们使用当前OpenGL上下文来渲染。

    假设当我们想告诉OpenGL去画线段而不是三角形的时候,我们通过改变一些上下文变量来改变OpenGL状态,从而告诉OpenGL如何去绘图。一旦我们改变了OpenGL的状态为绘制线段,下一个绘制命令就会画出线段而不是三角形。

    当使用OpenGL的时候,我们会遇到一些状态设置函数(State-changing Function),这类函数将会改变上下文。以及状态使用函数(State-using Function),这类函数会根据当前OpenGL的状态执行一些操作。只要你记住OpenGL本质上是个大状态机,就能更容易理解它的大部分特性。

    对象
    OpenGL库是用C语言写的,同时也支持多种语言的派生,但其内核仍是一个C库。由于C的一些语言结构不易被翻译到其它的高级语言,因此OpenGL开发的时候引入了一些抽象层。“对象(Object)”就是其中一个。

    在OpenGL中一个对象是指一些选项的集合,它代表OpenGL状态的一个子集。比如,我们可以用一个对象来代表绘图窗口的设置,之后我们就可以设置它的大小、支持的颜色位数等等。可以把对象看做一个C风格的结构体(Struct):

    struct object_name {
    float option1;
    int option2;
    char[] name;
    };
    译注

    在更新前的教程中一直使用的都是OpenGL的基本类型,但由于作者觉得在本教程系列中并没有一个必须使用它们的原因,所有的类型都改为了自带类型。但是请仍然记住,使用OpenGL的类型的好处是保证了在各平台中每一种类型的大小都是统一的。你也可以使用其它的定宽类型(Fixed-width Type)来实现这一点。

    当我们使用一个对象时,通常看起来像如下一样(把OpenGL上下文看作一个大的结构体):

    // OpenGL的状态
    struct OpenGL_Context {

    object* object_Window_Target;

    };
    // 创建对象
    unsigned int objectId = 0;
    glGenObject(1, &objectId);
    // 绑定对象至上下文
    glBindObject(GL_WINDOW_TARGET, objectId);
    // 设置当前绑定到 GL_WINDOW_TARGET 的对象的一些选项
    glSetObjectOption(GL_WINDOW_TARGET, GL_OPTION_WINDOW_WIDTH, 800);
    glSetObjectOption(GL_WINDOW_TARGET, GL_OPTION_WINDOW_HEIGHT, 600);
    // 将上下文对象设回默认
    glBindObject(GL_WINDOW_TARGET, 0);
    这一小段代码展现了你以后使用OpenGL时常见的工作流。我们首先创建一个对象,然后用一个id保存它的引用(实际数据被储存在后台)。然后我们将对象绑定至上下文的目标位置(例子中窗口对象目标的位置被定义成GL_WINDOW_TARGET)。接下来我们设置窗口的选项。最后我们将目标位置的对象id设回0,解绑这个对象。设置的选项将被保存在objectId所引用的对象中,一旦我们重新绑定这个对象到GL_WINDOW_TARGET位置,这些选项就会重新生效。

    展开全文
  • openGl学习记录001

    2020-12-18 16:17:45
    1、渲染:在电脑绘图中是指用软件从模型生成图像的过程,模型是用严格定义的语言或者数据结构对三维...假设当我们想告诉openGL去线段而不是三角形的时候,我们通过改变一些上下文变量来改变openGL 状态,从而告诉op

    1、渲染:在电脑绘图中是指用软件从模型生成图像的过程,模型是用严格定义的语言或者数据结构对三维物体的描述,它包括几何、视点、纹理以及照明信息。将三维场景中的模型,按照设定好的环境、灯光、材质以及渲染参数。
    2、openGL上下文(Context):指openGl 的状态
    3、openGGL自身是一个巨大的状态机(state Machine):一系列的变量描述openGl此刻应当如何运行。
    假设当我们想告诉openGL去画线段而不是三角形的时候,我们通过改变一些上下文变量来改变openGL 状态,从而告诉openGl如何绘图,一旦我们改变了openGL的状态为绘制线段。下一个绘制命令就会画出线段而不是三角形。
    当使用openGL的时候,我们会遇到一些状态设置函数(state-changing Function),这类函数将会改变上下文。以及状态使用函数(state-using Function),这类函数会根据当前openGl 的状态执行一些操作。只要记住openGL本质上是个大状态机,就能理解他的大部分特性。
    4、在openGL中一个对象是指一些选项的集合。它代表OpenGL状态的一个子集,比如,我们可以用一个对象来代表绘制窗口的设置。之后我们就可以设置它的大小、支持的颜色位数等等。可以把对象看做一个C风格的结构体。

    5、名词解释
    顶点数组对象:Vertex Array Object,VAO
    顶点缓冲对象:Vertex Buffer Object,VBO
    索引缓冲对象:Element Buffer Object,EBO或Index Buffer Object,IBO
    6、OpenGL的图形渲染管线(Graphics Pipeline 大多翻译为管线,实际指的是一堆原始图形数据途径一个输送管道,期间经过各种变化处理最总出现在屏幕的过程):
    图形渲染管线可划分为两个主要部分:第一部分:把你的3D坐标转换为2D坐标,第二部分是把2D坐标转变为时间的有颜色的像素。
    2D坐标和像素也是不同的。 2D坐标精确表示一个点在2D空间中的位置,而2D像素是这个点的近似值,2D像素受到你的屏幕/窗口分辨率的限制。
    7、深度:通常深度可以理解为Z坐标,它代表一个像素在空间中和你的距离。如果离你远就可能被别的像素遮挡。你就看不到它了,
    8、顶点缓冲对象(vertex Buffer Objects ,VBO)在我们在OpenGL教程中第一个出现的OpenGL对象。就像openGL中的其它对象一样,这个 缓冲有一个独一无二的ID。所以我们可以使用glGenBuffers函数和一个缓冲ID生成一个VBO对象。例如

    9 、应用流程:
    创建对象,绑定类型,设置数据。
    unsigned int VBO;
    glGenBuffers(1,$VBO);
    glBindBuffer(GL_ARRAY_BUFFER,VBO);
    glBufferData(GL_ARRAY_BUFFER,sizeof(vertices), vertices, GL_STATIC_DRAW);
    10、glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
    glBufferData是一个专门用来把用户定义的数据复制到当前绑定缓冲的函数,它的第一个参数是目标缓冲区的类型:顶点缓冲对象当前绑定到GL_ARRAY_BUFFER目标上。第一个参数指定传输的数据大小(以字节为单位);用一个简单sizeof计算出顶点数据的大小就行,第三个参数是我们希望发送的实际数据。
    第四个参数指定了我们希望显卡如果管理给定的数据,它有三种形式:
    GL_STATIC_DRAW :数据不会或几乎不会改变
    GL_DYNAMIC_DRAW:数据会被改变很多
    GL_STREAM_DRAW:数据每次绘制时都会改变
    三角形的位置数据不会改变,每次渲染调用时都保持原样,所以它的使用类型最好是GL_STATIC_DRAW,如果,比如说一个缓冲中的数据将频繁被改变,那么使用的类型就是GL_DYNAMIC_DRAW或GL_STREAM_DRAW.这样就能确保显卡把数据放在能够高速写入的内存部分。现在我们已经把顶点数据存储在显卡的内存中,用VBO这个顶点缓冲对象管理。
    11、向量(Vector)
    在图形编程中我们经常会使用向量这个数学概念,因为它简明第表达了任意空间中的位置和方向,并且它有非常有用的数学属性,在GLSL中一个向量有最多4个分量。每个分量都代表空间中的一个坐标,它们可以通过vec.x、vec.y、vec.z和vec.w来获取,注意vec.w分量不是用作表达空间中的位置的,而是用在所谓透视除法(Perspective Division)上。

    展开全文
  • 如何画一个1/4圆 如何画箭头 如何避免屏幕闪烁 如何产生复杂线条 如何显示JPG和GIF图像 怎样定制通用打印对话框CPrintDialog来实现打印功能 如何简易实现所见即所得的打印 如何确定当前打印机的页面大小和方向 如何...
  • tilegame_partyproject-源码

    2021-03-27 11:41:55
    每个块都配备了荧光笔动画,并具有一个变量来容纳块上的所有字符。 有不同的选择状态,基本上是一堆if / else语句。 运动系统是一种简单的递归算法,用于查找路径并突出显示所有路径。 如果在选择字符时突出...
  • C#编程经验技巧宝典

    热门讨论 2008-06-01 08:59:33
    24 <br>0050 using关键字的用法 24 <br>0051 变量的作用域 25 <br>2.5 其他 26 <br>0052 有效使用this对象 26 <br>0053 如何声明变量 26 <br>0054 如何声明相同类型的多个变量 26 ...
  • Foxpro 开发答疑160问

    2014-10-07 19:55:45
    51. 如何使用状态栏控件 184 52. 如何使用滑尺控件 188 53. 如何用MSComm控件 189 54. 如何使用日历控件 191 55. 如何使用日期挑选器控件 193 56. 如何使用TreeView控件 199 57. 如何使用工具条控件 206 58. ...
  • 状态栏 2-6 显示或者隐藏主窗口中的选项 2-7 使用应用项目浏览器 2-7 分离应用项目浏览器 2-8 文件夹 2-8 编辑器 2-9 组件 2-10 将组件添加到应用项目中 2-11 重命名、移去和删除组件 2-12 重命名组件 2-12 移去组件...
  • 这一篇将为大家介绍流程中的测试——上线——运营三大步骤分别怎么做(下红色为部署中,紫色为实施完成,蓝色为计划中): 1、 很遗憾的,获取状态组件是无法通过测试,只能在上线后进行检测,故我们选择可以进行...

    上一篇,我们完成了一个流程的初稿,那么我们要如何测试呢?这一篇将为大家介绍流程中的测试——上线——运营三大步骤分别怎么做(下图红色为部署中,紫色为实施完成,蓝色为计划中):

    wpsA7B7.tmp

    1、 很遗憾的,获取状态组件是无法通过测试,只能在上线后进行检测,故我们选择可以进行测试的组件将获取状态的组件替换掉(暂时选择运行.net命令,然后输入dir 变量):

    wpsA7C8.tmp

    2、 接着我们回到画布,在Designer上方,有一个名称“Runbook Tester”的按钮,这个就是有点像开发IDE中的调试工具,我们点击它:

    wpsA7E8.tmp

    3、 点击运行,就可以测试下运行的情况(当然如果有操作的话,那么操作还是生效的):

    wpsA809.tmp

    4、 显示详细信息,可以看到任务状态为success:

    wpsA829.tmp

    5、 在Runbook Tester中运行成功的话证明测试阶段已经通过,我们就可以回到Designer上,点击流程,然后按F2对流程进行改名:

    wpsA839.tmp

    6、 接着,我们就可以点击签入了,签入即确定修改,是运行前的最后一步,每次修改需要将流程先签出再进行修改:

    wpsA85A.tmp

    7、 最后点击运行,我们的流程就正式运行了!

    wpsA87A.tmp

    PS:为方便交流,VMCloudQQ群已开通,欢迎各位探讨任何关于虚拟化或云方面的技术,特别欢迎干货入驻!VMCloud群号:237241754(同时VMCloud系列讲坛将于近期上线各大IT网站,敬请期待!)

    展开全文
  • 4.6.3 如何添加成员变量 4.6.4 如何添加一个新类 第5 章 图形与文本 5.1 理解图形设备接口 5.2 设备描述表 5.2.1 什么是设备描述表 5.2.2 MFC 中的设备描述表类 5.2.3 获取设备描述表 5.3 Windows 的GDI ...
  • delphi 开发经验技巧宝典源码

    热门讨论 2010-08-12 16:47:23
    0024 声明局部变量、类变量和全局变量 19 0025 有效利用条件语句和嵌套条件语句 20 0026 有效利用循环语句和嵌套循环语句 21 0027 使用GoTo跳转语句 21 0028 有效使用Case Else语句 22 0029 保证数组循环...
  • 3.2.3 源状态限制 3.3 利用“历史记录画笔”润色 3.3.1 锐化和平滑 3.3.2 利用快照绘制 3.4 有创意的历史效果 第四章 蒙版和抽出 4.1 以快速蒙版模式编辑 4.1.1 快速蒙版如何工作 4.1.2 改变红色图层 4.1.3 渐变作为...
  • 0024 声明局部变量、类变量和全局变量 19 0025 有效利用条件语句和嵌套条件语句 20 0026 有效利用循环语句和嵌套循环语句 21 0027 使用GoTo跳转语句 21 0028 有效使用Case Else语句 22 0029 保证数组循环...
  • 0024 声明局部变量、类变量和全局变量 19 0025 有效利用条件语句和嵌套条件语句 20 0026 有效利用循环语句和嵌套循环语句 21 0027 使用GoTo跳转语句 21 0028 有效使用Case Else语句 22 0029 保证数组循环...
  • 0024 声明局部变量、类变量和全局变量 19 0025 有效利用条件语句和嵌套条件语句 20 0026 有效利用循环语句和嵌套循环语句 21 0027 使用GoTo跳转语句 21 0028 有效使用Case Else语句 22 0029 保证数组循环...
  • 0024 声明局部变量、类变量和全局变量 19 0025 有效利用条件语句和嵌套条件语句 20 0026 有效利用循环语句和嵌套循环语句 21 0027 使用GoTo跳转语句 21 0028 有效使用Case Else语句 22 0029 保证数组循环...
  • 0024 声明局部变量、类变量和全局变量 19 0025 有效利用条件语句和嵌套条件语句 20 0026 有效利用循环语句和嵌套循环语句 21 0027 使用GoTo跳转语句 21 0028 有效使用Case Else语句 22 0029 保证数组循环...
  • 你需要经常出关系来查看拟合情况,并且专注于保证拟合合理,既没有过拟合又没有欠拟合。 下面是一个图例,可以帮助理解: 明显地向两端寻找曲线点,看看这些形状和趋势是否有意义。 更高次的...
  • 47 理解存储类变量:类的静态变量 48 引入递归 49 理解循环:排序的问题 50 理解递归:数学问题 51 理解指针 52 理解指针:间接操作 53 理解数组 54 理解字符串作为char类型的数组 55 代码注释 第五章 文件——基本...
  • 47 理解存储类变量:类的静态变量 48 引入递归 49 理解循环:排序的问题 50 理解递归:数学问题 51 理解指针 52 理解指针:间接操作 53 理解数组 54 理解字符串作为char类型的数组 55 代码注释 第五章 文件——基本...
  • 47 理解存储类变量:类的静态变量 48 引入递归 49 理解循环:排序的问题 50 理解递归:数学问题 51 理解指针 52 理解指针:间接操作 53 理解数组 54 理解字符串作为char类型的数组 55 代码注释 第五章 文件——基本...
  • 47 理解存储类变量:类的静态变量 48 引入递归 49 理解循环:排序的问题 50 理解递归:数学问题 51 理解指针 52 理解指针:间接操作 53 理解数组 54 理解字符串作为char类型的数组 55 代码注释 第五章 文件——基本...

空空如也

空空如也

1 2 3 4 5 ... 11
收藏数 214
精华内容 85
关键字:

如何画状态变量图