精华内容
下载资源
问答
  • 一个包含产品层次结构和产销商品关系的知识图,总计1300种产品90000多个品牌,基于京东网站商品上下级概念,商品品牌之间关系,商品描述维度等知识库,基于该知识库可以支持商品属性库构建,商品销售问答,品牌...
  • CollectionCollections区别首先要说是,"Collection" "Collections"是两个不同概念;如下图所示,"Collection"是集合...Collection层次结构图Map层次结构图总结代码示例packagesimplejava;impor...

    Collection和Collections的区别

    首先要说的是,"Collection" 和 "Collections"是两个不同的概念;

    如下图所示,"Collection"是集合类(Collection)的顶级接口,然而”Collections“是一个提供了一系列静态方法的集合工具类;

    9204320858653018698054f2a229da22.png

    Collection的类层次结构图

    8c762ab0697bd821ff77d8b677e91776.png

    Map的类层次结构图

    8258f4315a4efe28bcfb2ae04407fd52.png

    总结

    a5f19efb8eb330df662b49e2b3a6a32d.png

    代码示例

    8f900a89c6347c561fdf2122f13be562.png

    961ddebeb323a10fe0623af514929fc1.png

    packagesimplejava;importjava.util.ArrayList;importjava.util.HashMap;importjava.util.HashSet;importjava.util.LinkedList;importjava.util.List;importjava.util.Map;importjava.util.Set;public classQ7 {public static voidmain(String[] args) {

    List a1 = new ArrayList();

    a1.add("Program");

    a1.add("Creek");

    a1.add("Java");

    a1.add("Java");

    System.out.println("ArrayList Elements");

    System.out.print("\t" + a1 + "\n");

    List l1 = new LinkedList();

    l1.add("Program");

    l1.add("Creek");

    l1.add("Java");

    l1.add("Java");

    System.out.println("LinkedList Elements");

    System.out.print("\t" + l1 + "\n");

    Set s1 = new HashSet(); //or new TreeSet() will order the elements;

    s1.add("Program");

    s1.add("Creek");

    s1.add("Java");

    s1.add("Java");

    s1.add("tutorial");

    System.out.println("Set Elements");

    System.out.print("\t" + s1 + "\n");

    Map m1 = new HashMap(); //or new TreeMap() will order based on keys

    m1.put("Windows", "2000");

    m1.put("Windows", "XP");

    m1.put("Language", "Java");

    m1.put("Website", "programcreek.com");

    System.out.println("Map Elements");

    System.out.print("\t" +m1);

    }

    }

    View Code

    结果打印:

    ArrayList Elements

    [Program, Creek, Java, Java]

    LinkedList Elements

    [Program, Creek, Java, Java]

    Set Elements

    [tutorial, Creek, Program, Java]

    Map Elements

    {Windows=XP, Website=programcreek.com, Language=Java}

    展开全文
  • Collection层次结构图 Map层次结构图 总结 代码示例 CollectionCollections区别 首先要说是,"Collection" "Collections"是两个不同概念; 如下图所示,"Collection"是集合类...

    Collection和Collections的区别

    首先要说的是,"Collection" 和 "Collections"是两个不同的概念;

    如下图所示,"Collection"是集合类(Collection)的顶级接口,然而”Collections“是一个提供了一系列静态方法的集合工具类;

    Collection的类层次结构图

    Map的类层次结构图

    总结

    代码示例

     View Code

    结果打印:

    ArrayList Elements
        [Program, Creek, Java, Java]
    LinkedList Elements
        [Program, Creek, Java, Java]
    Set Elements
        [tutorial, Creek, Program, Java]
    Map Elements
        {Windows=XP, Website=programcreek.com, Language=Java}

    转载于:https://www.cnblogs.com/fuhengheng/p/7998141.html

    展开全文
  • 局域网互联网通信都是在不同网络层次架构网络层次协议支持下完成。那么在这之中,它们定义以及作用是什么呢?我们如何将协议,结构,体系,层次进行定位呢?下面我们就几个问题来详细说一下。  ...
    局域网和互联网的通信都是在不同的网络层次架构和网络层次协议的支持下完成的。那么在这之中,它们的定义以及作用是什么呢?我们如何将协议,结构,体系,层次进行定位呢?下面我们就几个问题来详细说一下。
    

      局域网和互联网的通信都是在不同的网络层次架构和网络层次协议的支持下完成的。那么在这之中,它们的定义以及作用是什么呢?我们如何将协议,结构,体系,层次进行定位呢?下面我们就几个问题来详细说一下。

      1. 层次化体系结构中的几个基本概念

      (1)协议

      协议(Protocol)是一种通信规约。例如在邮政通信系统中,写信的格式、信封的标准和书写格式、信件打包以及邮包封面的约定等,这些都是邮政通信系统的通信规约。因此,在计算机网络通信过程中,为了保证计算机之间能够准确地进行数据通信,也必须制定一套通信规则,这套规则就是通信协议。

      (2)层次

      分层次(Layer)是人们处理复杂问题的基本方法。当人们遇到一个复杂问题的时候,通常习惯将其分解为若干个小问题,再一一进行处理。例如,对于邮政通信系统,这样一个涉及全国乃至世界各地区亿万人之间信件传送的复杂问题,解决方法是:将总体要实现的很多功能分配在不同的层次中;每个层次要完成的服务及服务实现的过程都有明确规定;不同地区的系统分成相同的层次;不同系统的同等层具有相同的功能;高层使用低层提供的服务时,并不需要知道低层服务的具体实现方法。

      邮政通信系统使用的层次化体系结构与计算机网络的体系结构有很多相似之处,其实质是对复杂问题采取的“分而治之”的结构化处理方法。层次化处理方法可以大大降低问题的处理难度,这正是网络研究中采用层次结构的直接动力。因此,层次是计算机网络体系结构中又一重要和基本的概念。

      (3)接口

      接口(Interface)就是同一节点内,相邻层之间交换信息的连接点。例如,在邮政通信系统中,邮箱就是发信人与邮递员之间规定的接口。同一个节点的相邻层之间存在着明确规定的接口,低层通过接口向高层提供服务。只要接口条件不变、低层功能不变,低层功能的具体实现方法与技术的变化不会影响整个系统的工作。因此,接口同样是计算机网络实现技术中一个重要与基本的概念。

      2. 网络体系结构

      网络协议对计算机网络是不可缺少的,一个功能完备的计算机网络需要制定一整套复杂的协议集。对于结构复杂的网络协议来说,最好的组织方式是层次结构模型。为此,将网络层次性结构模型与各网络层次协议的集合定义为计算机网络体系结构(Network Architecture)。网络体系结构对计算机网络应该实现的功能进行了精确的定义,而这些功能是用什么样的硬件与软件去完成的是具体的实现问题。体系结构是抽象的,而实现是具体的,它是指能够运行的一些硬件和软件。

      3. 网络体系结构的研究意义

      1974年,美国IBM公司提出了世界上第一个网络体系结构SNA(System Network Architecture),之后凡是遵循SNA结构的设备就可以方便地进行互连。随之而来的是,各个公司纷纷推出自己的网络体系结构,如Digital 公司的DNA等。这些网络体系结构的共同之处在于都采用了“层次”技术,而各层次的划分、功能、采用的技术术语等均不相同。因此,计算机网络采用层次结构,它有以下一些好处:

      各层之间相互独立。高层并不需要知道低层是如何实现的,而仅需要知道该层通过层间接口所提供的服务。

      灵活性好。当任何一层发生变化时,例如由于技术的进步促进实现技术的变化,只要接口保持不变,则在这层以上或以下的各层均不受影响。另外,当某层提供的服务不再需要时,甚至可将这层取消。由于各层独立,因此每层都可以选择最为合适的实现技术,各层实现技术的改变不会影响其他层。易于实现和维护。由于整个系统被分割为多个容易实现和维护的小部分,使得整个庞大而复杂的系统变得容易实现、管理和维护。

      有益于标准化的实现。由于每一层都有明确的定义,即每层实现的功能和所提供的服务都很明确,因此十分利于标准化的实施。

      随着信息技术的发展,各种计算机系统联网和各种计算机网络的互联成为人们迫切需要解决的课题。OSI参考模型以及网络层次协议就是在这个背景下提出并开展研究的。

    展开全文
  • 在一棵树中,根据结点之间层次关系的不同,对结点称呼也有所不同。我们来看下面这棵树,如下图所示: A 结点是 B 结点 C 结点上级,则 A 就是 B C 父结点,B C 是 A 子结点。 B C 同时是 A ...

    树是什么

    树是由结点和边组成的,不存在环的一种数据结构

    在这里插入图片描述
    树满足递归定义的特性。也就是说,如果一个数据结构是树结构,那么剔除掉根结点后,得到的若干个子结构也是树,通常称作子树。

    在一棵树中,根据结点之间层次关系的不同,对结点的称呼也有所不同。我们来看下面这棵树,如下图所示:

    • A 结点是 B 结点和 C 结点的上级,则 A 就是 B 和 C 的父结点,B 和 C 是 A 的子结点。
    • B 和 C 同时是 A 的“孩子”,则可以称 B 和 C 互为兄弟结点。
    • A 没有父结点,则可以称 A 为根结点。
    • G、H、I、F 结点都没有子结点,则称 G、H、I、F 为叶子结点。

    在这里插入图片描述
    当有了一棵树之后,还需要用深度、层来描述这棵树中结点的位置。结点的层次从根结点算起,根为第一层,根的“孩子”为第二层,根的“孩子”的“孩子”为第三层,依此类推。树中结点的最大层次数,就是这棵树的树深(称为深度,也称为高度)。如下图所示,就是一棵深度为 4 的树。
    在这里插入图片描述

    二叉树是什么

    在树的大家族中,有一种被高频使用的特殊树,它就是二叉树。在二叉树中,每个结点最多有两个分支,即每个结点最多有两个子结点,分别称作左子结点和右子结点。

    在二叉树中,有下面两个特殊的类型,如下图所示:

    • 满二叉树,定义为除了叶子结点外,所有结点都有 2 个子结点。
    • 完全二叉树,定义为除了最后一层以外,其他层的结点个数都达到最大,并且最后一层的叶子结点都靠左排列。
      在这里插入图片描述
      在这里插入图片描述
      存储二叉树有两种办法,一种是基于指针的链式存储法,另一种是基于数组的顺序存储法。
    • 链式存储法,也就是像链表一样,每个结点有三个字段,一个存储数据,另外两个分别存放指向左右子结点的指针,如下图所示:

    在这里插入图片描述

    • 顺序存储法,就是按照规律把结点存放在数组里,如下图所示,为了方便计算,我们会约定把根结点放在下标为 1 的位置。随后,B 结点存放在下标为 2 的位置,C 结点存放在下标为 3 的位置,依次类推。
      在这里插入图片描述
      根据这种存储方法,我们可以发现如果结点 X 的下标为 i,那么 X 的左子结点总是存放在 2i 的位置,X 的右子结点总是存放在 2i + 1 的位置。

    之所以称为完全二叉树,是从存储空间利用效率的视角来看的。对于一棵完全二叉树而言,仅仅浪费了下标为 0 的存储位置。而如果是一棵非完全二叉树,则会浪费大量的存储空间。

    如下图所示的非完全二叉树,它既需要保留出 5 和 6 的位置。同时,还需要保留 5 的两个子结点 10 和 11 的位置,以及 6 的两个子结点 12 和 13 的位置。这样的二叉树,没有完全利用好数组的存储空间。

    在这里插入图片描述

    树的基本操作

    接下来,以二叉树为例介绍树的操作,其他类型的树的操作与二叉树基本相似。

    可以发现,我们以前学到的数据结构都是“一对一”的关系,即前面的数据只跟下面的一个数据产生了连接关系,例如链表、栈、队列等。而树结构则是“一对多”的关系,即前面的父结点,跟下面若干个子结点产生了连接关系。

    要在数据结构中,查找具有某个数值特性的数据需要遍历每一条数据。这在“一对一”的结构中,直接按顺序访问就好了。可是,树是“一对多”的关系,那么我们该如何进行数据的遍历,才能保证每条数据都会被访问一次且没有遗漏呢?我们只有解决了遍历问题,才能通过树来进行数据的增删查操作。

    其实,遍历一棵树,有非常经典的三种方法,分别是前序遍历、中序遍历、后序遍历。这里的序指的是父结点的遍历顺序,前序就是先遍历父结点,中序就是中间遍历父结点,后序就是最后遍历父结点。不管哪种遍历,都是通过递归调用完成的。如下图所示:

    • 前序遍历,对树中的任意结点来说,先打印这个结点,然后前序遍历它的左子树,最后前序遍历它的右子树。
    • 中序遍历,对树中的任意结点来说,先中序遍历它的左子树,然后打印这个结点,最后中序遍历它的右子树。
    • 后序遍历,对树中的任意结点来说,先后序遍历它的左子树,然后后序遍历它的右子树,最后打印它本身。

    在这里插入图片描述
    Java代码如下:

    // 先序遍历
    public static void preOrderTraverse(Node node) {
        if (node == null)
            return;
        System.out.print(node.data + " ");
        preOrderTraverse(node.left);
        preOrderTraverse(node.right);
    }
    // 中序遍历
    public static void inOrderTraverse(Node node) {
        if (node == null)
            return;
        inOrderTraverse(node.left);
        System.out.print(node.data + " ");
        inOrderTraverse(node.right);
    }
    // 后序遍历
    public static void postOrderTraverse(Node node) {
        if (node == null)
            return;
        postOrderTraverse(node.left);
        postOrderTraverse(node.right);
        System.out.print(node.data + " ");
    }
    
    

    二叉树遍历过程中,每个结点都被访问了一次,其时间复杂度是 O(n)。接着,在找到位置后,执行增加和删除数据的操作时,我们只需要通过指针建立连接关系就可以了。对于没有任何特殊性质的二叉树而言,抛开遍历的时间复杂度以外,真正执行增加和删除操作的时间复杂度是 O(1)。树数据的查找操作和链表一样,都需要遍历每一个数据去判断,所以时间复杂度是 O(n)。

    二叉查找树的特性

    二叉查找树(也称作二叉搜索树)具备以下几个的特性:

    • 在二叉查找树中的任意一个结点,其左子树中的每个结点的值,都要小于这个结点的值。
    • 在二叉查找树中的任意一个结点,其右子树中每个结点的值,都要大于这个结点的值。
    • 在二叉查找树中,会尽可能规避两个结点数值相等的情况。
    • 对二叉查找树进行中序遍历,就可以输出一个从小到大的有序数据队列。如下图所示,中序遍历的结果就是
      10、13、15、16、20、21、22、26。
      在这里插入图片描述

    二叉查找树的查找操作

    在利用二叉查找树执行查找操作时,我们可以进行以下判断:

    • 首先判断根结点是否等于要查找的数据,如果是就返回。
    • 如果根结点大于要查找的数据,就在左子树中递归执行查找动作,直到叶子结点。
    • 如果根结点小于要查找的数据,就在右子树中递归执行查找动作,直到叶子结点。

    这样的“二分查找”所消耗的时间复杂度就可以降低为 O(logn)。

    二叉查找树的插入操作

    在二叉查找树执行插入操作也很简单。从根结点开始,如果要插入的数据比根结点的数据大,且根结点的右子结点不为空,则在根结点的右子树中继续尝试执行插入操作。直到找到为空的子结点执行插入动作。

    如下图所示,如果要插入数据 X 的值为 14,则需要判断 X 与根结点的大小关系:

    由于 14 小于 16,则聚焦在其左子树,继续判断 X 与 13 的关系。

    由于 14 大于 13,则聚焦在其右子树,继续判断 X 与15 的关系。

    由于 14 小于 15,则聚焦在其左子树。

    因为此时左子树为空,则直接通过指针建立 15 结点的左指针指向结点 X 的关系,就完成了插入动作。

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    二叉查找树插入数据的时间复杂度是 O(logn)。但这并不意味着它比普通二叉树要复杂。原因在于这里的时间复杂度更多是消耗在了遍历数据去找到查找位置上,真正执行插入动作的时间复杂度仍然是 O(1)。

    二叉查找树的删除操作

    二叉查找树的删除操作会比较复杂,这是因为删除完某个结点后的树,仍然要满足二叉查找树的性质。我们分为下面三种情况讨论。

    • 情况一,如果要删除的结点是某个叶子结点,则直接删除,将其父结点指针指向 null 即可。
      在这里插入图片描述
      在这里插入图片描述

    • 情况二,如果要删除的结点只有一个子结点,只需要将其父结点指向的子结点的指针换成其子结点的指针即可。

    在这里插入图片描述

    在这里插入图片描述

    • 情况三,如果要删除的结点有两个子结点,则有两种可行的操作方式。

    第一种,找到这个结点的左子树中最大的结点,替换要删除的结点。
    在这里插入图片描述
    在这里插入图片描述
    第二种,找到这个结点的右子树中最小的结点,替换要删除的结点。

    在这里插入图片描述
    在这里插入图片描述

    树的实际案例

    输入一个字符串,判断它在已有的字符串集合中是否出现过?(假设集合中没有某个字符串与另一个字符串拥有共同前缀且完全包含的特殊情况,例如 deep 和 dee。)如,已有字符串集合包含 6 个字符串分别为,cat, car, city, dog,door, deep。输入 cat,输出 true;输入 home,输出 false。

    我们假设采用最暴力的办法,估算一下时间复杂度。假设字符串集合包含了 n 个字符串,其中的字符串平均长度为 m。那么新来的一个字符串,需要与每个字符串的每个字符进行匹配。则时间复杂度为 O(nm)。

    但在 nm 的复杂度中,显然存在很多的无效匹配。例如,输入 home 时,6 个字符串都没有 h 开头的,则不需要进行后续的匹配。因此,如果可以通过对字符前缀进行处理,就可以最大限度地减少无谓的字符串比较,从而提高查询效率。这就是“用空间换时间”的思想,再利用共同前缀来提高查询效率。

    其实,这个问题利用树结构也可以完成。我们对字符串建立一个的树结构,如下图所示,它将字符串集合的前缀进行合并,每个根结点到叶子结点的链条就是一个字符串。

    在这里插入图片描述
    这个树结构也称作 Trie 树,或字典树。它具有三个特点:

    • 第一,根结点不包含字符;
    • 第二,除根结点外每一个结点都只包含一个字符;
    • 第三,从根结点到某一叶子结点,路径上经过的字符连接起来,即为集合中的某个字符串。
      在这里插入图片描述

    总结

    二叉树遍历的时间复杂度是 O(n)。有了遍历方式之后,你可以完成在指定位置的数据增删操作。增删操作的时间复杂度都是 O(1)。

    对于查找操作,如果是普通二叉树,则查找的时间复杂度和遍历一样,都是 O(n)。如果是二叉查找树,则可以在 O(logn) 的时间复杂度内完成查找动作。树结构在存在“一对多”的数据关系中,可被高频使用,这也是它区别于链表系列数据结构的关键点。

    展开全文
  • 在一棵树中,根据结点之间层次关系的不同,对结点称呼也有所不同。我们来看下面这棵树,如下图所示: A 结点是 B 结点 C 结点上级,则 A 就是 B C 父结点,B C 是 A 子结点。 B C 同时是 A ...
  • 摘:Storing Hierarchical Data in a Database Article(翻译版本) ... 作者:Gijs Van Tulder 翻译:ShiningRay @ NirvanaStudio ...无论你要构建自己论坛,在你网站上发布消息还是书写自己...
  • ssas 层次结构 We have already discussed quite some design tips for building Analysis Services (SSAS) Multidimensional cubes and dimensions: 我们已经讨论了很多有关构建Analysis Services(SSAS)多维...
  • 如果CPU在DMA初始化设置启动硬盘操作等方面用了1000个时钟周期,并且在DMA传送完成后中断处理需要500个时钟,则在硬盘100%处于工作状态情况下, CPU用于硬盘I/O操作时间百分比大约是多少?案例分析二:请求...
  • ios UIView父子关系和层次结构

    千次阅读 2015-02-12 19:00:23
    今天我们来认识下UIView父子关系。老样子首先在BOOL返回值下面创建窗口。 然后我们先来创建一个视图 -(void)createviews {  //父视图  UIView *redview =[ [UIView alloc]init];  redview.frame = ...
  • WEB 应用中整体结构和层次关系

    千次阅读 2004-03-01 10:05:00
    我们将讲述存在于各个建筑层的关系和在整个用应程序中各个部件所发挥的作用。将特别关注web层,它允许应用程序客户端通过网页的形式进行交流相互操作。Struts Framework是基于java servletJava server page ...
  • 集合类层次结构关系

    万次阅读 2013-11-16 21:47:01
    翻译人员: 铁锚 翻译时间: 2013年11月15日 原文链接: The interface and class hierarchy diagram for ...1. Collections(工具类) Collection(集合顶层接口) 区别 首先, “Collection” “Collections”
  • 轮廓的层次结构

    千次阅读 2020-10-23 08:23:51
    1.什么是层次结构 通常我们使用函数cv2.findContours 在图片中查找一个对象。有时对象 可能位于不同位置。还有些情况,一个形状在另外一个形状内部,这种 情况下我们称外部形状为父,内部形状为子。按照这种...
  • 精灵 一个用于精灵层次结构和场景管理库 例子 这是sprite可以执行。 (gifFPS较低,您可以自己尝试该示例以查看完整效果) 依存关系
  • 我们讨论结多项式KP层次结构之间的关系。 我们主要研究彩色亚历山大多项式的标度1钩性质:对于所有1钩Young图R,ARK(q)= A [1] K(q | R |)。通过Kontsevich构造,将其重新构造为 线性方程组。 看来,该系统的...
  • 指定用户定义层次结构中属性之间属性关系 : 您已了解本教程中内容,现在可以将属性层次结构组织到用户层次结构级别中,以便在多维数据集中为用户提供导航路径。用户层次结构可以表示自然层次结构(如市/县...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,898
精华内容 2,759
关键字:

层次和结构的关系