2013-06-18 117 views
0

我正在使用Java DOM解析器來解析XML文件。性能對我很重要,我需要編寫最優化的代碼。我注意到要處理的XML有很多嵌套的標籤(它可以達到5級深度),我必須檢索所有級別的信息。循環複雜度最低的XML

我實現的虛擬解決方案是使用嵌套循環,每個循環都檢索節點的子節點並將其傳遞給下一個循環。

當代碼複雜度達到O(n^5)時,這對於性能和複雜度是非常糟糕的做法。請找到它如何在下面的代碼級別。

我相信在這種情況下分治算法可能會起作用。

做任何你有任何建議有一個更優化的代碼,以獲得更好的性能?

對(INT溫度= 0;溫度< contractDetails.getLength();溫度++){ 節點詳細= contractDetails.item(溫度); System.out.println(detail.getNodeName()); NodeList detail2 = detail.getChildNodes();

 for (int temp2 = 0; temp < detail2.getLength(); temp2++){ 
     ......... 
      for (int temp3 = 0; temp < detail3.getLength(); temp3++){ 
       ............... 
      } 

     } 
    } 

回答

1

首先,如果你有興趣的性能,請不要使用DOM。 Java中的其他樹模型(如XOM)要快得多,並且更容易用作獎金。其次,你的5個嵌套循環代碼不是O(n^5)。最內層循環的迭代總數等於文檔中節點的數量,因此它是文檔大小的O(n)。

+0

邁克爾,非常感謝您的意見。我會嘗試使用XOM。你相信有這樣的嵌套循環不會影響性能。你知道有更好的做法有相同的輸出嗎? – mowienay

+0

那麼,我會寫在XSLT或XQuery中,只考慮其他方法,如果性能不符合要求。一般來說,如果性能不夠快,那麼改進它的最便宜的方法就是升級硬件 - 一臺新服務器的花費大約是程序員時間的一天。 –