精华内容
下载资源
问答
  • Oracle数据块、区段和段之间关系

    万次阅读 2011-12-19 18:12:06
    要想学好Oracle或管理好Oracle系统,Oracle名词理解、作用、逻辑关系,然后利用这些基本元素去组织和管理好Oracle。 2、数据块、区段和 这一章描述了Oracle数据库服务器中逻辑存储结构的本质和相互关系。 ...
    要想学好Oracle或管理好Oracle系统,Oracle名词理解、作用、逻辑关系,然后利用这些基本元素去组织和管理好Oracle。
    2、数据块、区段和段
    这一章描述了Oracle数据库服务器中逻辑存储结构的本质和相互关系。
    本章包含下列内容
    u 介绍数据段、区段和段
    u 数据块概述
    u 区段概述
    u 段概述
    介绍数据块、区段和段
    Oracle为数据库中的所有数据分配逻辑数据库空间。数据库空间的分配单位是数据块、区段和段。图2-1显示了这些数据结构之间的关系:
    图 2-1 段、区段、数据块的关系
    Oracle保存数据的最小颗粒是数据块(也叫逻辑块、Oracle块或页)。一个数据块对应于磁盘上特定数量的物理数据库空间。
    逻辑数据库空间的下一个层次是区段。一个区段是特定数目的连续数据块,用来保存特定类型的信息。
    区段之上的逻辑数据库存储层次叫段。段是一系列的区段,每个区段都分配为一个特定的数据结构,段中所有的区段都保存在同一个表空间上。例如,每个表的数据都保存在它自己的数据段中,但每个索引数据都保存在索引段中。如果表或者索引被分区,每个分区都保存在它自己的段中。
    Oracle为段分配空间的单位是区段。当一个段中现有的区段充满时,Oracle为这个段分配另一个区段。因为区段是按需分配的,段中的区段可能在磁盘上并不连续。
    一个段或它的所有区段都保存在一个表空间上。在一个表空间内,一个段可以包含来自多个数据文件的区段;就是说,段可以跨数据文件。虽然如此,每个区段只能来自于一个数据文件。
    虽然你可以分配额外的区段,但它的数据块是单独分配的。如果你为一个特定的实例分配一个区段,块会立刻分配到可用列表中。如果一个特定的实例没有分配区段,当高水位线移动时,会自动分配数据块。高水位线是段中可用空间和不可用空间的界线。
    数据块概述
    Oracle管理数据库的数据文件的存储空间的分配单位叫数据块。数据块是数据库使用的最小数据单位。相比之下,在物理的操作系统层次上,所有数据都保存为字节。每个操作系统都有一个块大小。Oracle访问数据是按Oracle数据块的倍数,不是操作系统块的倍数。
    标准块大小由初始化参数DB_BLOCK_SIZE大小决 定。另外,你可以制定不多于5个非标准块大小。数据块大小应该是操作系统块大小的倍数,这样可以最大限度的减少非必要的I/O。Oracle数据块是Oracle能够使用或者分配的最小存储空间。
    数据块格式
    Oracle数据块格式和数据块是否包含表、索引和聚集数据无关。图2-2描述了数据块的格式。
    图2-2 数据块格式
    头部(常量和变量)--Header(Common and Variable)
    头部包含通用的块信息,比如块地址和段类型(比如数据或者索引)
    表目录
    数据块的这部分包含在本块有数据的表的信息
    行目录
    数据块的这部分包含块中实际行的信息(包括行数据区域的每个行的地址)
    在数据块的首部分配了行目录空间之后,当行被删除时这个空间不会被回收。因此一个曾经包含50行的空块还在首部的行目录分配了100字节。Oracle只有在新行插入这个块时才会重用这部分区域。
    首部
    数据块头部、表目录和行目录合起来称作首部。块首部某些部分是固定大小的;整个块首部大小是个变量。平均来说,块首部的固定和变化部分总和在84到107字节之间。
    行数据
    数据块的这部分包含表或者索引数据。行可以跨块。
    空闲空间 Free Space
    空闲空间是为插入新行和需要更多空间的更新分配的空间(例如,当一个空值被更新为非空值)。
    在表、聚集或者索引的段空间分配的数据块中,空闲空间可以保存事务入口(transaction entries)。每个访问块中一个或者多个行的INSERT、UPDATE、DELETE、SELECT....FOR UPDATE语句都需要事务入口。事务入口需要的空间依赖于操作系统。虽然如此,在大多数操作系统中事务入口需要的空间大约是23字节。
    空闲空间管理
    空闲空间可以自动管理也可以手动管理。
    空闲空间可以在数据段内自动管理。段内空闲、已用空间都使用位图跟踪,而不使用空闲列表。自动段空间管理提供了下列优势:
    u 使用容易
    u 更好的利用空间,尤其是针对行大小不一致的对象。
    u 在并发访问时提供更好的性能
    u 在多实例情况下,更好的性能和空间利用率
        当你创建本地管理的表空间时指定了自动段空间管理。表空间上创建的所有段都使用这种指定。
        数据块的空闲空间的可用性和优化
        两种类型的语句可以提高一个或多个数据块的可用空间:DELETE语句和将现有值更新为更小的UPDATE语句。随后的INSERT语句只有在下列情况下才能使用这些类型的语句释放的空间:
    u 如果INSERT语句在相同的事务中且在空闲空间的语句之后,那么INSERT语句可以使用这个空间。
    u 如果INSERT语句和空闲空间的语句(可能是另一个用户运行的)在不同的事务中,然后INSERT语句只有在另一个事务提交并且需要这个空间时才会使用这个空闲空间。
    释放的空间在数据块的主要空闲空间中可能并不连续。Oracle只有在两种情况下会合并空闲空间(1)一个INSERT或UDPATE试图使用一个包含足够空闲空间来包含一个新行,并且(2)空间是分裂的,所以行无法插入块的连续部分中。Oracle只有在这种情况下才会挤压数据,因为不这样的话,Oracle系统会因为数据块的空闲空间的持续挤压而降低性能。
    行链接和行迁移
    在两种情况下,表中的一行数据太大无法插入一个单独的数据块中。在第一种情况下,行在第一次插入块时就非常大。在这种情况下,Oracle保存行的这些数据在段中现存的一个数据块链(一个或多个)中。行链接一般由大行产生,比如包含列类型为LONG或者LONG RAW的情况。行链接在这种情况下是不可避免的。
    虽然如此,在第二种情况下,一个行开始可以保存在数据块中,但是后来整个行大小增加了并且块的剩余空间已经用光了。在这种情况下,假定整个行可以保存在新块中,Oracle移动正行的数据到一个新数据块中。Oracle在原始行的小段上保存了包含迁移行的块指针。迁移行的rowid保持不变。
    当出现行迁移或者行链接时,相应的I/O性能会下降,因为Oracle必须扫描多余1个的数据块才能获得行的信息。
    PCTFREE,PCTUSED和行链接
    对手工管理表空间来说,对特定段中所有的数据块中针对插入和更新的使用空闲空间问题有两个空间管理参数:PCTFREE和PCTUSED。在你创建和修改表或聚集(拥有自己的数据段)时可以指定这两个参数。在创建和修改索引(拥有自己的索引段)时可以指定存储参数PCTFREE。
    PCTFREE参数
    PCTFREE参数设置了表中现存行可能的更新所保留的最小百分比的空闲空间。例如,假定你在CREATE TABLE语句中制定了下列参数:
    PCTFREE 20
    它规定了每个块针对块中现存行的可能更新需要保留的空间比例是20%。在行数据和块首部空间比例达到80%之前,新行可以增加到行数据区域,并且对应的信息可以加到首部的变量区域。图2-3描述了PCTFREE。
    图 2-3 PCTFREE
    PCTUSED参数
    PCTUSED参数设定了在新行加到块之前行数据加上首部在块中占有的最小百分比。当一个块使用达到了PCTFREE的限制时,Oracle认为这个块对于新插入行不可用,直到使用百分比降到参数PCTUSED之下位置。只要达到了这个值,Oracle就只对表上现存数据的更新才使用空闲空间。例如,假定你在CREATE TABLE语句中指定了下列参数:
    PCTUSED 40
    这种情况下,只有块的使用空间小于40%(假定块的使用空间之前达到了PCTFREEE)时,数据段上的数据块才对插入新行可用。图2-4描述了这个情况。
    图 2-4 PCTUSED
    PCTFREE和PCTUSED如何协同工作
    PCTFREE和PCTUSED协同工作优化了数据段中区段中数据块的空间使用。图2-5描述了两个参数的交互。
    图2-5 使用PCTFREE和PCTUSED维护数据块的空闲空间
    在一个新分配的数据块中,可用的插入空间是块大小减去块首部和空闲空间(PCTFREE)。更新块的现存数据可以使用任何可用空间。因此,更新可以减少块的可用个空间到小于PCTFREE的程度,这些节省的空间是为更新保留的,而不是插入。
    对于每个数据和索引段,Oracle维护一个或多个空闲列表(free lists),就是已经分配给段区段拥有空闲空间大于PCTFREE的块列表。这些块对插入可用。当你执行INSERT语句时,Oracle检查表的空闲列表来尽可能寻找对一个可用的数据块并使用它。如果块中的空闲空间对INSERT语句需要的空间来说不够大,并且块至少达到PCTUSED,这样Oracle将这个块从空闲列表中删除。一个段中多个空闲列表可以减少并发插入对空闲列表的争用。
    在提交DELETE和UPDATE语句之后,Oracle执行这个语句并检查使用空间是否在PCTUSED之下。如果是,块就进入事务空闲列表的起始部分,而且它是事务中第一个可用块。当事务提交之后,块的空闲空间对其他事务也可用。
    区段概述
    区段是数据库存储空间的一个逻辑单位,由多个连续的数据块组成。一个或多个区段组成一个段。当段中现存空间用光时,Oracle会对这个段分配一个新区段。
    区段何时分配
    当你创建一个表时,Oracle为表的数据段分配特定数量的数据块组成的一个初始化区段。虽然还没有行插入,初始化区段对应的这些Oracle数据块为表中的行预先保留。
    如果段中初始化区段的数据块用光,需要更多的空间来保存新数据,Oracle自动为这个段分配一个增加区段。一个增加区段尺寸是段中之前分配区段同样大小或者更大。
    为了维护方便,每个段的首部块包含这个段中区段目录。
    确定区段的数量和大小
    每个段定义的存储参数是基于区段的。存储参数在所有类型的段中都可以使用。它们控制Oracle如何为一个给定段分配数据库空间。例如,你可以指定为表数据初始化保留多少空间,或者你可以在CREATE TABLE语句的STORAGE子句中指定存储参数来限制表区段的数量。如果你没有指定表存储参数,然后它会使用表空间的默认存储参数。
    你可以使用字典管理表空间也可以使用本地管理表空间,前者依赖数据字典表来跟踪空间使用,后者使用位图(而不是数据字典表)来跟踪使用和空闲空间。因为本地管理表空间性能更好和更容易管理,如果区段管理方式没有明确指定的话,非SYSTEM持久表空间默认是本地管理的。
    本地管理的表空间可以使用统一区段大小或者系统自动指定的变化区段大小。当你创建表空间时,子句UNIFORM或者AUTOALLOCATE(系统管理)指定分配的类型:
    u 对于统一大小区段,你可以指定区段大小或者使用默认大小,默认大小为1M。根据给定的块大小,要保证每个区段至少包含5个数据块。临时表空间管理区段的方式只能采取这种方式。
    u 对于系统管理的区段,Oracle确定新增区段的最优大小,最小区段的大小是64K。如果表空间创建包括“segment space management auto”,如果数据库块大小是16k或者更高,然后Oracle管理段创建区段的最小尺寸是1M。这时持久表空间的默认管理方式。
    存储参数INITIAL,NEXT,PCTINCREASE和MINEXTENTS在本地管理的表空间中不能在表空间级别指定。虽然如此,他们可以在段级别指定。在这种情况下,INITIAL,NEXT,PCTINCREASE和MINEXTENTS一起来计算段的初始值。计算了段大小之后,内部机制来决定每个区段的大小。
    区段如何分配
    Oracle分配区段的机制依赖于采取本地管理还是字典管理方式。
    在表空间本地管理的情况下,Oracle先在表空间第一候选的数据文件上寻找可以分配给第一个区段的空间,然后查看数据文件的位图来查看是否有足够数目的空闲块。如果数据文件没有足够的空闲块,然后Oracle会转向新的数据文件。
    何时分配区段
    Oracle数据库提供了一个段顾问(Segment Advisor)来确定一个对象通过对象内碎片空间重组是否能够有足够的空间。
    通常来说,一个段中的区段不会返回空间给表空间,除非你删除包含这个段中数据的模式对象(使用DROP TABLE或者DROP CLUSTER命令)。但下列情况例外:
    u 表或聚集的拥有者或者拥有DELETE ANY权限的用户,可以使用TRUNCATE ....DROP STORAGE 语句来截断表或者聚集。
    u 一个DBA可以使用下列SQL语法来释放没有使用的区段:
    ALTER TABLE table_name DEALLOCATE UNUSED;
    u 如果回滚段指定了最优大小(OPTIMAL size),Oracle会定期的释放段中的一个或者多个区段。
    当释放了区段之后,Oracle会更新数据文件的视图(本地管理表空间)或者更新数据字典(字典管理的表空间)来将重新获得的区段标示为可用。在释放区段中的块上所有数据都无法访问。
    非聚集表中的区段
    一个非聚集表创建之后,除非你截断(truncate)它,数据库段中分配的所有数据块都只属于这个表。Oracle在一个块有足够空间的情况下插入新行。甚至你删除了表的所有行,Oracle也不会释放数据块,表空间的其他对象也无法使用这些数据块。
    在你删除一个非聚集表后,它的空间可以被回收给其他需要空间的区段使用。Oracle为表空间回收表数据段和索引段的所有区段,这些区段可以被同一表空间的其他模式对象使用。
    在字典管理的表空间下,当一个段需要比现存区段更大的区段时,Oracle标识和合并收回的区段来组成一个更大的区段。这个叫做联合区段。联合区段在本地管理的表空间是不必要的。因为不管它是否从一个区段还是多个区段收回,总是存在连续的空闲空间等待分配。
    聚集表的区段
    聚集表保存为聚集创建的数据段的信息。因此,如果你删除聚集中的一个表,聚集仍然保持聚集中的其他表的数据,而且不会回收区段。你也可以截断聚集(非Hash聚集)来释放区段。
    实体化视图和其日志的区段
    Oracle针对实体化视图和实体化视图日志的操作释放区段的方式类似于表和聚集。
    索引的区段
    只要索引存在,索引段中的所有区段都属于索引段。当你删除索引或者相关的表或者聚集时,Oracle释放区段,本表空间的其他对象可以使用这部分空间。
    临时段的区段
    当Oracle执行完一个需要临时段的语句时,Oracle自动删除临时段,并将段的区段释放给对应的表空间。一个简单的排序在执行语句的用户的临时表空间中分配一个临时段,然后会释放区段给表空间。
    多重排序可以使用临时表空间中专有的针对排序的排序段。这些排序段在实例运行过程中只分配一次,它们在排序之后不会释放,因为其他的多重排序还要使用。
    临时表中的临时段包含一个事务或者会话的多个语句涉及的数据。Oracle在事务或者会话的末尾删除临时段,释放分配给段的区段给关联的表空间。
    回滚段的区段
    Oracle周期性的检查数据库的回滚段,来检查是否超过了它们的最优尺寸。如果回滚段远大于最优尺寸(也就是说,有太多的区段),然后Oracle会自动从回滚段中释放一个或者多个区段。、
    段概述
    一个段是一系列的区段的集合,包含表空间内一个特定逻辑存储结构的所有数据。例如,对每个表Oracle会分配一个或者多个区段来组成表数据段,对每个索引Oracle也会分配一个或者多个区段来组成它的索引段。
    数据段介绍
    Oracle数据库中的一个数据段包含下列之一的所有数据:
    u 一个非分区表或者非聚集表
    u 一个分区表的一个分区
    u 聚集表
    Oracle在你使用CREATE命令创建表或者聚集时创建数据段。
    表或者聚集的存储参数指定了数据段的区段如何分配。你可以直接使用适当的CREATE或者ALTER语句来设置这些存储参数。这些存储参数影响数据获取和相关对象的数据段的存储效率。
    索引段介绍
    Oracle数据库中的每个非聚集索引都包含一个单独的索引段来存储所有的数据。对一个分区索引来说,每个分区都有一个简单索引段来存储它的数据。
    Oracle在你执行CREATE INDEX命令时创建一个索引或者分区索引的索引段。在这个语句中,你可以指定索引段的区段和创建这个索引段的表空间这些存储参数。(表段和关联索引段可以在不同的表空间上)。设定这些存储参数直接影响了数据存取和存储的效率。
    临时段介绍
    当执行查询时,SQL语句解析和执行的中间阶段常常需要临时工作空间。Oracle自动分配这些叫做临时段的磁盘空间。典型的是Oracle需要一个临时段来作为排序区域。如果排序操作能够在内存中进行或者使用索引找到其他的方式来执行操作,Oracle不会创建这个段。
    临时段需要的操作
    下列语句有时候会需要使用临时段:
    u CREATE INDEX
    u SELECT .。。。 ORDER BY
    u SELECT DISTINCT 。。。
    u SELECT 。。。 GROUP BY
    u SELECT ... UNION
    u SELECT ... INTERSECT
    u SELECT ... MINUS
    一些非索引连接和关联子查询可能需要使用临时段。例如,如果一个查询包含DISTINCT,GROUP BY,ORDER BY子句,Oracle可能需要2个临时段空间。
    临时表和它的索引的段
    Oracle可以对临时表和临时表索引分配临时段。临时表保存的数据只在一个事务或者会话存续期间保存。
    临时段如何分配
    Oracle分配临时段的方式针对查询和临时表而不同。
    查询的临时段分配
    Oracle在临时表空间的一个用户执行命令的会话中按照需要分配临时区段。在命令CREATE USER和ALTER USER中的TEMPORARY TABLESPACE子句中指定临时表空间。
    如果用户定义中不包含临时表空间,然后默认临时表空间为SYSTEM表空间。表空间的默认存储参数指定了临时段的区段的属性。Oracle在语句完成时会删除临时段。
    因为临时段的分配和释放非常频繁,所以需要针对临时段专门创建一个表空间。这样做的话,你可以跨磁盘设备分布I/O,而且可以避免SYTEM表空间和其他包含临时段的表空间的碎片。
    针对排序操作的临时段的改变记录除了临时段的空间管理操作之外都不保存在重做日志中。
    临时表和索引的临时段的分配
    当Oracle发布第一个INSERT到表的命令时会分配临时表的段。(这可以是一个内部的插入操作,比如CREATE TABLE AS SELECT)。临时表的第一个INSERT会分配表和其索引的段、创建索引的根页和分配需要的LOB段。
    用户把临时表的段创建在自己的临时表空间上。
    Oracle在事务末尾会删除事务型临时表的段,在会话末尾会删除会话型临时表的段。如果其他的事务或者会话共享这个临时表的使用,段会包含表中保留的数据。
    自动撤销管理介绍(Automatic Undo Management)
    Oralce维护了数据库的未生效修改信息。这些信息包含事务动作的记录,总体上叫做undo。Oracle使用undo处理如下事情:
    u 回滚活动事务
    u 恢复中断事务
    u 提供一致性读
    u 从逻辑错误中恢复
    自动撤销管理是基于undo表空间的。你可以在一个撤销表空间中分配空间,而不用分配多个不同大小的回滚段。
    自动撤销管理降低了管理回滚段空间的复杂性,让你可以指定undo在被重写之前会保持多长时间。Oracle强烈建议你使用回滚表空间来管理undo而不是使用回滚段。这样系统会自动调整undo数据在undo表空间中的持续周期,来满足需要查询这些undo信息的需要。如果当前undo表空间有足够的空间,你可以设定UNDO_RETENTION参数为一个低阀值,所以系统可以至少保持参数指定的使间内的undo信息。
    使用V$UNDOSTAT视图来监视和配置你的数据库系统来高效使用undo表空间。V$UNDOSTAT显示不同的undo和事务统计,例如这个实例消耗的undo空间大小。
    Oracle数据库包含一个undo顾问,可以提供建议来帮助你的undo环境的构建。
    Undo模式
    Undo模式提供了从手动撤销管理到自动撤销管理的迁移的灵活性。一个数据库系统可以在手动撤销管理或者自动撤销管理模式下运行。在手动撤销管理模式下,undo空间通过回滚段管理。自动管理模式下,undo空间通过undo表空间来管理。要使用自动撤销管理模式,数据库管理员只需要针对每个实例创建一个undo表空间,并设置UNDO_MANAGEMENT初始化参数为AUTO。强烈建议你在自动撤销管理模式下运行。
    Undo限额
    在自动撤销管理模式下,系统控制专门分配给事务的undo段,还能控制undo段的空间分配。一个糟糕的事务可能会消耗大量的undo空间,从而瘫痪整个系统。资源管理器指定UNDO_POOL是一个控制大事务的明确方法。这样数据库管理员可以将用户分成不同的消费组,每个消费组分配一个最大的undo空间限制。当一个组整个消耗的undo空间超过了这个限制,它的用户不能执行更多更新,除非本组其他用户的事务结束,undo空间释放。
    UNDO_POOL的默认值是UNLIMITED,这样用户可以消耗整个undo表空间的undo空间。数据库管理员可以直接使用UNDO_POOL来限制特定的用户。
    自动Undo保持
    Oracle 10g数据库自动调整undo持续周期的参数。Undo持续周期指定了老的undo信息必须保留的时间,就是提交的事务的undo信息可以覆盖的时间。数据库收集使用统计信息,基于这些统计信息和undo表空间的大小来调整undo持续周期。假定自动撤销管理功能被激活,数据自动象如下那样调整undo持续周期:
    展开全文
  • 个线段之间的位置关系

    千次阅读 2018-01-16 16:48:21
    个线段之间的位置关系 转载自平面内条线段的位置关系(相交)判定与交点求解 概念 平面内条线段位置关系的判定在很多领域都有着广泛的应用,比如游戏、CAD、图形处理等,而线交点的求解又是该算法中...

    两个线段之间的位置关系

    转载自平面内两条线段的位置关系(相交)判定与交点求解

    概念

    平面内两条线段位置关系的判定在很多领域都有着广泛的应用,比如游戏、CAD、图形处理等,而两线段交点的求解又是该算法中重要的一环。本文将尽可能用通俗的语言详细的描述一种主流且性能较高的判定算法。
    外积,又称叉积,是向量代数(解析几何)中的一个概念。两个二维向量v1(x1, y1)和v2(x2, y2)的外积v1×v2=x1y2-y1x2。如果由v1到v2是顺时针转动,外积为负,反之为正,为0表示二者方向相同(平行)。此外,文中涉及行例式和方程组的概念,请参阅线性代数的相关内容。
    为方便计算,对坐标点的大小比较作如下定义:x坐标较大的点为大,x坐标相等但y坐标较大的为大,x与y都相等的点相等。一条线段中较小的一端为起点,较大的一端为终点。

    问题

    给定两条线段的端点坐标,求其位置关系,并求出交点(如果存在)。
    

    分析

    两条线段的位置关系大体上可以分为三类:有重合部分、无重合部分但有交点(相交)、无交点。为避免精度问题,首先要将所有存在重合的情况排除。
    重合可分为:完全重合、一端重合、部分重合三种情况。显然,两条线段的起止点都相同即为完全重合;只有起点相同或只有终点相同的为一端重合(注意:坐标较小的一条线段的终点与坐标较大的一条线段的起点相同时应判定为相交)。要判断是否部分重合,必须先判断是否平行。设线段L1(p1->p2)和L2(p3->p4),其中p1(x1, y1)为第一条线段的起点,p2(x2, y2)为第一条线段的终点,p3(x3, y3)为第二条线段的起点,p4(x4, y4)为第二段线段的终点,由此可构造两个向量:

                                       v1(x2-x1, y2-y1),v2(x4-x3, y4-y3)
    

    若v1与v2的外积v1×v2为0,则两条线段平行,有可能存在部分重合。再判断两条平行线段是否共线,方法是用L1的一端和L2的一端构成向量vs并与v2作外积,如果vs与v2也平行则两线段共线(三点共线)。在共线的前提下,若起点较小的线段终点大于起点较大的线段起点,则判定为部分重合。
    没有重合,就要判定两条线是否相交,主要的算法还是依靠外积。然而外积的计算开销比较大,如果不相交的情况比较多,可先做快速排斥实验:将两条线段视为两个矩形的对角线,并构造出这两个矩形。如果这两个矩形没有重叠部分(x坐标相离或y坐标相离)即可判定为不相交。
    然后执行跨立试验。两条相交的线段必然相互跨立,简单的讲就是p1和p2两点位于L2的两侧且p3和p4两点位于L1的两侧,这样就可利用外积做出判断了。分别构造向量s1(p3, p1), s2(p3, p2),如果s1×v2与s2×v2异号(s1->v2与s2->v2转动的方向相反),则说明p1和p2位于L2的两侧。同理可判定p3和p4是否跨立L1。如果上述四个叉积中任何一个等于0,则说明一条线段的端点在另一条线上。
    当判定两条线段相交后,就可以进行交点的求解了。当然,求交点可以用平面几何方法,列点斜式方程来完成。但这样作会难以处理斜率为0的特殊情况,且运算中会出现多次除法,很难保证精度。这里将使用向量法求解。
    设交点为(x0, y0),则下列方程组必然成立:

                                                1. x0-x1=k1(x2-x1)    
                                                2. y0-y1=k1(y2-y1) 
                                                3. x0-x3=k2(x4-x3)
                                                4. y0-y3=k2(y4-y3)
    

    其中k1和k2为任意不为0的常数(若为0,则说明有重合的端点,这种情况在上面已经被排除了)。1式与2式联系,3式与4式联立,消去k1和k2可得:

                                        1. x0(y2-y1)-x1(y2-y1)=y0(x2-x1)-y1(x2-x1)
                                        2. x0(y4-y3)-x3(y4-y3)=y0(x4-x3)-y3(x4-x3)
    

    将含有未知数x0和y0的项移到左边,常数项移动到右边,得:

                                        1. (y2-y1)x0+(x1-x2)y0=(y2-y1)x1+(x1-x2)y1
                                        2. (y4-y3)x0+(x3-x4)y0=(y4-y3)x3+(x3-x4)y3
    

    设两个常数项分别为b1和b2:

                                            1. b1=(y2-y1)x1+(x1-x2)y1
                                            2. b2=(y4-y3)x3+(x3-x4)y3
    

    系数行列式为D,用b1和b2替换x0的系数所得系数行列式为D1,替换y0的系数所得系数行列式为D2,则有:

                                            1. |D|=(x2-x1)(y4-y3)-(x4-x3)(y2-y1)
                                            2. |D1|=b2(x2-x1)-b1(x4-x3)
                                            3. |D2|=b2(y2-y1)-b1(y4-y3)
    

    由此,可求得交点坐标为:

                                          x0=|D1|/|D|, y0=|D2|/|D|    
    
    展开全文
  • 个概念模型及算法之间关系

    千次阅读 2012-01-11 20:17:27
    在介绍具体链接分析算法之前,首先介绍个概念模型,并对各个链接分析算法之间关系进行说明,这样助于读者从宏观角度理解各个算法的基本思路与传承关系。 随机游走模型(Random Surfer Model) 互联网用户在...

    两个概念模型及算法之间的关系

    在介绍具体链接分析算法之前,首先介绍两个概念模型,并对各个链接分析算法之间的关系进行说明,这样有助于读者从宏观角度理解各个算法的基本思路与传承关系。

    随机游走模型(Random Surfer Model)

    互联网用户在上网时,往往有类似的网络行为:输入网址,浏览页面,然后顺着页面的链接不断打开新的网页。随机游走模型就是针对浏览网页的用户行为建立的抽象概念模型。之所以要建立这个抽象概念模型,是因为包括PageRank 算法在内的很多链接分析算法都是建立在随机游走模型基础上的。

    图 6-4 给出了随机游走模型的示意图。在最初阶段,用户打开浏览器浏览第1 个网页,假设我们有一个虚拟时钟用来计时,此时可以设定时间为1,用户在看完网页后,对网页内某个链接指向的页面感兴趣,于是点击该链接,进入第2 个页面,此时虚拟时钟再次计时,时钟走向数字2,如果网页包含了k 个出链,则用户从当前页面跳转到任意一个链接所指向页面的概率是相等的。用户不断重复以上过程,在相互有链接指向的页面之间跳转。如果对于某个页面所包含的所有链接,用户都没有兴趣继续浏览,则可能会在浏览器中输入另外一个网址,直接到达该网页,这个行为称为远程跳转(Teleporting)。假设互联网中共有m 个页面,则用户远程跳转到任意一个页面的概率也是相等的,即为1/m。随机游走模型就是一个对直接跳转和远程跳转两种用户浏览行为进行抽象的概念模型。

     

    下面我们给出一个具体的随机游走模型的例子,为简单起见,该例子并未引入远程跳转行为。

    在如图 6-5 所示的例子里,假设互联网由A、B、C 3 个网页构成,其相互链接关系如图中页面节点之间的有向边所示。根据链接关系,即可计算页面节点之间的转移概率,比如对于节点A 来说,只有唯一一个出链指向节点B,所以从节点A 跳转到节点B 的概率为1,对于节点C 来说,其对节点A 和B 都有链接指向,所以转向任意一个其他节点的概率为1/2。

     

      

     

     

    假设在时刻1,用户浏览页面A,之后经由链接进入页面B,然后进入页面C,此时面临两种可能选择,跳转进入页面 A 或者页面B 皆可,两者概率相同,都为1/2。

    假设例子中的互联网包含不止 3 个页面,而是由10 个页面构成,此时用户既不想跳回页面A,也不想跳回页面B,则可以按照1/10 的概率跳入其他任意一个页面,即进行远程跳转。

    子集传播模型

    子集传播模型是从诸多链接分析算法中抽象出来的概念模型(参见图6-6)。其基本思想是在做算法设计时,把互联网网页按照一定规则划分,分为两个甚至是多个子集合。其中某个子集合具有特殊性质,很多算法往往从这个具有特殊性质的子集合出发,给予子集合内网页初始权值,之后根据这个特殊子集合内网页和其他网页的链接关系,按照一定方式将权值传递到其他网页。

     

    本章介绍的一些链接分析算法符合子集传播模型,比如HITS 算法和Hilltop 算法及其衍生算法,在“网页反作弊”一章(第8 章)会看到更多符合此模型的链接分析算法。

    子集传播模型是个高度抽象的算法框架,很多算法可以认为是属于此框架的具体实例,即整体思路如上面所描述的流程,通常在以下几个方面各自存在不同。

    •如何定义特殊子集合,即在确定子集合内的网页应该有哪些特殊性质,具体算法

    规则不同。

    •在确定了特殊子集合所具有的性质后,如何对这个特殊子集合内网页给予一定的

    初始分值?不同算法打分方式各异。

    •从特殊子集合将其分值传播到其他网页时,采取何种传播方式?可传播的距离有

    多远?不同算法在此阶段也大都有差异。

    注意:子集传播模型是本书作者从具体链接分析算法中归纳出的抽象模型,未见有文献明确提出,请读者阅读时谨慎参考。

    链接分析算法之间的关系

    到目前为止,学术界已经提出了很多链接分析算法,图6-7 列出了其中影响力较大的一些算法及其相互关系,图中不同算法之间的箭头连接代表算法之间的改进关系,比如SALSA 算法即融合了PageRank 和HITS 算法的基本思路。其他算法所代表的关系与此类似,可在图中明显看出算法间的传承关系。

     

    尽管链接算法很多,但是从其概念模型来说,基本遵循上述小节介绍的随机游走模型和子集传播模型。而从图中可看出,在众多算法中,PageRank 和HITS 算法可以说是最重要的两个具有代表性的链接分析算法,后续的很多链接分析算法都是在这两个算法基础上衍生出来的改进算法。

    在本章后续章节中,将详细介绍PageRank 算法、HITS 算法、SALSA 算法、主题敏感PageRank 算法和Hilltop 算法。这些算法大都已被不同的商业搜索引擎所采用,在实际生活中发挥了很重要的作用。对于图6-7 所列出的其他链接分析算法,将在本章末尾简述其原理。

     

     

     

     

    ——本段文字节选自《这就是搜索引擎:核心技术详解》

    图书详细信息:http://blog.csdn.net/broadview2006/article/details/7179396

    展开全文
  • 类和类之间关系

    万次阅读 多人点赞 2018-06-28 17:21:10
    类和类之间的6种关系一、UMLa) Unified Modeling Language (UML)又称统一建模语言或标准建模语言b) 它是一个支持模型化和软件系统开发的图形化语言,为软件开发的所有阶段提供模型化和可视化支持c) 它不仅统一了...

    类和类之间的6种关系

    一、UML

    a) Unified Modeling Language (UML)又称统一建模语言或标准建模语言

    b) 它是一个支持模型化和软件系统开发的图形化语言,为软件开发的所有阶段提供模型化和可视化支持

    c) 它不仅统一了BoochRumbaughJacobson的表示方法,而且对其作了进一步的发展,并最终统一为大众所接受的标准建模语言

    d) UML定义了10种模型图,对应软件设计开发的不同阶段

    i. 用例图

    ii. 静态图:类图,包图,对象图。

    iii. 行为图状态图和活动图

    iv. 交互图:顺序图和协作图

    v. 实现图:组件图、部署图

     

    二、常用的UML软件

    a) 商业软件,功能强大

    a) Rational RoseUML建模为主,辅以数据库建模

    b) PowerDesigner:数据库建模工具、辅以UML建模

    c) MicroSoft Office visio:专业制图软件,地铁、装修、建筑都可以,也支持数据库和UML建模

    b) 开源软件、功能不弱

    a) starUML

    b) umlet

    c) eclipse(需要添加插件)

     

    三、类和类(接口)之间的关系

    1. 继承关系(泛化关系 Generalization

    a) 语义:

    i. 类和子类的关系,接口和子接口的关系;

    ii. 一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,并可以增加它自己的新功能

    b) 语法:extends

    c) 符号:

    i. 一条带空心三角箭头的实线,从子类指向父类,或者子接口指向父接口。

    ii. 

     

    2. 实现关系(Realization)

    a) 语义:

    i. 类和接口之间的关系;

    ii. 一个类可以实现多个接口,实现所有接口的功能;体现了规范和实现分离的原则

    b) 语法: implements

    c) 符号

    i. 实现用一条带空心三角箭头的虚线表示,从类指向实现的接口

    ii. 

     

    3. 依赖关系(Dependency)

    a) 语义:一个类A使用到了另一个类B,但是这种使用关系是具有偶然性的、临时性的、非常弱的,但是类B的变化会影响到类A

    b) 语法:类B作为类A的方法的参数(或者局部变量)存在

    c) 符号:

    i. 由类A指向类B的带箭头虚线表示

    ii. 

      

    4. 关联关系(Association)

    a) 语义:

    i. 比依赖关系强,必然的,长期的,强烈的;

    ii. 分为单向关联(只是班级中增加了学生)、双向关联(在学生中也添加班级属性)

    iii. 分为一对一(学生和学生证)、一对多(班级和学生)、多对多关联(学生和课程)

    iv. 有两个类的关联(客户和订单、订单和商品)、还有一个类和自身关联(领导也是员工)

    b) 语法:类B作为成员变量形成存在于类A

    c) 符号:

    i. 由类A指向类B的带箭头虚线表示;双向关联可以取消两个箭头

    ii. 

    iii. 在关联的两端可以标注关联双方的角色和多重性标记

     

     

     

    5. 聚合关系(Aggregation)

    a) 语义:

    i. 关联关系的一种特例

    ii. 整体和部分的关系

    iii. 整体部分可分离,整体的生命周期和部分的生命周期不同,has-a的关系

    iv. 计算机与CPU、公司与员工的关系、班级和学生的关系

    b) 语法:同关联关系

    c) 符号:空心菱形加实线箭头  

     

     

    6. 组合关系(Composition)

    a) 语义:

    i. 关联关系的一种特例

    ii. 整体和部分关系、整体部分不可分离、比聚合更强 contains-a的关系

    iii. 整体的生命周期和部分的生命周期相同

    iv. 人和四肢的关系

    b) 语法:同关联关系

    c) 符号:实心菱形加实线箭头   

     

    7. 总结

    a) 继承和实现一般没有争议

    b) 后四种关系的强弱:组合>聚合>关联>依赖。

    c) 关联和依赖的区别:

    i. 关联关系强、长期

    ii. 关联关系是通过属性来实现;依赖关联是通过方法形参或者局部变量实现

    d) 关联、组合/聚合的异同

    i. 相同:都是关联,都是做类的属性

    ii. 不同点:组合 /聚合表示的是整体和部分的关系,关联可以表示所有关系

    e) 组合和聚合的异同

    i. 相同:都是关联的特例,都是表示的整体和部分的关系

    ii. 不同点:整体部分的生命周期是否相同?组合更强

    展开全文
  • 由于最近这时间一直在看设计模式,因此接触了很多类关系图,发现自己以前对于UML中类之间关系的基础知识掌握的不是很牢固,因此,写一篇博文用来重温与巩固一下相关的知识。在面向对象程序设计时,类与类之间的...
  • 云计算、大数据和物联网代表了IT领域最新的技术发展趋势,三者既区别又联系。云计算最初主要包括了类含义:一类是以谷歌的GFS和MapReduce为代表的大规模分布式并行计算技术;另一类是以亚马逊的虚拟机和对象...
  • 人工智能又与这些词什么直接或间接的关系呢? 今天小编将就这个问题给大家献上一波涨姿势科普,让大家对这个近年来大火的科技一个初步的了解。 首先,我们来说说人工智能、机器学习、深度学习三者的关系 先上...
  • 去年学过一时间的现在密码学,最近在配置github, Linux主机之间建立信任关系的时候都用到了其中一些知识,所以刚好整理一下,想直接看操作方式的可直接拉到下面密码学基本知识一 现代密码学基本知识 现代密码学的...
  • 如果在面试中问到RunLoop相关的知识,很可能也会问到RunLoop与GCD、Autorelease Pool没有关系哪些地方用到了GCD、Autorelease Pool等。 So,本文就总结一下RunLoop与GCD和 Autorelease Pool 之间关系,看看...
  • Zend与PHP之间到底是什么关系

    千次阅读 2016-07-06 18:12:26
    Zend与PHP之间是什么关系 What is Zend's relationship with PHP? 每次看到PHP虚拟机中出现zend、zendvar之类的都很困惑,特意查了一下... PHP最开始是由Rasmus Lerdorf在1994年发明... ...
  • HTTP和TCP之间关系

    万次阅读 多人点赞 2018-08-05 22:27:48
    在解释两者之间关系之前,我们必须从宏观的角度了解互联网的整个交互模型。因为当了解互联网在大体上是如何运作时,我们才能了解HTTP和TCP存在的意义,包括他们所要解决的问题是。  (此图来自Udacity的网络协议...
  • 它们之间最明显的区别在于,虚拟化技术是IT环境这个不动产的固定装置,而云计算作为一种按需服务来提供,分平台即服务、基础设施即服务或软件即服务等几种形式,采用按需付费的模式来提供。 云计算目前是备受关注,...
  • JDK、JRE和JVM三者之间关系

    万次阅读 多人点赞 2016-06-14 10:49:30
    JDK、JRE和JVM三者之间关系 很多程序员已经写了很长一时间java了,依然不明白JDK,JRE,JVM的区别。今天个人总结一下它们三者的关系、区别。 JDK(Java Development Kit)是针对Java开发员的产品,是整个Java的...
  • Java进程之间以及跟JVM关系

    万次阅读 多人点赞 2018-01-29 10:52:35
    先提出个问题:1、命令启动了个java程序,它们之间是什么关系?2、java程序又和JVM之间是什么关系,它们是共用一个JVM,还是每个java程序,都一个JVM?演示1、用命令启动个一样的java程序。2、用jvisual观察...
  • 过程与过程之间关系可以分为: 交互影响关系:即个过程之间是互相的影响的,过程A的输出影响了过程B的输出,比如需求开发过程的质量影响了需求评审过程的缺陷个数的多少,影响了系统测试阶段发现的缺陷个数的...
  • scala与java之间关系

    千次阅读 2017-09-26 16:05:30
    scala与java之间关系,我认为可以用一句话来开头:scala来源于java,但又高于java。  scala的设计者Martin Odersky就是一个JAVA控,这位牛人设计了javac和编写了jdk中的通用代码。可以说java语言本身就是...
  • Wi-Fi的 8-stream sounding 和 8x8 MU-MIMO之间有什么关系?骁龙865的 Wi-Fi 参数8-stream sounding 是什么? 随着小米10发布之日的临近,小米各高管又开始在微博上进行新一轮的新品卖点介绍和新特性科普工作。这几...
  • UML图中类之间关系

    万次阅读 2018-01-11 19:09:18
    UML图中类之间关系:依赖,泛化,关联,聚合,组合,实现 类与类图 1) 类(Class)封装了数据和行为,是面向对象的重要组成部分,它是具有相同属性、操作、关系的对象集合的总称。 2) 在系统中,每个类具有一定的职责...
  • 云计算和物联网是当今IT业界的大焦点。它们很大的区别,但同时也有着千丝万缕的联系——物联网通过数量惊人的传感器采集到难以计数的数据量,而云计算可以对这些海量数据进行智能处理。云计算是物联网发展的基石...
  • 从interface来讲,在咱们开发行业是指两个不同系统之间交互的地方,大可以到两个完整的不同系统,小可以到两段程序。那么程序和程序交互的就叫做API,所谓交互,其实就是传递数据,触发功能。 做一个情景再现 ...
  • 前言:QPS、TPS、并发用户数、吞吐量之间关系你真的懂么? 1、QPS QPS Queries Per Second 是每秒查询率 ,是一台服务器每秒能够相应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准, ...
  • ES6与JavaScript之间关系

    万次阅读 2018-07-30 18:21:14
    该标准从一开始就是针对JavaScript语言制定的,但是之所以不叫JavaScript,有两个原因。一是商标,Java是Sun公司的商标,根据授权协议,只有Netscape公司可以合法地使用JavaScript这个名字,且JavaScript本身也已经...
  • 什么是程序,进程和线程?三者之间有关系?

    万次阅读 多人点赞 2017-05-10 19:44:11
    首先我们知道cpu是执行二进制的指令的,而对应的就有两种编程:解释形语言 和 编译形语言 种编程, c++就是编译成二进制一起执行的,所以c++是编译形 解释型:JavaScript等。所以cpu是执行指令流的。 进程 ...
  • 原创深入解析类与类之间关系

    千次阅读 热门讨论 2010-12-07 19:07:00
    之间关系有五种:继承、依赖、关联、聚合、组合.在UML绘制图的过程中我们也要使用这五种关系图,下面将个人前时间上课所记录笔记供大家学习,希望有所收获。*1、关联 Association 关联指的是类之间的引用关系。...
  • 关于PowerDesigner实体关系模型(CDM)中关于实体见关系的使用一直有些疑惑,最近正好在设计一套系统,所以用PD做了一些测试,记录如下 ...:用于个CDM之间的Dependency,PDM并不处理这种Dependenc
  • 首先说明:数据报的分段和分片确实发生,分段发生在传输层,分片发生在网络层。但是对于分段来说,这是...(1)以太网和802.3对数据帧的长度都一个限制,其最大 值分别是1500和1492个字节。链路层的这个特性称作MTU
  • 小波和傅里叶变换之间关系详细讲解

    万次阅读 多人点赞 2017-03-11 22:25:01
    于是,基函数会在某些尺度下,与信号相乘得到一个很大的值,因为此时二者一种重合关系。那么我们就知道信号包含该频率的成分的多少。 仔细体会可以发现,这一步其实是在计算信号和三角函数的相关性。 看,...
  • 采样率与频率之间关系

    万次阅读 2017-11-04 12:03:26
    采样频率的倒数是采样周期或者叫作采样时间,它是采样之间的时间间隔。通俗的讲采样频率是指计算机每秒钟采集多少个声音样本,是描述声音文件的音质、音调,衡量声卡、声音文件的质量标准。  通俗的讲采样频率是...
  • 网上这方面的资料很多,但都很琐碎,没有系统化,要么看完很快就忘记了,要么就是看完迷迷糊糊似懂非懂,下面我们来一一攻破以上问题。 TCP/IP 计算机与网络设备要相互通信,双方就必须基于相同的方法。比如,...
  • 包含(include)关系指的是个用例之间关系, 其中一个用例(称作基本用例,base use case)的行为包含了另一个用例(称作包含用例,inclusion case)的行为  ② 扩展关系(extend)  扩展(extend...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 801,457
精华内容 320,582
关键字:

两段之间的关系有哪些