[Sorting Hierarchical Data in Database ] 补充
2005-10-28 10:15
316 查看
日前发现一个很好的树状数据的算法[http://www.sitepoint.com/print/hierarchical-data-database,作者Gijs Van Tulder],想对它做些补充。
在这篇文章中已对单个节点的操作做出了详细说明,但未提到对分支的操作如移动、复制和删除。在这里我试图对此作一些拓展,使之更易懂、更完善。
首先,我们总结一下这个算法的精髓。这个算法实际上是把象树这样一个立体的和层次结构的数据扁平化成一维的数据,然后用线性的算法就能够达到原来可能需要用递归算法才能达到的结果,从而提高了效率。可以用一句话来描述他的这个一维数据结构:给树的每个节点分配两个唯一的整数(左右编码),使得它的所有直接或间接的子节点的两个整数都落在于它的两个整数之间。有了这个描述,对于以分支为单位的操作就容易的多了。
1、删除:当删除节点所对应的纪录后,可以不对其他节点进行调整,整个树的编码依然是符合上面的描述的,如果想要编码的空间连续,只要把空出来的那一段之后的编码整个线性往前移就可以了。
2、复制:先算好新复制出来的节点所要占的编码个数,在它插入点之后的编码线性后移,留出足够的编码空间给新节点。
3、移动:由于要保证编码的唯一性不被线性移动所破坏,所以安全的做法是先做一个复制动作,再做一个删除动作。具体说就是1、先扩充编码空间(复制动作),2、直接修改移动分支的编码到新的编码空间,3、压缩2所留出的编码空间(删除动作)。
以上讨论的是一张表中只含一棵树的情况,实际上,有很多时候是一张表中存的是一个森林,这样可能就需要额外得来区分不同的树,以保证所作的操作都是针对同一棵树。当然也可以把所有的树统一编码,把他们放在连续的编码空间中,当作一棵大的虚拟的树。目前还没有实做过,无法比较出这两种的优劣。
在这篇文章中已对单个节点的操作做出了详细说明,但未提到对分支的操作如移动、复制和删除。在这里我试图对此作一些拓展,使之更易懂、更完善。
首先,我们总结一下这个算法的精髓。这个算法实际上是把象树这样一个立体的和层次结构的数据扁平化成一维的数据,然后用线性的算法就能够达到原来可能需要用递归算法才能达到的结果,从而提高了效率。可以用一句话来描述他的这个一维数据结构:给树的每个节点分配两个唯一的整数(左右编码),使得它的所有直接或间接的子节点的两个整数都落在于它的两个整数之间。有了这个描述,对于以分支为单位的操作就容易的多了。
1、删除:当删除节点所对应的纪录后,可以不对其他节点进行调整,整个树的编码依然是符合上面的描述的,如果想要编码的空间连续,只要把空出来的那一段之后的编码整个线性往前移就可以了。
2、复制:先算好新复制出来的节点所要占的编码个数,在它插入点之后的编码线性后移,留出足够的编码空间给新节点。
3、移动:由于要保证编码的唯一性不被线性移动所破坏,所以安全的做法是先做一个复制动作,再做一个删除动作。具体说就是1、先扩充编码空间(复制动作),2、直接修改移动分支的编码到新的编码空间,3、压缩2所留出的编码空间(删除动作)。
以上讨论的是一张表中只含一棵树的情况,实际上,有很多时候是一张表中存的是一个森林,这样可能就需要额外得来区分不同的树,以保证所作的操作都是针对同一棵树。当然也可以把所有的树统一编码,把他们放在连续的编码空间中,当作一棵大的虚拟的树。目前还没有实做过,无法比较出这两种的优劣。
相关文章推荐
- Options for Storing Hierarchical Data in a Relational Database
- Storing Hierarchical Data in Oracle & MS SQL Database
- Win A Free Copy of Packt’s Managing Multimedia and Unstructured Data in the Oracle Database e-book
- 143.You execute a command to resize a data file, sales.dbf, of size 200 MB in your database: ALTER D
- Data Guard Physical Standby Setup in Oracle Database 11g Release 2
- use stack to initial a treeview with the data in a database
- [Solved]: System.Data.SqlClient.SqlError: Exclusive access could not be obtained because the database is in use.
- Performing Data Access->Working with Databases in Visual Web Developer 2005 Express Edition
- 【原】Configuring Oracle Data Guard In Physical Standby Database
- Managing Hierarchical Data in MySQL(推荐)
- How to select the data type in SQLserver database such as varchar, nvarchar
- QT14 how to save data in sqlite database with pushbutton
- Part 9 Sorting data in AngularJS
- Data Access Patterns: Database Interactions in Object-Oriented Applications
- using JS to control two select(html),the data can be loaded from database and XML,and show in the select
- Decoupling models from the database: Data Access Object pattern in PHP
- 94.You plan to move data from a flat file to a table in your database. You decide to use SQL*Loader
- android in practice_Creating a data manager(MyMoviesDataBases project)
- mysql 树形数据,层级数据Managing Hierarchical Data in MySQL
- Sorting Displays in Data View Web Parts (转)