算法與結構

時間:2014年3月30日13:12:54java

  1.寫算法前必定要定義好他的結構,畢竟,算法脫離不告終構的限制(即使是面向對象也只能緩解這種依賴,能擺脫結構的只有接口了)
  2.當咱們有了一個結構至少要提供基本操做增刪改查
  以上2點的共同認識,結構決定算法,不一樣的結構有不一樣的優點算法

基礎結構

  我我的認爲,已知的東西都是基礎的,在基礎的(已知的)結構上擴充,確定要比本身想一個非主流的要好的多,不過再怎麼想有1個結構永遠擺脫不了--數組
  這個弱到暴的東西,咱們將咱們的數據放在內存中,因而就有了編程

   這個結構就是順序存儲,實現上他是最簡單的,有告終構就要看操做,嗯,由於大小是固定的,能夠說這傢伙根本就不能直接實現刪除和添加數組

   java實現:ArrayList安全

   爲了解決這個小問題鏈表結構出來了函數

 

  java實現:LinkedListspa

  世界太平了,鏈表拯救了世界,比起數據的增多硬件根本跟不上,鏈表查詢的問題愈來愈明顯,因而...設計

複合結構

  基於基礎結構,經過考慮問題的不一樣方式,能的到不一樣的答案對象

  1.我發現數據其實都是數字,我有不少不一樣的數據,我能夠將他們轉換爲數字,而後用數組的方式純起來,好比排序

 

    這是一個超讚的解決方式(記得第一次筆試的時候,別人要求排序,我就這麼先存進去,在讀出來,被打擊了),就是所須要的空間可能有點大,只要解決的空間的問題,那他就無敵了

    解決問題前線觀察問題,咱們能夠看到

    嗯,若是有這麼一個映射關係在裏面的話,或許還有救,你能夠猜到的,這個函數就是hash();

    以前的索引其實就是地址,那麼這裏的hash值固然也能夠找到地址了,因此我數組的個數與須要存的個數一直,完美的解決方式

    可是這個萬惡的世界讓你沒法找到這麼一種神奇的hash函數,咱們能夠經過取餘的方式來定位索引,卻不能保證他們的值不重複,離成功不遠了,解決了這個你就無敵了

   1.1渣渣,咱們可使用鏈,hash(索引)同樣的放在一個鏈中,而後再一個個與真值判斷就像

   1.2其實hash以後還能夠再次hash

   1.3.....

   你會發現方法老是多種多樣的,這就是hash算法

 

 2.假設一個節點Node,他又一個屬性next,他就是單鏈表,再加一個屬性,previous,就是雙鏈表,就不能是三個乃至更多的嗎?

    固然能夠了,你發現結構的真諦了,只要你能保證他的正確性,保證可以維護他,你甚至能夠在裏面加上任何你想要的東西,他至關的自由,此時你心中的結構能夠爆發式增加了,那評判結構的標準也該介紹一下了

    在正確性,可維護性,安全性等衆多的官話面前,我只告訴你一點,肯定你不會被本身設計的邏輯弄混就好了

   2.1在你心中潛伏的一個結構可能就是這樣的,他(Node)有一個small指向比他小的數,big指向比他大的數此時

     插入:按規則對比插入,newNode總在最下方

     刪除:

     查找:

    總的來講無論樣,他最差不過是鏈表,平均下來就是比鏈表好

    又一個超讚的想法,這個想法的學名就是Tree,他有不少子類用來不讓Tree編程鏈表的形式

    RB

相關文章
相關標籤/搜索