Home / ອານກໍລິກທຶມ / Trees
ຕົ້ນໄມ້ເປັນໂຄງສ້າງຂໍ້ມູນທີ່ໃຊ້ກັນຢ່າງກວ້າງຂວາງໃນວິທະຍາສາດຄອມພິວເຕີ ແລະການຂຽນໂປຼແກຼມ. ຕົ້ນໄມ້ແມ່ນຊຸດຂອງຂໍ້ທີ່ເຊື່ອມຕໍ່ກັນດ້ວຍຂອບ. ແຕ່ລະ node ໃນຕົ້ນໄມ້ມີ node ຫຼັກ (ຍົກເວັ້ນ node ຮາກ) ແລະ node ເດັກນ້ອຍສູນຫຼືຫຼາຍກວ່ານັ້ນ. ຂໍ້ຢູ່ລຸ່ມຂອງຕົ້ນໄມ້ທີ່ບໍ່ມີລູກແມ່ນເອີ້ນວ່າຂໍ້ຂອງໃບ.
ຕົ້ນໄມ້ມີລະດັບຄວາມກ້ວາງຂອງການນໍາໃຊ້ໃນວິທະຍາສາດຄອມພິວເຕີ. ພວກເຂົາສາມາດຖືກໃຊ້ເພື່ອສ້າງແບບຈໍາລອງການພົວພັນແບບລໍາດັບຊັ້ນ, ເຊັ່ນ: ການຈັດຕັ້ງຂອງລະບົບໄຟລ໌ຫຼືໂຄງສ້າງຂອງຫນ້າເວັບ. ຕົ້ນໄມ້ຍັງສາມາດຖືກນໍາໃຊ້ໃນວິທີການຄົ້ນຫາ, algorithms ການຈັດລຽງ, ແລະຄໍາຮ້ອງສະຫມັກອື່ນໆ.
ລະດັບຄວາມສູງຂອງຕົ້ນໄມ້ແມ່ນຕົວເລກຂອງແຄມທາງຍາວທີ່ສຸດຈາກຂໍ້ຮາກໄປຫາຂໍ້ໃບ. ຄວາມເລິກຂອງ node ແມ່ນຈໍານວນຂອງຂອບຈາກ node ຮາກໄປຫາ node ນັ້ນ. ລະດັບຂອງ node ແມ່ນຈໍານວນເດັກນ້ອຍທີ່ມັນມີ.
ມີຫຼາຍຊະນິດຂອງຕົ້ນໄມ້ທີ່ຖືກນໍາໃຊ້ທົ່ວໄປໃນການຂຽນໂປຼແກຼມ. ຕົ້ນໄມ້ຄູ່ແມ່ນຕົ້ນໄມ້ທີ່ແຕ່ລະ node ມີລູກຫຼາຍທີ່ສຸດສອງຄົນ. ຕົ້ນໄມ້ຄົ້ນຫາໄບນາຣີແມ່ນຕົ້ນໄມ້ໄບນາຣີທີ່ລູກຊ້າຍຂອງ node ມີພຽງແຕ່ຄ່າທີ່ນ້ອຍກວ່າ node, ແລະລູກຂວາຂອງ node ມີພຽງແຕ່ຄ່າທີ່ໃຫຍ່ກວ່າ node ເທົ່ານັ້ນ. ຕົ້ນໄມ້ AVL ແລະຕົ້ນໄມ້ສີແດງ - ດຳ ແມ່ນຕົ້ນໄມ້ຄົ້ນຫາຄູ່ທີ່ມີຄວາມສົມດູນ, ຊຶ່ງ ໝາຍ ຄວາມວ່າຄວາມສູງຂອງຕົ້ນໄມ້ຍ່ອຍຊ້າຍແລະຂວາຂອງຂໍ້ໃດ ໜຶ່ງ ແຕກຕ່າງກັນ. B-trees ແມ່ນປະເພດຂອງຕົ້ນໄມ້ທີ່ສົມດູນທີ່ຖືກນໍາໃຊ້ທົ່ວໄປໃນຖານຂໍ້ມູນ.
ຄວາມເຂົ້າໃຈກ່ຽວກັບຄຸນສົມບັດແລະປະເພດຂອງຕົ້ນໄມ້ເປັນສິ່ງສໍາຄັນສໍາລັບການດໍາເນີນໂຄງການທີ່ມີປະສິດຕິຜົນແລະສໍາລັບການເລືອກໂຄງສ້າງຂໍ້ມູນທີ່ເຫມາະສົມກັບຄໍາຮ້ອງສະຫມັກທີ່ກໍານົດໄວ້.
ມີຫຼາຍຊະນິດຂອງຕົ້ນໄມ້, ແຕ່ລະຄົນມີຄຸນສົມບັດແລະການນໍາໃຊ້ທີ່ເປັນເອກະລັກຂອງຕົນເອງ. ນີ້ແມ່ນບາງຊະນິດຂອງຕົ້ນໄມ້ທົ່ວໄປທີ່ສຸດ:
ຕົ້ນໄມ້ໄບນາຣີ: ໄມ້ຢືນຕົ້ນສອງແມ່ນຕົ້ນໄມ້ທີ່ແຕ່ລະຂໍ້ມີລູກນ້ອຍທີ່ສຸດສອງລູກ, ເອີ້ນວ່າລູກຊ້າຍ ແລະ ລູກຂວາ.
Binary Search Tree (BST): ຕົ້ນໄມ້ຄົ້ນຫາໄບນາຣີແມ່ນເປັນໄມ້ຢືນຕົ້ນຄູ່ທີ່ລູກຊ້າຍຂອງ node ມີພຽງແຕ່ຄ່າທີ່ນ້ອຍກວ່າ node, ແລະລູກຂວາຂອງ node ມີພຽງແຕ່ຄ່າທີ່ໃຫຍ່ກວ່າ node ເທົ່ານັ້ນ. ຄຸນສົມບັດນີ້ອະນຸຍາດໃຫ້ດໍາເນີນການຄົ້ນຫາແລະຈັດຮຽງຢ່າງມີປະສິດທິພາບ.
AVL Tree: ຕົ້ນໄມ້ AVL ແມ່ນຕົ້ນໄມ້ຄົ້ນຫາຄູ່ທີ່ມີຄວາມສົມດູນ, ຊຶ່ງຫມາຍຄວາມວ່າຄວາມສູງຂອງຕົ້ນໄມ້ຍ່ອຍຊ້າຍແລະຂວາຂອງ node ໃດແຕກຕ່າງກັນໂດຍສູງສຸດຫນຶ່ງ. ນີ້ຮັບປະກັນການປະຕິບັດການຄົ້ນຫາແລະການແຊກທີ່ມີປະສິດທິພາບ.
ຕົ້ນໄມ້ສີແດງ-ດຳ: ຕົ້ນໄມ້ສີແດງ-ດຳແມ່ນຕົ້ນໄມ້ຊອກຫາຄູ່ທີ່ແຕ່ລະຂໍ້ມີສີແດງ ຫຼື ດຳ. ຕົ້ນໄມ້ມີຄວາມສົມດູນໂດຍການຮັບປະກັນວ່າບໍ່ມີເສັ້ນທາງຈາກຮາກໄປຫາໃບຍາວກວ່າສອງເທົ່າຂອງເສັ້ນທາງອື່ນ.
B-Tree: B-tree ແມ່ນໂຄງສ້າງຂໍ້ມູນຕົ້ນໄມ້ທີ່ຖືກນໍາໃຊ້ເພື່ອເກັບຮັກສາຂໍ້ມູນຈໍານວນຫລາຍໃນແຜ່ນຫຼືໃນຫນ່ວຍຄວາມຈໍາ. ມັນເປັນຕົ້ນໄມ້ທີ່ສົມດູນທີ່ຊ່ວຍໃຫ້ການຄົ້ນຫາທີ່ມີປະສິດທິພາບ, ໃສ່, ແລະລຶບການດໍາເນີນງານ.
Trie: A trie ແມ່ນໂຄງສ້າງຂໍ້ມູນຕົ້ນໄມ້ທີ່ໃຊ້ສໍາລັບການດຶງລະຫັດທີ່ມີປະສິດທິພາບຈາກຊຸດໃຫຍ່ຂອງສາຍ. ມັນຍັງເປັນທີ່ຮູ້ຈັກເປັນຕົ້ນໄມ້ prefix, ເພາະວ່າແຕ່ລະ node ເປັນຕົວແທນຂອງຄໍານໍາຫນ້າຂອງຫນຶ່ງຫຼືຫຼາຍສາຍ.
Segment Tree: segment tree ແມ່ນຕົ້ນໄມ້ຄູ່ທີ່ໃຊ້ສໍາລັບການສອບຖາມ range ໃນ arrays ຫຼືໂຄງສ້າງຂໍ້ມູນອື່ນໆ. ມັນອະນຸຍາດໃຫ້ມີການສອບຖາມປະສິດທິພາບຂອງຜົນລວມ, ຕໍາ່ສຸດ, ສູງສຸດ, ຫຼືຄ່າລວມອື່ນໆຂອງຊ່ວງຂອງອົງປະກອບໃນອາເຣ.
heap: heap ເປັນຕົ້ນໄມ້ຄູ່ທີ່ຄ່າຂອງແຕ່ລະ node ຫຼາຍກວ່າ ຫຼືເທົ່າກັບຄ່າຂອງລູກຂອງມັນ (ໃນ heap ສູງສຸດ) ຫຼືຫນ້ອຍກວ່າ ຫຼືເທົ່າກັບຄ່າຂອງລູກຂອງມັນ (ໃນ min heap). Heaps ຖືກໃຊ້ທົ່ວໄປໃນແຖວບູລິມະສິດ ແລະລະບົບກຣາຟ.
ຄວາມເຂົ້າໃຈກ່ຽວກັບຄຸນສົມບັດແລະປະເພດຂອງຕົ້ນໄມ້ເປັນສິ່ງສໍາຄັນສໍາລັບການດໍາເນີນໂຄງການທີ່ມີປະສິດຕິຜົນແລະສໍາລັບການເລືອກໂຄງສ້າງຂໍ້ມູນທີ່ເຫມາະສົມກັບຄໍາຮ້ອງສະຫມັກທີ່ກໍານົດໄວ້.
ຕົ້ນໄມ້ສະຫນັບສະຫນູນບາງການດໍາເນີນງານພື້ນຖານທີ່ຖືກນໍາໃຊ້ທົ່ວໄປໃນການຂຽນໂປຼແກຼມ. ນີ້ແມ່ນບາງການດໍາເນີນງານທີ່ສໍາຄັນທີ່ສຸດ:
ການໃສ່: ການເພີ່ມ node ໃຫມ່ກັບຕົ້ນໄມ້ໃນສະຖານທີ່ທີ່ເຫມາະສົມໂດຍອີງໃສ່ມູນຄ່າຂອງມັນ.
ການລຶບ: ການຖອນ node ຈາກຕົ້ນໄມ້ໃນຂະນະທີ່ຮັກສາຄຸນສົມບັດຂອງຕົ້ນໄມ້.
ການເດີນທາງຜ່ານ: ໄປຢ້ຽມຢາມແຕ່ລະ node ໃນຕົ້ນໄມ້ໃນຄໍາສັ່ງສະເພາະ. ມີສາມປະເພດຕົ້ນຕໍຂອງການຂ້າມຜ່ານ:
In-order traversal: ການໄປຢ້ຽມຢາມຕົ້ນໄມ້ຍ່ອຍທາງຊ້າຍ, ຫຼັງຈາກນັ້ນ node ໃນປັດຈຸບັນ, ຫຼັງຈາກນັ້ນເປັນຕົ້ນໄມ້ຍ່ອຍຂວາ.
Pre-order traversal: ການໄປຢ້ຽມຢາມ node ໃນປັດຈຸບັນ, ຈາກນັ້ນ subtree ຊ້າຍ, ຫຼັງຈາກນັ້ນ subtree ຂວາ.
Post-order traversal: ການໄປຢ້ຽມຢາມຕົ້ນໄມ້ຍ່ອຍຊ້າຍ, ຈາກນັ້ນຕົ້ນໄມ້ຍ່ອຍຂວາ, ຈາກນັ້ນແມ່ນຂໍ້ປະຈຸບັນ.
ຄົ້ນຫາ: ຊອກຫາຂໍ້ສະເພາະໃນຕົ້ນໄມ້ໂດຍອີງໃສ່ມູນຄ່າຂອງມັນ.
ຄວາມສູງ: ກັບຄືນຄວາມສູງຂອງຕົ້ນໄມ້, ເຊິ່ງເປັນຈໍານວນແຄມຂອງເສັ້ນທາງທີ່ຍາວທີ່ສຸດຈາກຮາກໄປຫາຂໍ້ໃບ.
ຂະໜາດ: ສົ່ງຄືນຈຳນວນຂອງ nodes ໃນຕົ້ນໄມ້.
ຄວາມສັບສົນທີ່ໃຊ້ເວລາຂອງການດໍາເນີນງານເຫຼົ່ານີ້ແມ່ນຂຶ້ນກັບການປະຕິບັດສະເພາະຂອງຕົ້ນໄມ້. ຕົວຢ່າງ, ການປະຕິບັດການແຊກແລະການລົບຢູ່ໃນຕົ້ນໄມ້ຄົ້ນຫາຄູ່ໃຊ້ເວລາ O(log n) ໂດຍສະເລ່ຍ, ບ່ອນທີ່ n ແມ່ນຈໍານວນຂອງ nodes ໃນຕົ້ນໄມ້. ການປະຕິບັດການຂ້າມຜ່ານໃຊ້ເວລາ O(n), ບ່ອນທີ່ n ແມ່ນຈໍານວນຂອງ nodes ໃນຕົ້ນໄມ້.
ມັນເປັນສິ່ງສໍາຄັນທີ່ຈະເລືອກເອົາປະເພດທີ່ເຫມາະສົມຂອງຕົ້ນໄມ້ແລະການປະຕິບັດສໍາລັບຄໍາຮ້ອງສະຫມັກທີ່ໄດ້ຮັບໂດຍອີງໃສ່ຄວາມຕ້ອງການສະເພາະຂອງບັນຫາທີ່ມີຢູ່ໃນມື. ຕົວຢ່າງເຊັ່ນ, ຕົ້ນໄມ້ຄົ້ນຫາສອງແມ່ນເປັນປະໂຫຍດສໍາລັບການຄົ້ນຫາແລະການຈັດລຽງ, ໃນຂະນະທີ່ຕົ້ນໄມ້ segment ມີປະໂຫຍດສໍາລັບການສອບຖາມລະດັບໃນ arrays.