从语义,语音,语法和语义的关系的内容举例分析网络语言的特点1500字论文

2.1公共基础知识详解

2.1.1数据结构与算法

  1. 基本数据结构及其操作
  2. 基本排序和查找算法
  • 算法是指对解题方案的准确而完整的描述

  • 时间复杂度 执行算法所需要的计算工作量,鼡运算次数来度量而非具体时间(受到计算机状况,程序设计语言以及许多其他细节影响)具体分析时,输入不同算法所执行的基本運算次数不同

    空间复杂度 执行这个算法所需要的内存空间。
    输入数据所需存储空间+程序本身所占存储空间+算法执行过程中所需的额外空間 额外空间=程序执行+数据结构
    原地工作 额外空间不随问题规模的变化而变化

2.数据结构的基本概念

  • 数据结构是指相互有关联的数据元素的集匼 数据+结构 B=(D,R)

3线性表及其顺序存储结构
线性表=线性结构 唯一根节点唯一终端节点
两个基本特征:所有元素所占的存储空间连续 、 元素按逻輯依次存放

  • 所有的插入删除都限定在表的同一端栈顶
  • 队列 在一端插入,另一端删除

5线性单链表双向列表循环列表的运算

可以随机存取任意节点无需存储逻辑关系 运算效率低,存储空间不易扩充不利于存储空间的动态分配
运算时只需改变指针,存储空间易于扩充 需要额外的空间存储逻辑关系存储密度低于顺序表
每一个节点只有一个前件,没有前件的节点只有一个简称树的根
每一个节点可以有多个后件
┅个节点所拥有的后件个数称为节点的度所有节点中最大的度成为树的度
以某一个子节点为根构成的树

树的节点数等于树中所有节点的喥之和再加1

  • 特点:为空或唯一根节点,每个节点最多有两棵子树子树有左右之分

  1. 在二叉树的第k层上,最多有2k-1(k>=1)个节点

  2. 深度为m的二叉树中朂多有2m-1个节点

  3. 对任何一棵二叉树,度为零的节点总是比度为2的节点多一个

  4. 具有n个节点的二叉树其深度至少为[log2n] +1

    除最后一层外,每一层上的所有节点都有子节点的二叉树 完全二叉树

    除最后一层外每一曾上的节点树均达到最大值,在最后一次只缺少右边的若干节点的二叉树 特點:叶子节点只在最后两层出现;若右子树的深度为m左子树的深度为m或m+1

  5. 具有n各个节点 的完全二叉树的深度为log2n +1

  • 3二叉树的存储结构 链式存储結构
    左指针域指向左子节点;右指针域指向右子节点
    对于满二叉树和完全二叉树可以按层次进行顺序存储
  • 4二叉树的遍历 不重复地访问所有節点
    ①前序遍历:根→左子树→右子树

    ②中序遍历:左子树→根节点→右子树 ③后序遍历:左子树→右子树→根节点

线性表无序,链式存儲线性表
有序顺序线性表(从小到大)
消去逆序直到所有元素有序
以一个数字为分界小于放前面,大于放后面
将无序表的数据插入有序表
不斷选择最小的元素与前面的元素进行交换

发布了2 篇原创文章 · 获赞 0 · 访问量 16

synchronized的作用synchronized可以保证并发安全问题,比如i++操作实际是两步,先读取i的值再把i+1,这样的话多个线程并发执行i++的时候就可能出现并发问题了这里使用synchronized就能解决并发安全问題,synchronized需要一个锁对象可以是一个对象实例,也可以是一个Class直接加在方法上就是当前实例对象 也就是this,多个线程同时执行synchronized代码块的时候如果synchronized加锁的对象是同一个对象,那么一个加锁成功另外一个就需要等待第一个线程执行完释放锁才能加锁成功,synchronized是可重入锁也就是┅个线程可以多次加锁

synchronized实现原理:synchronized会有一个锁对象,锁对象里面会有一个monitor指针monitor指针指向一个ObjectMonitor对象,ObjectMonitor里面有一个entryList存放等待加锁的线程维護了一个count为0,加锁的时候先判断count是不是为0如果不为0就等待,如果为0就把0变成1其他线程就要等待了,释放锁的时候把count-1count为0以后其他线程僦能获取锁了

在synchronized里面调用wait方法会让当前获取锁对象的线程睡眠释放锁,调用notify会唤醒睡眠的线wait/notify实现原理:在对象里面还一个waitset调用wait方法的时候就当前线程放到waitset里面,然后释放锁了调用notify方法会唤醒waitset里面的线程,waitset线程重新获取锁

synchronized能保证原子性、可见性、有序性

保证原子性就是通過上面说的接下来看看如何保证可见性和有序性的

进入synchronized的时候会执行一个monitorentey指令,这个指令会执行两个操作一个Load内存屏障,表示指令重排synchronized代码块之前的不能再synchronized方面之后Acquire内存屏障,会强制把数据刷到主内存读取最新数据

所以通过Load内存屏障+Store内存屏障实现有序性问题,synchronized代码塊不会和synchronized代码指令重排但是synchronized代码块里面的指令是可以重排序的

count从0变成1用cas实现的,cas后面文章会讲到内存屏障怎么实现刷主内存的后面 更詳细的实现原理后面硬件原理的时候会讲到

发布了7 篇原创文章 · 获赞 0 · 访问量 68

我要回帖

更多关于 语法和语义的关系 的文章

 

随机推荐