โครงสร้างข้อมูลใน JavaScript

Sep 12 2020
สำหรับวิศวกรซอฟต์แวร์ Frontend
บทนำเมื่อตรรกะทางธุรกิจเคลื่อนจากด้านหลังไปข้างหน้ามากขึ้นความเชี่ยวชาญใน Frontend Engineering จึงมีความสำคัญมากขึ้นเรื่อย ๆ ในฐานะ Frontend Engineers เราต้องอาศัยไลบรารีมุมมองเช่น React เพื่อให้มีประสิทธิผล

บทนำ

เมื่อตรรกะทางธุรกิจเปลี่ยนจากด้านหลังไปข้างหน้ามากขึ้นความเชี่ยวชาญในFrontend Engineeringจึงมีความสำคัญมากขึ้นเรื่อย ๆ ในฐานะFrontend Engineersเราต้องอาศัยไลบรารีมุมมองเช่นReactเพื่อให้มีประสิทธิผล การดูไลบรารีจะขึ้นอยู่กับไลบรารีของรัฐเช่นReduxเพื่อจัดการข้อมูล ร่วมกัน React และ Redux สมัครสมาชิกตามกระบวนทัศน์การเขียนโปรแกรมแบบปฏิกิริยาซึ่งการอัปเดต UI ตอบสนองต่อการเปลี่ยนแปลงข้อมูล แบ็กเอนด์ทำหน้าที่เป็นเซิร์ฟเวอร์ API มากขึ้นเรื่อย ๆ โดยให้จุดสิ้นสุดเพื่อดึงและอัปเดตข้อมูลเท่านั้น ผลแบ็กเอนด์เพียงแค่ "ส่งต่อ" ฐานข้อมูลไปยังส่วนหน้าโดยคาดหวังว่าวิศวกรส่วนหน้าจะจัดการตรรกะของคอนโทรลเลอร์ทั้งหมด ความนิยมที่เพิ่มขึ้นของไมโครเซอร์วิสและGraphQL เป็นเครื่องยืนยันถึงแนวโน้มการเติบโตนี้

ตอนนี้นอกจากจะมีความเข้าใจด้านสุนทรียศาสตร์เกี่ยวกับ HTML และ CSS แล้ว Frontend Engineers ยังคาดว่าจะเชี่ยวชาญ JavaScript ด้วย เนื่องจากที่เก็บข้อมูลบนไคลเอนต์กลายเป็น "แบบจำลอง" ของฐานข้อมูลบนเซิร์ฟเวอร์ความรู้ที่ใกล้ชิดเกี่ยวกับโครงสร้างข้อมูลสำนวนจึงกลายเป็นหัวใจสำคัญ ในความเป็นจริงระดับประสบการณ์ของวิศวกรสามารถอนุมานได้จากความสามารถในการแยกแยะว่าเมื่อใดและทำไมจึงต้องใช้โครงสร้างข้อมูลเฉพาะ

โปรแกรมเมอร์ที่ไม่ดีกังวลเกี่ยวกับรหัส โปรแกรมเมอร์ที่ดีกังวลเกี่ยวกับโครงสร้างข้อมูลและความสัมพันธ์

- Linus Torvalds ผู้สร้าง Linux และ Git

ในระดับสูงโดยทั่วไปมีโครงสร้างข้อมูลสามประเภท สแต็คและคิวเป็นโครงสร้างคล้ายอาร์เรย์ที่แตกต่างกันเฉพาะวิธีแทรกและลบรายการ รายการที่เชื่อมโยง , ต้นไม้ , และกราฟเป็นโครงสร้างที่มีโหนดที่ให้การอ้างอิงไปยังโหนดอื่น ๆ ตารางแฮชขึ้นอยู่กับฟังก์ชันแฮชเพื่อบันทึกและค้นหาข้อมูล

ในแง่ของความซับซ้อนStacksและมีความง่ายและสามารถสร้างขึ้นมาจากQueues และซับซ้อนที่สุดเพราะขยายแนวคิดของรายการที่เชื่อมโยง จำเป็นต้องใช้โครงสร้างข้อมูลเหล่านี้เพื่อดำเนินการอย่างน่าเชื่อถือ ในแง่ของประสิทธิภาพนั้นLinked Listsเหมาะสมที่สุดสำหรับการบันทึกและจัดเก็บข้อมูลในขณะที่Hash Tablesมีประสิทธิภาพมากที่สุดในการค้นหาและดึงข้อมูลLinked ListsTreesGraphsHash Tables

เพื่ออธิบายเหตุผลและแสดงให้เห็นว่าเมื่อใดบทความนี้จะสอดคล้องกับลำดับของการอ้างอิงเหล่านี้ เอาล่ะ!

ซ้อนกัน

สิ่งที่สำคัญที่สุดStackใน JavaScript คือcall stackที่เราผลักดันในขอบเขตของ a functionเมื่อใดก็ตามที่เราดำเนินการ โดยทางโปรแกรมเป็นเพียงการarrayดำเนินการหลักสองประการ: pushและpop. Push จะเพิ่มองค์ประกอบที่ด้านบนสุดของอาร์เรย์ในขณะที่Pop จะลบองค์ประกอบเหล่านั้นออกจากตำแหน่งเดียวกัน กล่าวอีกนัยหนึ่งStacks เป็นไปตามโปรโตคอล“ Last In, First Out” (LIFO)

ด้านล่างนี้เป็นตัวอย่างของStackรหัสใน สังเกตว่าเราสามารถกลับลำดับของสแตกได้: ด้านล่างกลายเป็นด้านบนและด้านบนจะกลายเป็นด้านล่าง ดังนั้นเราสามารถใช้อาร์เรย์unshiftและshiftวิธีการแทนpushและpopตามลำดับ

เมื่อจำนวนรายการเพิ่มขึ้นpush/ popมีประสิทธิภาพมากขึ้นกว่าunshift/ shiftเนื่องจากทุกรายการต้องได้รับการจัดทำดัชนีใหม่ในภายหลัง แต่ไม่ใช่รายการเดิม

คิว

JavaScript เป็นภาษาโปรแกรมที่ขับเคลื่อนด้วยเหตุการณ์ซึ่งทำให้สามารถรองรับการดำเนินการที่ไม่ปิดกั้น ภายในเบราว์เซอร์จัดการเพียงหนึ่งหัวข้อที่จะเรียกใช้รหัส JavaScript ทั้งใช้คิวงานเพื่อenqueuelistenersและห่วงเหตุการณ์ที่จะฟังeventsสำหรับการลงทะเบียน เพื่อรองรับความไม่ตรงกันในสภาพแวดล้อมแบบเธรดเดียว (เพื่อประหยัดทรัพยากรของ CPU และปรับปรุงประสบการณ์การใช้งานเว็บ) ให้listener functions ยกเลิกคิวและดำเนินการเฉพาะเมื่อสแต็กการโทรว่าง Promisesขึ้นอยู่กับสถาปัตยกรรมที่ขับเคลื่อนด้วยเหตุการณ์นี้เพื่อให้สามารถดำเนินการ "สไตล์ซิงโครนัส" ของโค้ดอะซิงโครนัสที่ไม่บล็อกการดำเนินการอื่น

โดยทางโปรแกรมQueuesเป็นเพียงอาร์เรย์ที่มีการดำเนินการหลักสองรายการ: unshiftและpop. Unshift enqueuesไอเท็มไปยังจุดสิ้นสุดของอาร์เรย์ในขณะที่Pop dequeuesจากจุดเริ่มต้นของอาร์เรย์ กล่าวอีกนัยหนึ่งคิวเป็นไปตามโปรโตคอล“ เข้าก่อนออกก่อน” (FIFO) หากทิศทางกลับกันเราสามารถแทนที่unshiftและpopด้วยpushและshiftตามลำดับ

ตัวอย่างQueueรหัสใน:

รายการที่เชื่อมโยง

เช่นเดียวกับอาร์เรย์Linked Listsองค์ประกอบการจัดเก็บข้อมูลในลำดับการสั่งซื้อ แทนที่จะเก็บดัชนีรายการที่เชื่อมโยงจะชี้ไปยังองค์ประกอบอื่น ๆ แรก โหนดเรียกว่าหัวขณะที่ล่าสุด โหนดเรียกว่าหาง ในรายการที่เชื่อมโยงเดี่ยวแต่ละโหนดมีตัวชี้เพียงตัวเดียวไปยังโหนดถัดไป นี่หัวเป็นที่ที่เราจะเริ่มต้นการเดินเท้าของเราลงส่วนที่เหลือของรายการ ในรายการที่เชื่อมโยงแบบทวีคูณตัวชี้ไปยังโหนดก่อนหน้าจะถูกเก็บไว้ด้วย ดังนั้นเราสามารถเริ่มจากหางและเดิน "ถอยหลัง" ไปทางศีรษะได้

รายการที่เชื่อมโยงมีการ แทรกและการลบเวลาคงที่เนื่องจากเราสามารถเปลี่ยนพอยน์เตอร์ได้ ในการดำเนินการเดียวกันในอาร์เรย์ต้องใช้เวลาเชิงเส้นเนื่องจากรายการที่ตามมาจำเป็นต้องเลื่อนไป นอกจากนี้รายการที่เชื่อมโยงยังสามารถเติบโตได้ตราบเท่าที่มีที่ว่าง อย่างไรก็ตามแม้อาร์เรย์ "ไดนามิก" ที่ปรับขนาดโดยอัตโนมัติอาจมีราคาแพงอย่างไม่คาดคิด แน่นอนว่ามีการแลกเปลี่ยนเสมอ ในการค้นหาหรือแก้ไของค์ประกอบในรายการที่เชื่อมโยงเราอาจต้องเดินตามความยาวทั้งหมดซึ่งเท่ากับเวลาเชิงเส้น อย่างไรก็ตามด้วยดัชนีอาร์เรย์การดำเนินการดังกล่าวเป็นเรื่องเล็กน้อย

เช่นเดียวกับอาร์เรย์รายการที่เชื่อมโยงสามารถทำงานเป็นสแต็กได้ ง่ายๆเพียงแค่ให้หัวเป็นที่สำหรับใส่และถอดออกเท่านั้น รายการที่เชื่อมโยงยังสามารถทำงานเป็นคิวได้ สิ่งนี้สามารถทำได้ด้วยรายการที่เชื่อมโยงกันสองครั้งโดยที่การแทรกเกิดขึ้นที่หางและการกำจัดจะเกิดขึ้นที่ส่วนหัวหรือในทางกลับกัน สำหรับองค์ประกอบจำนวนมากวิธีการใช้งานคิวนี้มีประสิทธิภาพมากกว่าการใช้อาร์เรย์เนื่องจากshiftและunshiftการดำเนินการที่จุดเริ่มต้นของอาร์เรย์ต้องใช้เวลาเชิงเส้นในการจัดทำดัชนีใหม่ทุกองค์ประกอบที่ตามมา

รายการที่เชื่อมโยงมีประโยชน์ทั้งในไคลเอนต์และเซิร์ฟเวอร์ บนไคลเอ็นต์ไลบรารีการจัดการของรัฐเช่นReduxจัดโครงสร้างตรรกะของมิดเดิลแวร์ในรูปแบบรายการที่เชื่อมโยง เมื่อมีการส่งการดำเนินการพวกมันจะถูกส่งจากมิดเดิลแวร์หนึ่งไปยังอีกตัวหนึ่งจนกว่าจะมีการเยี่ยมชมทั้งหมดก่อนถึงตัวลด บนเซิร์ฟเวอร์เว็บเฟรมเวิร์กเช่นExpressยังจัดโครงสร้างตรรกะของมิดเดิลแวร์ในลักษณะเดียวกัน เมื่อมีการร้องขอจะได้รับมันเป็นประปาจากมิดเดิ้ลต่อไปจนกว่าจะมีการตอบสนองจะมีการออก

ตัวอย่างDoubly-Linked Listรหัสใน:

ต้นไม้

A Treeเป็นเหมือนรายการที่เชื่อมโยงยกเว้นว่าจะเก็บการอ้างอิงไปยังโหนดลูกจำนวนมาก ในโครงสร้างลำดับชั้น กล่าวคือแต่ละโหนดสามารถมีพาเรนต์ได้ไม่เกินหนึ่งโหนด วัตถุเอกสารรุ่น (DOM) เป็นโครงสร้างดังกล่าวมีรากโหนดที่สาขาเข้าไปในและโหนดซึ่งแบ่งย่อยลงไปอีกทุกคุ้นเคยแท็ก ภายใต้ฝากระโปรงการถ่ายทอดทางพันธุกรรมและองค์ประกอบของPrototypal ที่มีส่วนประกอบของ React ยังสร้างโครงสร้างของต้นไม้ แน่นอนว่าในฐานะตัวแทนในหน่วยความจำของ DOM นั้นVirtual DOMของ React ก็เป็นโครงสร้างแบบต้นไม้เช่นกันhtmlheadbody

ค้นหาแบบไบนารีต้นไม้เป็นพิเศษเพราะแต่ละโหนดสามารถมีไม่เกินลูกสองคน เด็กซ้ายต้องมีค่าที่มีขนาดเล็กกว่าหรือเท่ากับแม่ของตนในขณะที่เด็กที่ถูกต้องจะต้องมีค่ามากขึ้น มีโครงสร้างและสมดุลด้วยวิธีนี้เราสามารถค้นหาค่าใดก็ได้ในเวลาลอการิทึมเพราะเราสามารถละเว้นครึ่งหนึ่งของการแตกกิ่งก้านด้วยการวนซ้ำแต่ละครั้ง การแทรกและการลบอาจเกิดขึ้นในเวลาลอการิทึมได้เช่นกัน นอกจากนี้ยังมีขนาดเล็กที่สุดและใหญ่ที่สุด คุ้มค่าสามารถพบได้ง่ายที่ด้านซ้ายสุดและขวาสุด ใบตามลำดับ

การข้ามผ่านต้นไม้สามารถเกิดขึ้นได้ในขั้นตอนแนวตั้งหรือแนวนอน ในDepth-First Traversal (DFT) ในแนวตั้งอัลกอริธึมแบบวนซ้ำจะสวยงามกว่าแบบวนซ้ำ โหนดสามารถแยบยลในการสั่งซื้อล่วงหน้า , ในการสั่งซื้อหรือโพสต์สั่งซื้อ หากต้องสำรวจรากก่อนตรวจใบควรเลือกสั่งซื้อล่วงหน้า แต่ถ้าต้องสำรวจใบก่อนถึงรากก็ควรเลือกโพสต์ออร์เดอร์ เป็นชื่อของมันหมายถึงในการสั่งซื้อช่วยให้เราสามารถสำรวจโหนดในลำดับการสั่งซื้อ คุณสมบัตินี้จะทำให้การค้นหาแบบไบนารีต้นไม้ที่เหมาะสมที่สุดสำหรับการเรียงลำดับ

ในBreadth-First Traversal (BFT) ในแนวนอนวิธีการวนซ้ำนั้นสง่างามกว่าการวนซ้ำ สิ่งนี้จำเป็นต้องใช้queueเพื่อติดตามโหนดลูกทั้งหมดด้วยการทำซ้ำแต่ละครั้ง อย่างไรก็ตามหน่วยความจำที่จำเป็นสำหรับคิวดังกล่าวอาจไม่สำคัญ หากรูปทรงของต้นไม้กว้างกว่าลึก BFT เป็นตัวเลือกที่ดีกว่า DFT นอกจากนี้เส้นทางที่ BFT ใช้ระหว่างสองโหนดใด ๆ ก็เป็นเส้นทางที่สั้นที่สุด

ตัวอย่างBinary Search Treeรหัสใน:

กราฟ

หากต้นไม้มีอิสระที่จะมีพ่อแม่มากกว่าหนึ่งต้นมันจะกลายเป็นไฟล์Graph. ขอบที่โหนดที่เชื่อมต่อกันในกราฟสามารถกำกับหรือไม่มีทิศทางถ่วงน้ำหนักหรือไม่ได้ชั่ง ขอบที่มีทั้งทิศทางและน้ำหนักคล้ายกับเวกเตอร์

มรดกหลายในรูปแบบของMixinsและข้อมูลของวัตถุที่มีหลายต่อหลายความสัมพันธ์การผลิตโครงสร้างกราฟ โซเชียลเน็ตเวิร์กและอินเทอร์เน็ตเองก็เป็นกราฟเช่นกัน กราฟที่ซับซ้อนที่สุดในธรรมชาติคือสมองของมนุษย์ซึ่งเครือข่ายประสาทพยายามที่จะทำซ้ำเพื่อให้เครื่องจักรมีความฉลาดเหนือกว่า

ตัวอย่างGraphรหัสใน:

ทีเค

ตารางแฮช

ตารางแฮชเป็นพจนานุกรมเหมือนโครงสร้างที่คู่ปุ่มเพื่อค่า ตำแหน่งในหน่วยความจำของแต่ละคู่ถูกกำหนดโดย a hash functionซึ่งรับคีย์และส่งคืนแอดเดรสที่ควรใส่และดึงข้อมูลคู่ การชนกันอาจเกิดขึ้นได้หากคีย์สองคีย์ขึ้นไปแปลงเป็นที่อยู่เดียวกัน เพื่อความทนทานgettersและsettersควรคาดการณ์เหตุการณ์เหล่านี้เพื่อให้แน่ใจว่าข้อมูลทั้งหมดสามารถกู้คืนได้และไม่มีการเขียนทับข้อมูล โดยปกติจะlinked listsเสนอทางออกที่ง่ายที่สุด การมีโต๊ะขนาดใหญ่มากยังช่วยได้

หากเราทราบว่าที่อยู่ของเราจะอยู่ในลำดับจำนวนเต็มเราสามารถใช้Arraysเพื่อจัดเก็บคู่คีย์ - ค่าของเราได้ สำหรับการแมปที่อยู่ที่ซับซ้อนมากขึ้นเราสามารถใช้MapsหรือObjects. ตารางแฮชมีการแทรกและค้นหาเวลาคงที่ โดยเฉลี่ย เนื่องจากการชนกันและการปรับขนาดทำให้ต้นทุนเล็กน้อยนี้เพิ่มขึ้นเป็นเชิงเส้น อย่างไรก็ตามในทางปฏิบัติเราสามารถสันนิษฐานได้ว่าฟังก์ชันแฮชนั้นฉลาดพอที่การชนกันและการปรับขนาดนั้นหายากและราคาถูก หากคีย์เป็นตัวแทนของที่อยู่ดังนั้นจึงไม่จำเป็นต้องมีการแฮชก็object literalสามารถทำได้ง่ายๆ แน่นอนว่ามีการแลกเปลี่ยนเสมอ ความสัมพันธ์ระหว่างคีย์และค่าอย่างง่ายและการเชื่อมโยงอย่างง่ายระหว่างคีย์และที่อยู่เสียสละความสัมพันธ์ระหว่างข้อมูล ดังนั้นตารางแฮชจึงไม่เหมาะสมสำหรับการจัดเก็บข้อมูล

หากมีการถ่วงดุลอำนาจการตัดสินใจดึงบุญมากกว่าการจัดเก็บข้อมูลที่ไม่มีโครงสร้างข้อมูลอื่น ๆ สามารถตรงกับความเร็วของตารางแฮชสำหรับการค้นหา , แทรกและลบ ก็ไม่แปลกใจดังนั้นที่มีการใช้งานได้ทุกที่ จากฐานข้อมูลไปยังเซิร์ฟเวอร์ไปยังไคลเอนต์ตารางแฮชและโดยเฉพาะอย่างยิ่งฟังก์ชันแฮชมีความสำคัญต่อประสิทธิภาพและความปลอดภัยของแอปพลิเคชันซอฟต์แวร์ ความเร็วของการสืบค้นฐานข้อมูล ขึ้นอยู่กับการรักษาตารางของดัชนีที่ชี้ไปยังระเบียนตามลำดับที่เรียงลำดับ วิธีนี้การค้นหาไบนารีสามารถดำเนินการในลอการิทึมเวลาประสิทธิภาพมากชนะโดยเฉพาะอย่างยิ่งสำหรับข้อมูลขนาดใหญ่

ทั้งในไคลเอนต์และเซิร์ฟเวอร์ไลบรารียอดนิยมจำนวนมากใช้การบันทึกเพื่อเพิ่มประสิทธิภาพสูงสุด ด้วยการเก็บบันทึกอินพุตและเอาต์พุตไว้ในตารางแฮชฟังก์ชันจะทำงานเพียงครั้งเดียวสำหรับอินพุตเดียวกัน ไลบรารีReselectยอดนิยมใช้กลยุทธ์การแคชนี้เพื่อเพิ่มประสิทธิภาพmapStateToPropsฟังก์ชันในแอปพลิเคชันที่เปิดใช้งานRedux ในความเป็นจริงกลไก JavaScript ยังใช้ตารางแฮชที่เรียกว่าheapsเพื่อจัดเก็บข้อมูลทั้งหมดvariablesและprimitivesเราสร้างขึ้น พวกเขาจะเข้าถึงได้จากตัวชี้ในสาย stack

อินเทอร์เน็ตตัวเองยังต้องอาศัยขั้นตอนวิธีการคร่ำเครียดกับการทำงานอย่างปลอดภัย โครงสร้างของอินเทอร์เน็ตคือคอมพิวเตอร์ทุกเครื่องสามารถสื่อสารกับคอมพิวเตอร์เครื่องอื่นผ่านเว็บของอุปกรณ์ที่เชื่อมต่อกัน เมื่อใดก็ตามที่อุปกรณ์บันทึกเข้าสู่อินเทอร์เน็ตอุปกรณ์นั้นก็จะกลายเป็นเราเตอร์ซึ่งสตรีมข้อมูลสามารถเดินทางได้ อย่างไรก็ตามมันเป็นดาบสองคม กระจายอำนาจสถาปัตยกรรมหมายถึงอุปกรณ์ใด ๆ ในเครือข่ายที่สามารถฟังและการงัดแงะกับแพคเกจข้อมูลที่จะช่วยในการถ่ายทอด ฟังก์ชันแฮชเช่น MD5 และ SHA256 มีบทบาทสำคัญในการป้องกันการโจมตีจากคนตรงกลางดังกล่าว อีคอมเมิร์ซผ่าน HTTPS มีความปลอดภัยเนื่องจากใช้ฟังก์ชันแฮชเหล่านี้เท่านั้น

แรงบันดาลใจจากอินเทอร์เน็ตblockchainเทคโนโลยีพยายามที่จะมาเปิดโครงสร้างมากของเว็บในระดับโปรโตคอล ด้วยการใช้ฟังก์ชันแฮชเพื่อสร้างลายนิ้วมือที่ไม่เปลี่ยนรูป สำหรับทุกบล็อกข้อมูลโดยพื้นฐานแล้วฐานข้อมูลทั้งหมดสามารถอยู่บนเว็บได้อย่างเปิดเผยเพื่อให้ทุกคนเห็นและมีส่วนร่วม ในเชิงโครงสร้าง blockchains เป็นเพียงรายการที่เชื่อมโยงเดียวของต้นไม้ไบนารีของแฮชที่เข้ารหัส คร่ำเครียดเป็นความลับเพื่อให้ฐานข้อมูลของการทำธุรกรรมทางการเงินที่สามารถสร้างและการปรับปรุงออกในการเปิดด้วยคน! ความหมายที่น่าทึ่งคืออำนาจที่น่ากลัวในการสร้างเงินตัวเอง สิ่งที่ครั้งหนึ่งเคยเป็นไปได้สำหรับรัฐบาลและธนาคารกลางตอนนี้ทุกคนสามารถสร้างสกุลเงินของตนเองได้อย่างปลอดภัย! นี้เป็นข้อมูลเชิงลึกที่สำคัญตระหนักโดยผู้ก่อตั้งEthereumและผู้ก่อตั้งนามปากกาของBitcoin

เมื่อฐานข้อมูลมากขึ้นเรื่อย ๆ ความต้องการของ Frontend Engineers ที่สามารถแยกความซับซ้อนของการเข้ารหัสระดับต่ำทั้งหมดออกไปก็จะรวมเข้าด้วยกัน ในอนาคตนี้แตกต่างหลักจะเป็นประสบการณ์ของผู้ใช้

ตัวอย่างHash Tableรหัสใน:

สำหรับแบบฝึกหัดอัลกอริทึมโดยใช้โครงสร้างข้อมูลเหล่านี้และอื่น ๆ โปรดดู: อัลกอริทึมใน JavaScript: 40 ปัญหาวิธีแก้ไขและคำอธิบาย

สรุป

เมื่อตรรกะย้ายจากเซิร์ฟเวอร์ไปยังไคลเอนต์มากขึ้นชั้นข้อมูลบนส่วนหน้าจึงกลายเป็นสิ่งสำคัญยิ่ง การจัดการที่เหมาะสมของเลเยอร์นี้ทำให้เกิดความเชี่ยวชาญในโครงสร้างข้อมูลที่ตรรกะวางอยู่ ไม่มีโครงสร้างข้อมูลใดที่สมบูรณ์แบบสำหรับทุกสถานการณ์เพราะการเพิ่มประสิทธิภาพสำหรับคุณสมบัติหนึ่งจะเท่ากับการสูญเสียอีกรายการหนึ่งเสมอ โครงสร้างบางอย่างมีประสิทธิภาพในการจัดเก็บข้อมูลมากกว่าในขณะที่โครงสร้างอื่น ๆ มีประสิทธิภาพในการค้นหาข้อมูลมากกว่า โดยปกติคนหนึ่งเสียสละเพื่ออีกคนหนึ่ง รายการที่เชื่อมโยงกันอย่างสุดขั้วจะเหมาะสมที่สุดสำหรับการจัดเก็บและสามารถจัดทำเป็นสแต็กและคิว ( เวลาเชิงเส้น ) ในทางกลับกันไม่มีโครงสร้างอื่นใดที่สามารถจับคู่ความเร็วในการค้นหาของตารางแฮช ( เวลาคงที่ ) โครงสร้างของต้นไม้ตั้งอยู่ตรงกลาง ( เวลาลอการิทึม ) และมีเพียงกราฟเท่านั้นที่สามารถแสดงโครงสร้างที่ซับซ้อนที่สุดของธรรมชาติได้นั่นคือสมองของมนุษย์ ( เวลาพหุนาม ) มีชุดทักษะในการแยกแยะว่าเมื่อใดและชัดเจนว่าเหตุใดจึงเป็นจุดเด่นของวิศวกรร็อคสตาร์

ตัวอย่างของโครงสร้างข้อมูลเหล่านี้สามารถพบได้ทุกที่ จากฐานข้อมูลไปยังเซิร์ฟเวอร์ไปยังไคลเอนต์และแม้แต่ JavaScript engine เองโครงสร้างข้อมูลเหล่านี้จะสรุปสิ่งที่เป็นหลักเพียงแค่เปิดและปิด "สวิตช์" บนชิปซิลิคอนให้กลายเป็น "วัตถุ" ที่เหมือนจริง แม้ว่าจะมีเพียงดิจิทัล แต่ผลกระทบเหล่านี้ก็มีต่อสังคมอย่างมาก ความสามารถของคุณในการอ่านบทความนี้อย่างอิสระและปลอดภัยแสดงถึงสถาปัตยกรรมที่ยอดเยี่ยมของอินเทอร์เน็ตและโครงสร้างของข้อมูล แต่นี่เป็นเพียงจุดเริ่มต้นเท่านั้น ปัญญาประดิษฐ์และบล็อกเชนแบบกระจายอำนาจในทศวรรษต่อ ๆ ไปจะกำหนดความหมายของการเป็นมนุษย์และบทบาทของสถาบันที่ควบคุมชีวิตของเรา ข้อมูลเชิงลึกที่มีอยู่และการแยกตัวออกจากสถาบันจะเป็นลักษณะของอินเทอร์เน็ตที่เติบโตเต็มที่ในที่สุด

เพื่อช่วยเปลี่ยนเราไปสู่อนาคตที่เท่าเทียมกันมากขึ้นนี้เราที่HeartBank® channel เครือข่ายของเซลล์ประสาทเทียมเพื่อเพิ่มพลังKiitosของเราในการออกเงินในบล็อกเชนควบคู่ไปกับความสามารถในการเอาใจใส่ต่อสภาพของมนุษย์ จากที่ไม่ระบุชื่อ ขอบคุณเราให้และรับโดยการเขียนKiitos , Kiitosเรียนรู้เกี่ยวกับเราน้ำใจของพวกเขาและผลกระทบให้รางวัลกับเราในลักษณะที่จะช่วยลดความไม่เท่าเทียมทางเศรษฐกิจระหว่างเราในกระบวนการที่ค่อยๆและลึกลับที่เก็บรักษาเสรีภาพส่วนบุคคลของเราและเสรีภาพ บางทีโครงสร้างกราฟที่ดีที่สุดในธรรมชาติอาจไม่ใช่สมองของมนุษย์ แต่เป็นมนุษย์❤️หากเพียงเราสามารถมองเห็นสายใยแห่งหัวใจที่เชื่อมโยงเราทุกคน

สนใจblockchainไหม เรียนรู้ Ethereumแล้วมาหาเราสิ!

แบบจำลองทางจิตที่สมบูรณ์สำหรับการพัฒนา Ethereum dApp