Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python
Python
  1. โปรแกรมหาจำนวนการแทรก Parentheses น้อยที่สุดเพื่อให้สมดุลด้วย Python

    Parentheses string สมดุลถ้า: ( ต้องมี )) ติดกัน 2 ตัวตรงข้าม และ ( ต้องอยู่ก่อน )) นับจำนวน parentheses ต้องแทรกเพื่อให้สมดุล ใช้ตัวนับ o (pending () และ ret (insertions) scan ซ้าย-ขวา จัดการกรณี ) เดี่ยวและ )) คู่ อัลกอริทึม o = 0 (pending open), ret = 0, i = 0 while i < n: ถ้า s[i] == (: o

  2. โปรแกรมหาจำนวน Subarray ไม่ทับซ้อนที่ผลรวมเท่ากับ Target ด้วย Python

    เจอ subarray เพิ่ม ans, reset set ใหม่เก็บแค่ prefix ปัจจุบัน (ป้องกัน overlap) มิฉะนั้นเพิ่ม prefix ลง set ขั้นตอนการทำงาน t = set([0]), temp = 0, ans = 0 วนลูปแต่ละ i ใน nums: temp += i prev = temp - target ถ้า prev ใน t: ans++, t = set([temp]) มิฉะนั้น: t.add(temp) คืน ans ตัวอย่า

  3. โปรแกรมหาจำนวน Operation น้อยที่สุดทำให้ Array ทุกค่าเท่ากันด้วย Python

    Array arr[i] = 2*i+1 (คี่ติดกัน) Operation: เลือก x,y ลบ 1 จาก arr[x] บวก 1 ให้ arr[y] หา operations น้อยที่สุดทำให้ทุกค่าเท่ากัน คำตอบ: ผลรวมความต่างจากค่ากลาง (median) สำหรับ n คู่: sum_{i=0}^{n/2-1} (n - (2*i+1)) อัลกอริทึม ถ้า n == 1: คืน 0 q = n//2 - 1, j = 1, ans = 0 = 0: ans += n - j;

  4. โปรแกรมหาชุดโหนดน้อยที่สุดเพื่อถึงทุกโหนดใน DAG ด้วย Python

    ใน Directed Acyclic Graph (DAG) หาโหนดที่ไม่มี incoming edges (in-degree = 0) เพราะโหนดเหล่านี้ไม่สามารถเข้าถึงได้จากโหนดอื่น ต้องเริ่มจากโหนดเหล่านี้จึงจะถึงทุกโหนด ใช้ set difference: all_nodes - nodes_with_incoming_edges ขั้นตอนการทำงาน all_nodes = set(0..n-1) v = set() เก็บโหนดที่มี incomi

  5. โปรแกรมหาจำนวนครั้งเรียกฟังก์ชันน้อยที่สุดเพื่อสร้าง Target Array ด้วย Python

    ฟังก์ชัน modify(arr, op, index): op=0 เพิ่ม arr[index] 1, op=1 คูณทุก元素 2 หาจำนวน operation น้อยที่สุดสร้าง target array จาก zero array วิธี: นับจำนวน bit 1 ใน binary representation (op=0) และจำนวน bit สูงสุด (op=1) รวมกัน อัลกอริทึม ans = [0, 0] # [increment_ops, max_double_ops] สำหรับแต่ละ n

  6. โปรแกรมหาจำนวนเหรียญสูงสุดที่ผู้เล่น 1 ได้ในเกม 3 กอง ด้วย Python

    เกม 3 คน: เลือก 3 กอง P2 เลือกมากสุด P1 เลือกอันดับ 2 P3 เลือกน้อยสุด กลยุทธ์ optimal: เรียง piles จากน้อยไปมาก P1 ควรหยิบอันดับ 2 จากท้าย (index -2) ทุกครั้ง ลบ 3 กองทีละรอบ (มากสุด, อันดับ 2, น้อยสุด) รวมค่าที่ P1 หยิบ ขั้นตอนการทำงาน เรียง piles จากน้อยไปมาก วนลูปจน piles ว่าง: เพิ่ม piles[

  7. โปรแกรมหา Step ล่าสุดที่มีกลุ่ม 1s ขนาด M ใน Binary String ด้วย Python

    โจทย์: มี permutation arr[1..n] เริ่มจาก binary string ทั้ง 0 ทุก step i เซต bit arr[i] = 1 หา step ล่าสุดที่มีกลุ่ม 1s ติดกันขนาดพอดี m ใช้ array l, r ติดตามความยาวกลุ่ม 1s ทางซ้าย/ขวาของแต่ละ index อัปเดตแบบ union-find อัลกอริทึม l[i], r[i] = ความยาวกลุ่ม 1s ติดต่อทางซ้าย/ขวาของ index i num

  8. โปรแกรมหาโหนดทางขวาในระดับเดียวกันของ Binary Tree ด้วย Python

    หาโหนดที่อยู่ทางขวา (right neighbor) ในระดับเดียวกันของโหนด u ใน binary tree ใช้ BFS ระดับต่อระดับ (level order) เก็บโหนดแต่ละระดับใน list ตรวจสอบ index ของ u แล้วคืนโหนดถัดไป ถ้าอยู่ปลายสุดคืน None ขั้นตอนการทำงาน BFS ด้วย deque เก็บโหนดแต่ละระดับใน temp list ระหว่างวนลูประดับ ถ้าเจอ u บันทึก

  9. โปรแกรมตรวจสอบ Equivalence ของ Expression Tree 2 ตัวด้วย Python

    Expression tree 2 ตัวเทียบเท่ากันถ้าผลลัพธ์เท่ากัน สำหรับ operator แบบ commutative (+, *) สามารถนับความถี่ของ operand (leaf nodes) ได้: ถ้าทั้งสอง tree มี leaf nodes เหมือนกัน (นับรวมความถี่) ถือว่าเทียบเท่า ใช้ DFS นับ leaf values ใน dictionary แล้วเปรียบเทียบ dict ขั้นตอนการทำงาน DFS ทั้งสอง t

  10. โปรแกรมสร้างและประเมิน Expression Tree จาก Postorder Traversal ด้วย Python

    สร้าง expression tree จาก postfix expression: ใช้ stack เก็บ (node, side) โดย side=LEFT/RIGHT บอกว่าจะ attach เป็น left หรือ right child ของ parent บน stack ตัวเลขเป็น leaf, operator เป็น internal node ต้องการ 2 children ประเมินค่าด้วย recursion ตาม operator ขั้นตอนการสร้างต้นไม้ pop ตัวสุดท้ายจ

  11. โปรแกรมบวกพหุนาม (Polynomials) ที่เก็บใน Linked List ด้วย Python

    พหุนามเก็บใน linked list โหนดแต่ละตัวมี coefficient, power, next บวก 2 พหุนามโดย merge แบบ merge sort: เปรียบเทียบ power ใส่ power มากกว่าก่อน ถ้า power เท่ากัน บวก coefficient ถ้าผลรวมไม่เป็น 0 สร้างโหนดใหม่ ขั้นตอนการทำงาน สร้าง dummy node และ node pointer วนลูป poly1 และ poly2 ยังไม่หมด

  12. โปรแกรมหา Lowest Common Ancestor ใน Binary Tree ด้วย Python

    โหนดนี้คือ LCA มิฉะนั้นคืนค่าที่ไม่ใช่ None อัลกอริทึม DFS function dfs(node) คืนค่าโหนดที่เจอเป้าหมายหรือ LCA ถ้า node เป็น x หรือ y: ตรวจสอบ left/right ถ้ามีเจออีกตัวคืน node (LCA) Recursive left, right ถ้า left และ right ทั้งคู่ไม่ใช่ None: node คือ LCA คืน left หรือ right (ตัวที่ไม่ใ

  13. โปรแกรมหา LCA ของ Binary Tree ใช้ Parent Pointer ด้วย Python

    เมื่อ TreeNode มี parent pointer หา LCA ของ 2 โหนดได้ง่ายโดย: สร้าง path จากโหนดแรกขึ้นไป root เก็บใน list แล้วเดินจากโหนดที่สองขึ้นไป root ตรวจสอบว่าอยู่ใน path แรกหรือไม่ โหนดแรกที่เจอคือ LCA ขั้นตอนการทำงาน สร้าง path_p_r list จากโหนด x ขึ้นไป root ผ่าน parent เดินจากโหนด y ขึ้นไป root ตรวจ

  14. โปรแกรมแก้ไข Binary Tree ที่มีข้อผิดพลาด Pointer ด้วย Python

    โจทย์: Binary tree มีข้อผิดพลาดที่ right child ของโหนดหนึ่งชี้ไปยังโหนดอื่นในระดับเดียวกัน (same level) ต้องหาข้อผิดพลาดนี้และลบโหนดที่ผิดรวมลูกหลาน ยกเว้นโหนดที่ถูกชี้ผิด ใช้ BFS พร้อมติดตาม parent และ visited set อัลกอริทึม BFS จาก root เก็บ parent map: p[child] = (parent, is_left) ใช้ visit

  15. โปรแกรมเปลี่ยน Root ของ Binary Tree ให้เป็น Leaf Node ด้วย Python

    โจทย์: กำหนด leaf node ให้กลายเป็น root ใหม่ โดยกฎ: left child กลายเป็น right child, parent กลายเป็น left child (และ parent เก่าตัด link ไปยัง node นั้น) ใช้ recursion ย้อนกลับจาก leaf ไป root เดิม อัลกอริทึม ฟังก์ชัน helper(node, new_parent) รับโหนดปัจจุบันและ parent ใหม่ ถ้า node เป็น root เ

  16. โปรแกรมหา Lowest Common Ancestor ของโหนดหลายตัวใน Binary Tree ด้วย Python

    หา LCA (Lowest Common Ancestor) ของชุดโหนดใน binary tree โดยใช้ DFS แบบ recursive: ถ้าโหนดปัจจุบันอยู่ในชุดเป้าหมาย คืนค่าโหนดนั้น ถ้าทั้งซ้ายและขวาคืนค่าไม่ใช่ None คืนค่าโหนดปัจจุบัน (เป็น LCA) มิฉะนั้นคืนค่าที่ไม่ใช่ None ระหว่างซ้าย/ขวา ขั้นตอนการทำงาน สร้างคลาส TreeNode พร้อม parent pointer

  17. โปรแกรมหาความยาว subsequence แพลินโดรมคู่ที่ยาวที่สุดด้วย Python

    โจทย์: หา subsequence แพลินโดรม (palindromic subsequence) ที่มีความยาวเป็นเลขคู่ และไม่มีตัวอักษรซ้ำติดกันยกเว้นตรงกลาง ใช้ Dynamic Programming เก็บคู่ (ความยาว, ตัวอักษรสุดท้าย) ในตาราง 2 มิติ อัลกอริทึม สร้างตาราง dp[n][n] เก็บ tuple (length, last_char) เริ่มต้น (0, ) วน i จาก n-1 ถึง 0, j จ

  18. การพลอตกราฟเส้นหลายเส้นด้วย Pandas และ Matplotlib

    ใช้ df.pivot() จัดรูป DataFrame ให้ index เป็น x, columns เป็นชื่อสมการ, values เป็น y แล้วเรียก df.plot() จะพลอตทุกคอลัมน์เป็นเส้นแยกกันอัตโนมัติ ขั้นตอนการทำงาน ตั้งค่าขนาดรูปและเลย์เอาต์ สร้าง DataFrame คอลัมน์ equation, x, y Pivot table: df.pivot(index=x, columns=equation, values=y) พล

  19. การพลอตจำนวน مختلط (Complex Numbers) แผนภาพ Argand ใน Matplotlib

    จำนวน مختلط a + bj มีส่วนจริง (real) และจินตภาพ (imag) ใช้ data.real และ data.imag เป็นพิกัด x, y ใน ax.scatter() สร้าง Argand diagram ได้ง่าย ขั้นตอนการทำงาน ตั้งค่าขนาดรูปและเลย์เอาต์ สร้างข้อมูล complex แบบสุ่ม: np.random.rand(10) + 1j*np.random.rand(10) สร้าง figure และ axes พลอต scatt

Total 9001 -คอมพิวเตอร์  FirstPage PreviousPage NextPage LastPage CurrentPage:287/451  20-คอมพิวเตอร์/Page Goto:1 281 282 283 284 285 286 287 288 289 290 291 292 293