<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Feng.Li's Java See

    抓緊時間,大步向前。
    隨筆 - 95, 文章 - 4, 評論 - 58, 引用 - 0
    數(shù)據(jù)加載中……

    2007年10月9日

    空間索引

    在介紹空間索引之前,先談?wù)勈裁唇?#8220;索引“。對一個數(shù)據(jù)集做”索引“,是為了提高對這個數(shù)據(jù)集檢索的效率。書的”目錄“就是這本書內(nèi)容的”索引“,當(dāng)我們拿到一本新書,想查看感興趣內(nèi)容的時候,我們會先查看目錄,確定感興趣的內(nèi)容會在哪些頁里,直接翻到那些頁,就OK了,而不是從第一章節(jié)開始翻,一個字一個字地找我們感興趣的內(nèi)容,直到找到為止,這種檢索內(nèi)容的效率也太低了,如果一本書沒有目錄,可以想象有多么不方便…可見書的目錄有多重要,索引有多重要??!

    現(xiàn)在大家對索引有了感性認識,那什么是“空間索引“呢?”空間索引“也是”索引“,是對空間圖形集合做的一個”目錄“,提高在這個圖形集合中查找某個圖形對象的效率。比如說,我們在一個地圖圖層上進行矩形選擇,確定這個圖層上哪些圖元被這個矩形所完全包含呢,在沒有”空間索引“的情況下,我們會把這個圖層上的所有圖元,一一拿來與這個矩形進行幾何上的包含判斷,以確定到底哪些圖元被完全包含在這個矩形內(nèi)。您是不是覺得這樣做很合理呢?其實不然,我們先看一個網(wǎng)格索引的例子:

     

    我們對這個點圖層作了網(wǎng)格索引,判斷哪些點在這個矩形選擇框內(nèi),是不需要把這個圖層里所有的點都要與矩形進行幾何包含運算的,只對a,b,c,d,e,f,g這七個點做了運算??梢酝葡胍幌拢绻粋€點圖層有十萬個點,不建立空間索引,任何地圖操作都將對整個圖層的所有圖元遍歷一次,也就是要For循環(huán)10萬次;建立索引將使得For循環(huán)的次數(shù)下降很多很多,效率自然提高很多!

    呵呵…想必大家都知道空間索引的好處了,也不知不覺向大家介紹了點圖層的網(wǎng)格索引,還有哪些常用的空間索引呢?這些空間索引又該如何實現(xiàn)呢?帶著這樣的問題,下面介紹幾種常用的空間索引。

    網(wǎng)格索引
            網(wǎng)格索引就是在一個地圖圖層上,按每個小網(wǎng)格寬△w,高△h打上均勻的格網(wǎng),計算每個圖元所占據(jù)的網(wǎng)格或者所經(jīng)過的網(wǎng)格單元集合,

     

           

          在這些網(wǎng)格單元中,記錄下圖元對象的地址或者引用,比如:聲明一個對象二維數(shù)組 List grid[m][n]; m代表網(wǎng)格的行數(shù),n代表網(wǎng)格的列數(shù),每個數(shù)組元素為一個“集合對象”,用于存儲這個網(wǎng)格單元所關(guān)聯(lián)的所有圖元的地址或引用,這樣網(wǎng)格索引就建立好了。下一步,我們該怎么用這個網(wǎng)格索引呢?所有的圖形顯示和操作都可以借助于“空間索引”來提高效率。舉幾個例子來說明“空間索引“的使用:

     
           一、放大開窗顯示,正如上一節(jié)介紹的,當(dāng)我們在地圖上畫一個矩形想放大地圖的時候,首先得確定放大后的地圖在屏幕上需要顯示哪些圖元?所以,我們需要判斷這個地圖中有哪些圖元全部或者部分落在這個矩形中。判斷步驟:

    1,確定所畫矩形左上角和右下角所在的網(wǎng)格數(shù)組元素;即可得到這個矩形所關(guān)聯(lián)覆蓋的所有網(wǎng)格集合;

    2,遍歷這個網(wǎng)格集合中的元素,取到每個網(wǎng)格元素List中所記錄的圖元;

    3,畫出這些圖元即可。(當(dāng)然整個過程涉及到兩點:1,屏幕坐標(biāo)和地圖坐標(biāo)的互相變換;2,窗口裁減,也可以不裁減)

    二、包含判斷,給出一個點point和一個多邊形polygon,判斷點是否在面內(nèi),首先判斷這個點所在的網(wǎng)格,是否同時關(guān)聯(lián)這個polygon,如果不是,表明點不在面內(nèi),如果是,可以下一步的精確解析幾何判斷,或者精度允許的情況下,即判斷polygon是包含point的。

    另外,Google Map應(yīng)該也是采用地理網(wǎng)格的方式,對地圖圖象進行索引的,可見一斑,網(wǎng)格索引在圖形顯示,選擇,拓撲判斷上的廣泛應(yīng)用。但同時也存在很嚴(yán)重的缺陷:當(dāng)被索引的圖元對象是線,或者多邊形的時候,存在索引的冗余,即一個線或者多邊形的引用在多個網(wǎng)格中都有記錄。隨著冗余量的增大,效率明顯下降。所以,很多學(xué)者提出了各種方法來改進網(wǎng)格索引,這個將在下面的章節(jié)中介紹。而點圖元非常適合網(wǎng)格索引,不存在冗余問題。

    四叉樹索引(Quadtree)

    類似于前面介紹的網(wǎng)格索引,也是對地理空間進行網(wǎng)格劃分,對地理空間遞歸進行四分來構(gòu)建四叉樹,本文將在普通四叉樹的基礎(chǔ)上,介紹一種改進的四叉樹索引結(jié)構(gòu)。首先,先介紹一個GISGeographic Information System)或者計算機圖形學(xué)上非常重要的概念——最小外包矩形(MBR-Minimum Bounding Rectangle)

     

           

          最小外包矩形MBR就是包圍圖元,且平行于X,Y軸的最小外接矩形。MBR到底有什么用處呢,為什么要引入這個概念呢?因為,圖元的形狀是不規(guī)則的,而MBR是平行于X,Y軸的規(guī)則圖形,設(shè)想一下,如果所有的圖元都是平行于X,Y軸的矩形,那針對這樣的矩形進行幾何上的任何判斷,是不是要簡單很多呢?不管我們?nèi)俗约簩懝剿惴ɑ蛘呔帉懗绦蜻\行,是不是都要比原本復(fù)雜的圖形幾何運算要簡潔很多呢?答案很顯然。

           然后,我們再介紹一下GIS空間操作的步驟(這個步驟,在前面忘記向大家說明了,在這里補充一下)
     

           

          可見,過濾階段,通過空間索引可以排除掉一些明顯不符合條件的圖元,得到后選集合,然后對后選圖元集合進行精確幾何運算,得到最終結(jié)果。大家可能會有這樣的疑問,這樣有必要嗎?是不是反而把問題復(fù)雜化了?合適的空間索引只會提高計算機的效率,沒有空間索引,我們無疑要對集合中的每個圖元進行精確幾何運算,而這樣的運算是復(fù)雜的,是非常占用CPU的,所以需要空間索引,采取少量的內(nèi)存和簡單的CUP運算,來盡量減少那種高耗CUP的精確運算的次數(shù),這樣做是完全值得的。至于精確的幾何運算到底復(fù)雜在哪里,該如何進行精確的幾何運算,將在下面的章節(jié)中詳細描述,這里主要介紹過濾階段的空間索引。

           現(xiàn)在,讓我們來具體了解一下“四叉樹索引”。
     

    四叉樹索引就是遞歸地對地理空間進行四分,直到自行設(shè)定的終止條件(比如每個節(jié)點關(guān)聯(lián)圖元的個數(shù)不超過3個,超過3個,就再四分),最終形成一顆有層次的四叉樹。圖中有數(shù)字標(biāo)識的矩形是每個圖元的MBR,每個葉子節(jié)點存儲了本區(qū)域所關(guān)聯(lián)的圖元標(biāo)識列表和本區(qū)域地理范圍,非葉子節(jié)點僅存儲了區(qū)域的地理范圍。大家可以發(fā)現(xiàn),同樣存在一個圖元標(biāo)識被多個區(qū)域所關(guān)聯(lián),相應(yīng)地存儲在多個葉子節(jié)點上,比如“6“所代表的圖元,分別存儲在四個分枝上。這樣,就存在索引的冗余,與網(wǎng)格索引存在同樣的弊端。下面我們介紹一種改進的四叉樹索引,或者說是分層的網(wǎng)格索引。

             改進的四叉樹索引,就是為了避免這種空間索引的冗余,基本改進思路是:讓每個圖元的MBR被一個最小區(qū)域完全包含。
     

    可以看出,313分別都跨越了兩個區(qū)域,要被一個最小區(qū)域完全包含,就只能是根節(jié)點所代表的區(qū)域,2,5跨越了兩個區(qū)域,6跨越了四個區(qū)域,要被一個最小區(qū)域完全包含,就只能是NW區(qū)域。怎么判斷一個圖元被哪個最小區(qū)域完全包含呢?從直觀上看,遞歸地對地理空間進行四分,如果圖元與一個區(qū)域四分的劃分線相交,則這個圖元就歸屬于這個區(qū)域,或者直到不再劃分了,那就屬于這個不再劃分的區(qū)域。呵呵。。??赡苡悬c繞口,看圖,結(jié)合“最小”“完全包含這兩個字眼,您就明白了。這顆四叉樹中,圖元的標(biāo)識不再僅僅存儲在葉子節(jié)點上,而是每個節(jié)點都有可能存儲,這樣也就避免了索引冗余。同時每個節(jié)點存儲本節(jié)點所在的地理范圍。

    有了四叉樹索引,下面又該如何利用這顆樹來幫助檢索查找呢?還是矩形選擇為例吧?。槭裁次铱偸悄眠@個例子來說事呢?因為這個例子簡單,容易理解,有代表性?。┪覀冊诘貓D上畫一個矩形,判斷地圖上哪些圖元落在這個矩形里或者和這個所畫矩形相交。方法很多,這里介紹一種簡單的檢索步驟,如下:

    1,首先,從四叉樹的根節(jié)點開始,把根節(jié)點所關(guān)聯(lián)的圖元標(biāo)識都加到一個List里;

    2,比較此矩形范圍與根節(jié)點的四個子節(jié)點(或者叫子區(qū)域)是否有交集(相交或者包含),如果有,則把相應(yīng)的區(qū)域所關(guān)聯(lián)的圖元標(biāo)識加到List集合中,如果沒有,則以下這顆子樹都不再考慮。

    3,以上過程的遞歸,直到樹的葉子節(jié)點終止,返回List。

    4,從List集合中根據(jù)標(biāo)識一一取出圖元,先判斷圖元MBR與矩形有無交集,如果有,則進行下面的精確幾何判斷,如果沒有,則不再考慮此圖元。(當(dāng)然,這里只說了一個基本思路,其實還有其他一些不同的方法,比如,結(jié)合空間數(shù)據(jù)磁盤的物理存儲會有一些調(diào)整)

    總結(jié):改進的四叉樹索引解決了線,面對象的索引冗余,具有較好的性能,而被大型空間數(shù)據(jù)庫引擎所采用,如ArcSDEOracle Spatial等,同時這種結(jié)構(gòu)也適用于空間數(shù)據(jù)的磁盤索引,配合空間排序聚類,基于分形的Hilbert算法數(shù)據(jù)組織,將在空間數(shù)據(jù)格式的定義中發(fā)揮重要作用。

    posted @ 2009-05-18 09:34 小鋒 閱讀(1837) | 評論 (1)編輯 收藏

    線段樹入門

         摘要: 線段樹數(shù)據(jù)結(jié)構(gòu)的入門文章  閱讀全文

    posted @ 2009-04-28 07:14 小鋒 閱讀(733) | 評論 (0)編輯 收藏

    經(jīng)典的一個GIS學(xué)習(xí)定位帖(轉(zhuǎn))

         摘要: 一篇經(jīng)典的關(guān)于GIS學(xué)習(xí)定位的帖子。  閱讀全文

    posted @ 2009-02-16 17:54 小鋒 閱讀(757) | 評論 (0)編輯 收藏

    精解遞歸程序設(shè)計

         摘要: 對遞歸程序設(shè)計的精解  閱讀全文

    posted @ 2008-04-22 01:15 小鋒 閱讀(540) | 評論 (0)編輯 收藏

    復(fù)雜遞歸程序框架

     

    較為復(fù)雜的遞歸問題的程序一般結(jié)構(gòu)如下
    (1)sub recursien(n)
    (2) if滿足出口條件then
    (3) 出口操作|
    (4) d
    (5) 第n層的準(zhǔn)備性操作P(n);
    (6) 第n層具休性操作G(n)|
    (7) 進入探層遞歸前的恢復(fù)性操作H(n);
    (8) 進入深層遞歸reeurslon(n一1)
    (9) endif
    (10)end sub

    posted @ 2008-04-18 07:00 小鋒 閱讀(304) | 評論 (0)編輯 收藏

    N重循環(huán)程序框架

     int[] a  = new int[N+1];
     int i,k;
     for(i=1;i<=n;i++)
        a[i] = left[i];
     k = n;
     while(k>=1) 
      {
         執(zhí)行循環(huán)體內(nèi)該做的事
       
      while (a[k] + step[k]>right[k])
           {
              a[k] =  left[k] ;
              k--;
            }
      if(k==0)break;//此處也可以為continue;
     a[k] = a[k] + step[k];
     k = n;
     }
    }

     

    posted @ 2008-04-17 04:46 小鋒 閱讀(402) | 評論 (0)編輯 收藏

    全排列的非遞歸算法



    = malloc(n * sizeof(int));
    for (i = 0; i < n; i++)
       p[i] 
    = i;

    output(p, n);

    for (i = n - 1; i > 0; i--)
       
    if (p[i] > p[i - 1])
       {
          
    for (j = n - 1; p[j] < p[i - 1]; j--);
          swap(
    &(p[i - 1]), &(p[j]));

          
    for (j = i, k = n - 1; j < k; j++, k--)
             swap(
    &(p[j]), &(p[k]));

          ouput(p, n);
          i 
    = n;
       }

    free(p);

    posted @ 2008-04-16 02:25 小鋒 閱讀(581) | 評論 (0)編輯 收藏

    DAO模式

         摘要: 轉(zhuǎn)載,關(guān)于DAO模式  閱讀全文

    posted @ 2008-03-10 14:54 小鋒 閱讀(1726) | 評論 (0)編輯 收藏

    關(guān)于Java的傳值問題,個人感覺書上說的都不好,請進來聽聽我的看法。

     關(guān)于值傳遞和引用傳遞的問題,我想很多人剛開始學(xué)的時候都會很迷惑,特別是有些書的文學(xué)水平實在不敢恭維。
    在此,我特在此對Java的傳值和傳址提出我自己的一個看法,也許讓你能對這個問題的理解起到幫助。
            首先:值傳遞是很好理解的。比如:
            public   class   test   {
          int   a   =   3;
          public   void   plus(int   b){
            b     =   b+1;
            }
            public   static   void   main(String   args[])
          {
            test   t   =   new   test();
            t.plus(t.a);
            System.out.println(t.a);
          }
          }
        輸出的結(jié)果是3.這就是值傳遞。其實我們可以這樣理解:
              在plus(int   b)函數(shù)里,int   b是作為這個函數(shù)的一個局部變量,在調(diào)用這個函數(shù)的時候開始位這個變量的內(nèi)存空間。當(dāng)我把變量a傳給這個函數(shù)的時候,實際上是把a變量當(dāng)時的值拷貝一個放到變量b的分配空間里,b   =   b+1;這句改變的只是函數(shù)的局部變量b的值,當(dāng)調(diào)用結(jié)束的時候,變量b的作用范圍也就結(jié)束了,而你在什么時候修改了變量a的分配空間呢?當(dāng)然是沒有啦(除非你理解成變量a的空間整個放進b的空間里:))

          而所謂的引用傳遞,我覺得這個名次起的很混淆視聽。以我自己的理解,一切傳遞都是拷貝傳遞。因為對象的標(biāo)識符代表的是對象的存儲地址,所以你把對象的標(biāo)識符號傳遞給函數(shù)的時候,實際上是把對象地址的拷貝傳遞給了函數(shù)。雖然也是拷貝,但是2個地址拷貝都是指向一個地址的,所以如果在函數(shù)里修改了對象,那么也實際上就修改了原先的值.
    歸根到底一句話:Java一切參數(shù)的傳遞都是拷貝傳遞!

    posted @ 2008-01-29 15:03 小鋒 閱讀(1316) | 評論 (4)編輯 收藏

    數(shù)學(xué)與科技

         摘要: 丘成桐:數(shù)學(xué)與科技  閱讀全文

    posted @ 2008-01-25 10:35 小鋒 閱讀(518) | 評論 (0)編輯 收藏

    無后效性:(DP)

       首先,請注意無后效性一般是針對問題的分析方式的,不是描述一個問題的。  
       
      我們說某問題不具有無后效性往往是指他的通常解法不具有這種性質(zhì),而如果我們把狀態(tài)定義成滿足無后效性原理  
      的方式,狀態(tài)太多,也沒有意義。  
       
      無后效性,就是說當(dāng)前狀態(tài)是歷史的完全總結(jié),和如何達到這一個狀態(tài)無關(guān)。  
       
      例如,對于這道單詞接龍的題目,每個單詞最多用兩次。  
      那么“當(dāng)前接到的單詞”就不能概括整個“歷史”,因為同樣是接到的這個單詞,以前考慮過的單詞究竟是用過  
      沒有,用過多少次,將同樣影響今后的發(fā)展,而單一的狀態(tài)參量無法概括這些信息。如果把這些信息加到狀態(tài)  
      參量中,狀態(tài)太多(指數(shù)級),動態(tài)規(guī)劃也沒有多大意義。  
       
      如果影響歷史的信息并不多,我們可以通過升維的方法讓我們的狀態(tài)具有無后效性,  
      所以我們在思考狀態(tài)的時候,指導(dǎo)思想就是“簡潔而又完全的概括歷史”  

    posted @ 2008-01-15 15:59 小鋒 閱讀(985) | 評論 (0)編輯 收藏

    轉(zhuǎn)載(ACM國際大學(xué)生程序設(shè)計大賽)

         摘要: 一篇關(guān)于ACM的文章,有時間的朋友可以進來看看  閱讀全文

    posted @ 2008-01-15 15:15 小鋒 閱讀(855) | 評論 (1)編輯 收藏

    tsp遞歸程序?qū)崿F(xiàn)(Java)(zz)

         摘要: TSP程序的遞歸實現(xiàn)  閱讀全文

    posted @ 2008-01-08 16:15 小鋒 閱讀(528) | 評論 (0)編輯 收藏

    TSP問題的解決算法

         摘要: 一些解決TSP問題的算法  閱讀全文

    posted @ 2007-12-28 17:13 小鋒 閱讀(6889) | 評論 (0)編輯 收藏

    遞歸求解問題的通用方法

         摘要: 一篇很好的講解遞歸的文章  閱讀全文

    posted @ 2007-12-26 20:04 小鋒 閱讀(679) | 評論 (0)編輯 收藏

    DOM數(shù)據(jù)模型圖


    此模型為DOM模型圖

    posted @ 2007-12-26 15:32 小鋒 閱讀(528) | 評論 (0)編輯 收藏

    數(shù)學(xué)歸納法的證明



    證明方法:反證法
    使用公理:任何一個非空正整數(shù)集合存在切僅存在一個最小元素
    證明大致過程:
    1、構(gòu)造反命題:存在一個命題集合P,P(1)成立,P(n)成立時P(n+1)成立,但存在至少一個正整數(shù)m,使得P(m)不成立。
    2、所有的m構(gòu)成一個非空正整數(shù)集合A,根據(jù)公理,其中存在最小元素m1,那么m1>1一定成立(因為P(1)為真)
    3、對于m1 - 1,存在如下矛盾:P(m1 - 1)應(yīng)該為真,因為m1為集合A的最小元素,而如果P(m1 - 1)為真,那么根據(jù)題設(shè)P(m1 - 1 + 1) = P(m1)應(yīng)該為真,與已知P(m1)為假矛盾

    posted @ 2007-12-17 15:57 小鋒 閱讀(282) | 評論 (0)編輯 收藏

    遞歸設(shè)計與數(shù)學(xué)歸納法

         摘要: 其實,遞歸和數(shù)學(xué)歸納法里面所隱含的思想其實是一樣的  閱讀全文

    posted @ 2007-12-11 14:39 小鋒 閱讀(360) | 評論 (0)編輯 收藏

    基數(shù)排序

         摘要: 基數(shù)排序  閱讀全文

    posted @ 2007-11-11 16:33 小鋒 閱讀(1299) | 評論 (0)編輯 收藏

    匯編初學(xué)者入門

         摘要: 如何學(xué)習(xí)匯編  閱讀全文

    posted @ 2007-10-19 10:03 小鋒 閱讀(329) | 評論 (0)編輯 收藏

    科學(xué)是美麗的

         摘要: 科學(xué)是很美麗的  閱讀全文

    posted @ 2007-10-17 14:54 小鋒 閱讀(235) | 評論 (0)編輯 收藏

    地理信息系統(tǒng)在城市設(shè)計中的應(yīng)用

         摘要: 在城市規(guī)劃中應(yīng)用Gis的文章  閱讀全文

    posted @ 2007-10-10 16:53 小鋒 閱讀(1783) | 評論 (0)編輯 收藏

    凸包的算法(偽代碼)

         摘要: 凸包的算法  閱讀全文

    posted @ 2007-10-10 11:34 小鋒 閱讀(3599) | 評論 (0)編輯 收藏

    全排列的遞歸算法

         摘要: 循環(huán)的是人,遞歸的是神  閱讀全文

    posted @ 2007-10-09 08:58 小鋒 閱讀(455) | 評論 (0)編輯 收藏

    主站蜘蛛池模板: 亚洲卡一卡2卡三卡4麻豆| 亚洲AV无码成人专区片在线观看 | 亚洲v国产v天堂a无码久久| 亚洲一区二区三区四区视频 | 国产无遮挡色视频免费观看性色| 国产精品高清全国免费观看| 亚洲色大18成人网站WWW在线播放 亚洲色大成WWW亚洲女子 | 国产嫩草影院精品免费网址| 亚洲一线产区二线产区区| 免费无码A片一区二三区| 亚洲va乱码一区二区三区| 免费无码黄十八禁网站在线观看| 亚洲人xxx日本人18| 毛色毛片免费观看| 亚洲av无码专区亚洲av不卡| 免费一级毛片免费播放| 乱爱性全过程免费视频| 亚洲一区二区三区影院| 99久久婷婷免费国产综合精品| 久久久久亚洲爆乳少妇无 | 久久国产免费一区| 亚洲国产精品网站久久| 大学生a级毛片免费观看| 精品国产亚洲AV麻豆| 中文字幕无码精品亚洲资源网| 最新亚洲成av人免费看| 亚洲AV第一页国产精品| 免费成人福利视频| 亚洲第一第二第三第四第五第六 | 久久久久国产成人精品亚洲午夜 | 污视频网站在线观看免费| 国产午夜亚洲精品理论片不卡 | 四虎影视成人永久免费观看视频 | 亚洲av无码天堂一区二区三区| 一区在线免费观看| 99久久亚洲综合精品成人网| 成年美女黄网站18禁免费| 免费无码午夜福利片| 777亚洲精品乱码久久久久久 | 国产亚洲sss在线播放| 四虎免费影院4hu永久免费|