Paano Piliin ang Tamang Structure ng Data para sa Iyong Mga Application

Paano Piliin ang Tamang Structure ng Data para sa Iyong Mga Application
Ang mga mambabasang tulad mo ay tumutulong sa pagsuporta sa MUO. Kapag bumili ka gamit ang mga link sa aming site, maaari kaming makakuha ng isang affiliate na komisyon. Magbasa pa.

Ang pagpili ng pinakamahusay na istraktura ng data para sa iyong mga layunin ay maaaring maging mahirap sa maraming available na opsyon. Kapag pumipili ng istraktura ng data, isaalang-alang ang data na iyong haharapin, ang mga operasyong isasagawa sa data, at ang kapaligiran kung saan isasagawa ang iyong aplikasyon.





MAKEUSEOF VIDEO OF THE DAY MAG-SCROLL PARA MAGPATULOY SA NILALAMAN

Unawain ang Iyong Data

Ang pag-unawa sa data na iyong haharapin bago pumili ng istraktura ng data ay mahalaga. Mga karaniwang istruktura ng data na gumagana sa iba't ibang uri ng data ay kinabibilangan ng mga array, naka-link na listahan, puno, graph, at hash table.





Halimbawa, kapag kailangan mong i-access ang mga elemento nang random mula sa iyong data, ang mga array ay maaaring ang pinakamahusay na pagpipilian. Kung sakaling, kailangan mong patuloy na magdagdag o magtanggal ng mga elemento mula sa isang listahan, at maaaring magbago din ang laki ng listahan, kung gayon ang mga naka-link na listahan ay maaaring maging partikular na kapaki-pakinabang.





Kapag kailangan mong epektibong mag-imbak ng maraming antas ng data, tulad ng mga istruktura ng talaan, at magsagawa ng mga operasyon tulad ng paghahanap at pag-uuri, kung gayon ang mga puno ay kapaki-pakinabang.

Kapag kailangan mong ilarawan ang mga pakikipag-ugnayan sa pagitan ng mga entity, gaya ng mga nasa social network, at magsagawa ng mga operasyon gaya ng pinakamaikling landas at pagkakakonekta, mas pipiliin ang Mga Graph. Nakakatulong ang mga hash table para sa mabilis na paghahanap ng key.



Isaalang-alang ang Mga Pagpapatakbo na Isasagawa sa Data

Habang pumipili ng istraktura ng data, dapat mo ring isaalang-alang ang mga operasyon na isasagawa sa data. Ang iba't ibang istruktura ng data ay nag-o-optimize ng maraming pagkilos, tulad ng pag-uuri, paghahanap, paglalagay, at pagtanggal.

Halimbawa, ang mga naka-link na listahan ay mas mahusay para sa mga pagkilos tulad ng pagpasok at pagtanggal, ngunit ang mga binary tree ay pinakamahusay para sa paghahanap at pag-uuri. Ang hash table ay maaaring ang pinakamahusay na pagpipilian kung ang iyong application ay nangangailangan ng sabay-sabay na pagpapasok at paghahanap.





Suriin ang Kapaligiran

Kapag isinasaalang-alang ang isang istraktura ng data, dapat mong suriin ang kapaligiran kung saan tatakbo ang application. Naaapektuhan ng kapaligiran kung gaano kahusay at kung gaano kabilis ma-access ang mga istruktura ng data.

kung paano magkaroon ng isang gif bilang isang wallpaper windows 10

Isaalang-alang ang mga sumusunod na salik kapag sinusuri ang iyong kasalukuyang kalagayan:





  1. Kapangyarihang magproseso : Pumili ng mga istruktura ng data para sa iyong mga application na gumagana nang maayos sa mga PC na may kaunting kapangyarihan sa pagproseso habang tumatakbo sa platform. Halimbawa, ang mga mas simpleng istruktura ng data tulad ng mga array ay maaaring maging mas angkop kaysa sa mga puno o graph.
  2. Concurrency : Dapat kang pumili ng istraktura ng data na ligtas sa thread na maaaring pangasiwaan ang sabay-sabay na pag-access nang walang katiwalian ng data; kung ang iyong application ay tumatakbo sa isang kasabay na kapaligiran, kung saan maraming mga thread o proseso ang nag-a-access sa istruktura ng data nang sabay-sabay. Sa kasong ito, tulad ng mga istruktura ng data na walang lock ConcurrentLinkedQueue at ConcurrentHashMap maaaring mas angkop kaysa sa mga tradisyonal tulad ng ArrayList at HashMap.
  3. Latency ng network : Kung ang iyong aplikasyon ay nangangailangan ng paglipat ng data sa isang network, dapat mong isaalang-alang ang latency ng network habang nagpapasya sa pinakamahusay na istraktura ng data. Sa ganitong mga sitwasyon, ang paggamit ng istraktura ng data na naghihigpit sa mga tawag sa network o nagpapababa sa dami ng paglilipat ng data ay maaaring makatulong na mapabuti ang pagpapatupad.

Mga Karaniwang Istruktura ng Data at ang Kaso ng Paggamit ng mga Ito

Narito ang isang buod ng ilang sikat na istruktura ng data at ang kanilang paggamit.

  1. Mga array : Ito ay isang simple at mahusay na istraktura ng data na maaaring magkaroon ng isang nakapirming laki na serye ng mga elemento ng parehong uri ng data. Para gumana sila nang maayos, kailangan nila ng mabilis, direktang pag-access sa mga partikular na bagay sa pamamagitan ng isang index.
  2. Mga Naka-link na Listahan : Ang mga naka-link na listahan ay binubuo ng mga node, na naglalaman ng isang elemento at isang reference sa susunod na node at/o nakaraang node. Dahil sa mahusay na operasyon ng mga ito, ang mga naka-link na listahan ay pinakaangkop sa mga sitwasyong nangangailangan ng madalas na pagpasok o pagtanggal ng elemento. Gayunpaman, ang pag-access sa mga indibidwal na elemento sa pamamagitan ng index sa mga naka-link na listahan ay mas mabagal kumpara sa mga array.
  3. Mga Pila at Stack : Sumusunod ang mga stack sa panuntunang Last-In-First-Out (LIFO), kung saan ang huling item na ipinasok ay ang unang item na inalis. Ang mga pila ay pinamamahalaan ng prinsipyong First-In-First-Out (FIFO). kung saan ang unang elementong idinagdag ay siya ring unang tinanggal.
  4. Mga Hash Table : Ang mga hash table ay isang anyo ng istruktura ng data na nagtataglay ng mga pares ng key-value. Ang pinakamahusay na solusyon ay ang paggamit ng mga hash table kapag ang bilang ng mga bahagi ay hindi mahuhulaan, at kailangan mo ng mabilis na pag-access sa mga halaga sa pamamagitan ng key.
  5. Mga puno : Ang mga puno ay mga hierarchical na istruktura ng data na maaaring mag-imbak ng isang pangkat ng mga elemento sa isang hierarchy. Ang pinakamahusay na paggamit para sa binary search tree ay nasa mga hierarchical na istruktura ng data kung saan ang mga ugnayan sa pagitan ng mga item ng data ay maaaring kumatawan sa isang istraktura na parang puno.

Pagpili ng Tamang Istraktura ng Data

Bago pumili ng istraktura ng data, isaalang-alang ang data, obligasyon, at kapaligiran ng iyong application. Habang ginagawa ang iyong pinili, isipin ang mga sumusunod na elemento:

  1. Komplikado ng Oras : Ang pagganap ng iyong application ay maaaring makabuluhang maapektuhan ng pagiging kumplikado ng oras ng iyong istraktura ng data. Kung ang iyong application ay nangangailangan ng madalas na paghahanap o pagkuha ng mga operasyon, gumamit ng isang istraktura ng data na may pinababang pagiging kumplikado ng oras, tulad ng isang hash table.
  2. Pagiging kumplikado ng Space : Ang pagiging kumplikado ng espasyo ng istraktura ng data ay isa pang mahalagang pagsasaalang-alang. Kung memory-intensive ang iyong application, pumili ng istraktura ng data na may mas kaunting pagiging kumplikado ng espasyo, gaya ng array. Kung ang espasyo ay hindi isang alalahanin, maaari kang gumamit ng isang istraktura ng data na may mas malaking pagiging kumplikado ng espasyo, tulad ng isang puno.
  3. Read vs. Write Operations : Kung gumagamit ang iyong application ng maraming pagpapatakbo ng pagsulat, pumili ng istraktura ng data na may mas mabilis na pagganap ng pagpasok, tulad ng hash table. Kung ang iyong application ay nangangailangan ng maraming read operation, pumili ng istruktura ng data na may mas mabilis na bilis ng paghahanap, tulad ng isang binary search tree.
  4. Uri ng Data : Ang data na iyong kinakaharap ay maaari ring makaapekto sa iyong napiling istraktura ng data. Halimbawa, maaari kang gumamit ng istruktura ng data na nakabatay sa puno kung hierarchical ang iyong data. Kung mayroon kang simpleng data na kailangang i-access nang random, ang pagpili ng istruktura ng data na nakabatay sa array ay maaaring ang iyong pinakamahusay na pagpipilian.
  5. Magagamit na mga Aklatan : Isaalang-alang ang mga aklatan na madaling ma-access para sa istraktura ng data na iyong isinasaalang-alang. Maaaring mas madaling i-execute at mapanatili kung ang iyong programming language ay may mga built-in na library na magagamit para sa isang partikular na istraktura ng data.

Ang sumusunod na halimbawa ng Python ay nagpapakita kung paano piliin ang pinakamahusay na istraktura ng data para sa isang partikular na kaso ng paggamit.

Isaalang-alang ang kaso kung saan bubuo ka ng application ng file system na kailangang mag-imbak at kumuha ng mga file sa isang hierarchy. Dapat kang pumili ng istraktura ng data na mahusay na makakatawan sa hierarchical na istrakturang ito at mabilis na magsagawa ng mga operasyon tulad ng paghahanap, pagpasok, at pagtanggal.

Maaaring isang magandang ideya na gumamit ng istruktura ng data na nakabatay sa puno tulad ng isang binary na paghahanap o isang B-tree. Kung ang bilang ng mga entry sa bawat direktoryo ay medyo maliit at ang puno ay hindi masyadong malalim na binary search tree ay gagana nang maayos. Ang isang B-tree ay magiging mas angkop para sa mas malaking bilang ng mga file at mas malalim na istruktura ng direktoryo.

Nasa ibaba ang isang halimbawa ng isang binary search tree sa Python.

 class Node: 
   def __init__(self, value):

       self.value = value
       self.left_child = None
       self.right_child = None

class BinarySearchTree:

   def __init__(self):
       self.root = None
   def insert(self, value):

       if self.root is None:
           self.root = Node(value)

       else:
           self._insert(value, self.root)
   def _insert(self, value, current_node):

       if value < current_node.value:
           if current_node.left_child is None:
               current_node.left_child = Node(value)

           else:
               self._insert(value, current_node.left_child)
       elif value > current_node.value:
           if current_node.right_child is None:
               current_node.right_child = Node(value)
           else:
               self._insert(value, current_node.right_child)

       else:
           print("Value already exists in tree.")
   def search(self, value):
       if self.root is not None:
           return self._search(value, self.root)

       else:
           return False
   def _search(self, value, current_node):

       if value == current_node.value:
           return True

       elif value < current_node.value and current_node.left_child is not None:
           return self._search(value, current_node.left_child)

       elif value > current_node.value and current_node.right_child is not None:
           return self._search(value, current_node.right_child)

       else:
           return False

Sa pagpapatupad na ito, bumuo ka ng dalawang klase: a BinarySearchTree klase na namamahala sa mga operasyon sa pagpasok at paghahanap at a Node klase na sumasagisag sa isang node sa binary search tree.

Habang ang paraan ng pagpasok ay naglalagay ng bagong node sa naaangkop na lokasyon sa puno depende sa halaga nito, ang paraan ng paghahanap ay naghahanap ng isang node na may tinukoy na halaga. Ang pagiging kumplikado ng oras ng parehong operasyon sa isang balanseng puno ay O(log n) .

Piliin ang Optimal Data Structure

Ang bilis at kakayahang umangkop ng iyong application ay maaaring makabuluhang mapabuti ng istraktura ng data na iyong pinili. Ang pagsasaalang-alang sa iyong data, iyong mga pagpapatakbo, at iyong kapaligiran ay maaaring makatulong sa iyo sa pagpili ng pinakamahusay na istraktura ng data.

Mahalaga ang mga pagsasaalang-alang tulad ng pagiging kumplikado ng oras, pagiging kumplikado ng espasyo, mga operasyong read versus write, concurrency, uri ng data, at accessibility ng library.

Sa pamamagitan ng pagtatasa sa bigat ng bawat bahagi, dapat mong piliin ang istraktura ng data na nakakatugon sa mga pangangailangan ng iyong aplikasyon.