Tag: data-structures

4 รายการ

Blog

งูต้นฉบับจัดเมล็ดถั่วหลายสีลงถาดนับจำนวนที่มีช่องบวกและลบ
pythoncollectionscounter

Python Counter.total: นับยอดรวม multiset โดยไม่เขียน sum(values) ซ้ำ

ใช้ Counter.total ร่วมกับการบวกและลบ multiset พร้อมทำความเข้าใจ count ศูนย์กับค่าติดลบ

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

Zig 0.16 บทที่ 3: struct, enum, union และคอนเทนเนอร์ที่เปลี่ยนไปทั้งหมด

ประกอบข้อมูลเป็นก้อนใหญ่ใน Zig 0.16 — struct กับ decl literal, enum ที่ switch ครบทุกกรณีหรือคอมไพล์ไม่ผ่าน, tagged union แทน inheritance, การจัดวางหน่วยความจำที่คอมไพเลอร์เรียงให้เอง และ ArrayList/HashMap/MultiArrayList แบบ 0.16 ที่ใช้ไม่เหมือนเดิม

พี่โชว์
ภาพวาดโทนมิ้นต์สว่าง อิกัวนาตัวเล็กหยิบของจากรางยาวที่เรียงเป็นแถวเดียวต่อเนื่อง ขณะที่อีกฝั่งของโต๊ะมีของวางกระจายห่างกันพร้อมเส้นด้ายสีอำพันโยงไปมาระหว่างชิ้น
zigperformanceoptimization

Zig Optimization #4: pointer chasing ช้ากว่า array 247 เท่า แต่ SoA ชนะแค่ 9%

วัดการจัดวางข้อมูลบน 2 ล้านแถว — struct-of-arrays ชนะน้อยกว่าที่คนเล่ากันเยอะ, การเปลี่ยน usize เป็น u32 ไม่ได้ช่วยเลยแม้แต่นิดเดียว แต่การเดิน linked list ที่ node กระจัดกระจายช้ากว่า array 247 เท่า

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

Zig Optimization #3: เลิก copy ข้อความ และใช้ hash map ให้ถูกวิธี

วัดจริงบนงานนับความถี่ 200,000 ครั้ง — การสร้างข้อความใหม่ทุกรอบช้ากว่า interning 4 เท่า, contains+get+put ช้ากว่า getOrPut เกือบ 3 เท่า และการแปลง key เป็น u32 handle เร็วกว่าทุกวิธี 40 เท่า พร้อมผลตามความยาว key ที่ 16, 64 และ 256 ไบต์

พี่โชว์