--- title: โครงสร้างข้อมูลและอัลกอริทึม 26/07/2565 subtitle: date: วันอังคารที่ 26 กรกฎาคม 2565 เวลา 13.00 น. --- (ข้อความสดจากระบบถอดความเสียงพูดทางไกล) การเพิ่มโหนดใหม่นะคะ เข้าไปที่ลิงก์ลิสต์ ได้ยินไหม ล่ามได้ยินไหมเอ่ยร้อนนะโอเค ได้นะคะ ฮัลโหลค่ะ พี่ล่ามได้ยินไหมคะ พี่ล่ามคะ ได้ยินไหมคะ ยิ้มใส่ใครค่ะ วันนี้นะคเดี๋ยวจะมาต่อในเรื่องของลิงก์ลิสต์นะคะ คราวที่แล้วเราเพิ่มถูกไหมคะ เราเพิ่มโหนดใหม่ เข้าไปในลิงก์ลิสต์ เพิ่มข้างหน้า แล้วก็เพิ่มข้างหลังนะคะ วันนี้เราจะมาพูดถึงการลบบ้าง การลบก็คือการเอาโหนดออกการลบ ก็คือการที่เราดึงโหนดออก ทำยังไงไม่ให้มันปรากฎอยู่ใน ของเรานะคะ เราก็ต้องสร้างเส้นเชื่อมใหม่นะ เราต้องลากเส้นเชื่อมใหม่นะคะ เราสามารถลบได้ข้างหน้า ตรงกลาง และข้างหลังเหมือนกันคราวนี้ ครูมีลิงก์ลิสต์นะคะ อันนี้คือลิงก์ลิสต์นะคะ จากภาพนี่คือลิงก์ลิสต์ ลิงก์ลิสต์ที่เราเห็นที่หน้าจอ มีทั้งหมดกี่โหนด โหนด คือ สี่เหลี่ยมถูกไหม มีทั้งหมด 3 node ด้วยกันโหนดที่ 2 และโหนดที่ 3 นะคะ รู้ได้อย่างไรว่าอันไหนคือต้นลิสต์หรือด้านหน้าของลิสต์ รู้ได้อย่างไรคะ รู้ได้อย่างไรว่าอันไหนเป็นอันโหนดแรก 3, 7 หรือ 10ก็คือโหนดนี้ใช่ไหมคะ รู้ได้อย่างไรก็เพราะว่ามี hedaชี้อยู่ เราก็เลยรู้ว่าโหนดที่มีข้อมูลหมายเลข 3 คือ โหนดที่อยู่ต้นลิสต์หรืออยู่หัวแถวนะคะ ถัดมาถ้าตัวนี้นะคะ ครูถามต่อว่าสมมติครูเข้าถึงข้อมูลแบบนี้ head.data จะตอบเท่ากับเท่าไหร่ head.data จะเท่ากับ 3 ทันไหมคะ head ก็คือตัวชี้นะคะ head ก็คือตัวชี้มันชี้อยู่ที่ไหน ชี้อยู่ที่นี่ .data .data ก็คือข้อมูล .data .data ก็คือข้อมูล ถ้าพูดถึง .data แล้วข้อมูลชี้อยู่นี่ เก็บข้อมูลอะไร ก็คือ 3 นะคะ ถ้าครูต้องการลบโหนด 3 นี้ทิ้งไป ครูต้องทำอย่างไร ครูก็แค่ย้าย head head ใช่ไหมคะ มาที่โหนดถัดไป เพราะ head ชี้ที่ไหนตัวนั้นคือหัวแถว หรือต้นลิสต์ เพราะฉะนั้น ถ้าเราต้องการลบโหนดที่มันอยู่ด้านหน้าสุดเราจะทำอย่างไร เราจะเขียนสั่งให้เอา head ชี้โหนด 7 เราจะใช้คำสั่งอะไร ตอนนี้โหนด 7 คือเส้นนี้ชี้อยู่ คือ เส้นนี้ที่มันเชื่อมอยู่ด้านหลังชี้อยู่ เส้นนี้มันออกมาจากโหนดไหน ซึ่งมี head ชี้อยู่ เส้นนี้ก็เลย head.next เราจะย้าย head ก็ใช้คำสั่ง head ไปชี้ที่ head.next head.next ชี้อยู่ตรงไหน .next คือ ช่องนี้ช่องที่ 2 ตรงนี้ มันชี้มาที่ไหน ชี้มาที่ 7 นะคะ เพราะฉะนั้น head จะย้ายมาอยู่ที่ 7 นะ จะชี้อยู่ที่ 7 นะคะ โอเคนะคะ คราวนี้ลบข้างหน้า ได้แล้วต่อไปมาลบตรงกลางนะคะ มาลบตรงกลางบ้างลบตรงกลางคือลบอะไร ลบโหนด 7 ตรงนี้นะคะ มาลบโหนด 7 จะอยู่ระหว่าง 3 กับ 10 เราจะลบตัวนี้ทิ้งไป เราจะทำอย่างไร อันดับแรกต้องวาดรูปถูกไหมคะ จะได้รู้ว่าจาก 3 นี่ ต้องเชื่อมมาที่ 10 ใช่ไหมคะ จาก 3 เราจะเชื่อมมาเป็น 10 แล้วเส้นนี้ เราต้องเขียนคำสั่งอะไรสังเกต โหนด 3 มีตัวชี้ ที่ชื่อว่า previousNode โหนด 7 มีตัวนี้ใช่ไหมคะ currentNode ครูจะลบตัวนี้ออกเส้นนี้ ออกมาจากโหนด 3 ถูกหรือเปล่า โหนด 3 มันมีอะไรชี้อยู่ pree.next ชี้มาที่ไหน ชี้มาที่ 10 แล้ว 10 อะไรชี้อยู่ เส้นนี้ก็คือ .next ชี้อยู่ ได้ไหมคะ ใช่ไหมคะ มาดูใหม่นะ เส้นนี้ นะคะ เราดูพร้อมกัน เส้นนี้เราต้องการเขียนคำสั่งเส้นสีแดงที่ครูนะคะ เส้นนี้มันออกจากไหน ออกมาจากตัวนี้ชี้อยู่ ก็เป็น previousNode. ออกมาจากช่องนี้ ช่องที่ 3 ของโหนดจะมีชื่อว่า next นะคะ เป็น previousNode.next คือมันออกมาจุด จุดนี้ ใช่ไหมคะ แล้วตอนนี้ 10 มีอะไรชี้อยู่ มีแค่เส้นเส้นนี้ชี้อยู่ใช่ไหมคะ เส้นนี้มาจากไหน ออกมาจากจุดนี้ ก็คือ currentNode ออกมาจากช่องที่ชื่อว่า Next นะคะ มันก็เลยเป็น previousNode.next เท่ากับ currentNode.next เดี๋ยวดูอีกตัวหนึ่ง ลบท้ายสุดสุดท้าย ลบท้ายสุดสุดท้าย โหนดสุดท้ายเลยลบโหนดสุดท้ายที่มี p ชี้อยู่ ทำอย่างไร ก็ให้ p=None ตัวนี้ก็จะหายไป p=null ทุกคนเอาชีตเก่ามาไหม หยิบชีตเก่ามาสิคะชีตคราวที่แล้ว เรายังเหลือข้อ 4 นะ ที่ยังทำไม่เสร็จ เรายังเหลือข้อ 4 นะคะ ในข้อ 4 ครูต้องการลบโหนด 20 ซึ่งอยู่ตรงกลางพอดีเลย อยู่ตรงกลางพอดีเลย ซึ่งอยู่ตรงพอดีเลย เหมือนกับโจทย์ข้อนี้เลย เราจะเขียนคำสั่งแบบไหนเขียนให้ครูดูหน่อยข้อ 4 ครูจะลบโหนดตรงกลางเหมือนกันนะ โหนดล่างนี่ ด้านซ้ายมีอะไรชี้อยู่ตัวที่ลบมีอะไรชี้อยู่ มีอะไรชี้อยู่ ลองดูสิคะ ได้ไหม แป๊บหนึ่งนะ ดู ๆ เดี๋ยวนะคะ คราวนี้ดูเรามีโหนด 3 โหนดใช่ไหมคะ ที่ครูให้ในชีตนะ ข้อ 4 โหนดแรกเก็บข้อมูล 13 โหนดที่เก็บข้อมูล 20 แล้วโหนดสุดท้ายเก็บข้อมูล 33 head ชี้อยู่ รู้เลย 13 คือ โหนดที่ 1 นะคะ ตามมาด้วย 20 แล้วก็ 33 ดูจากไหน นี่ไง มันมีตัวชี้ ชี้ไปตัวถัดไป ครูต้องการลบโหนดที่เธอชี้อยู่ ลบโหนดที่ชี้อยู่ ก็คือลบโหนด 20 ครูต้องการลบโหนดนี้ ครูอยากลบโหนด 20 ทิ้งไป อันดับแรกสุดเลยต้องวาดเส้นก่อน ถูกไหมมันจะเชื่อมแบบไหนล่ะ เราก็ลองวาดนะคะ เส้นนี้ ครูจะวาดสีชมพู สุดท้ายต้องต่อด้วย 33 โหนดนี้จะหายไปเพราะครูต้องการลบโหนด 20 นะคะ ครู... 3 ครูจะเขียนคำสั่งแบบไหนอันดับแรก ดูพร้อมกันจุดเริ่มต้นตรงนี้ จุดตรงนี้มันออกมาจากโหนด 13 ใช่ไหมคะ แล้วโหนด 13 มีอะไรชี้อยู่ มี previous ถูกไหมคะ ถูกไหมคะ prve มันออกมาจากช่องนี้ใช่ไหมคะ ช่องที่ 2 ของโหนด ซึ่งช่องนี้มีชื่อเรียกว่า "next" ก็จะเป็น previous.next เท่ากับมันชี้ไปที่ไหน มันชี้ไปที่ 33 ใช่ไหมคะ มันชี้ไปที่ 33 แล้ว 33 มีอะไรชี้อยู่มันไม่มีเส้นข้างนอกชี้ มันมีแค่เส้นนี้เส้นเดียวถูกไหมคะ มีลูกศรนี้ชี้มาอยู่อัน แล้วเส้นนี้คำสั่งคืออะไร เราก็ดูต่อ มันออกมาจากโหนดนี้ใช่ไหมคะ โหนด 20 โหนด 20 มีอะไรชี้อยู่ มี currentNode ชี้อยู่ ตามด้วย มันออกมาจากช่องซื่อว่า next ก็จะได้เป็น previous.next เท่ากับ curren.next อันนี้เสร็จหรือยังคะ gl เสร็จหมดหรือยัง ข้างหลังเสร็จหมดหรือยังคะ บนกระดาน ลอกตามครูเสร็จแล้ว คราวนี้ย้อนกลับมาดู ลิงก์ลิสต์ที่เราเรียนมาเมื่อสัปดาห์ที่แล้ว แล้ววันนี้เรียนเพิ่มเรื่องของการลบ ลองเริ่มต้นนะ เอาแบบง่าย ๆ ก่อนนะคะ เราลองทวนนะคราวที่แล้วนะ คำถามที่ 1 ครูมีโจทย์ให้นะคะ ครูมีลิงก์ลิสต์มา แล้วก็มีตัวชี้ให้เรียบร้อยแล้ว ข้อแรกครูถามว่าลิงก์ลิสต์ ที่ครูกำหนดให้มีกี่โหนด ตอบพร้อมกันได้ไหมคะ ลิงก์ลิสต์ที่ครูกำหนดให้ด้านบนมีกี่โหนดมีกี่สี่เหลี่ยม 4 ใช่ไหม มีอยู่ 4 โหนด แล้วโหนดข้อมูลอะไรเป็นโหนดแรก 5 ใช่ไหมโหนดแรกเก็บข้อมูลอะไรคะ รู้ได้อย่างไร head ดูที่ head ตอบที่นะคะ ตอบว่า 5 ใช่ไหม ถัดมาเราจะเข้าถึงข้อมูลที่อยู่ในลิงก์ลิสต์ เราใช้คำสั่งเหล่านี้นะคะ นี่มีอยู่ 5 ข้อ ยังจำได้ไหมว่าคราวที่แล้วเราเคยทำ head.data ตอบอะไร นะ ถ้าลงท้ายด้วย data เอาสิ่งที่อยู่ในช่องมาตอบ ถ้าครูลงท้ายด้วย next หาตัวชี้มาตอบ ช่วยครูทำหน่อย 7 ข้อตอนนี้ เป็นการทบทวนนะคะ ลองดูสิ เราเรียนสัปดาห์ที่แล้วมาถึงสัปดาห์นี้เรายังจำได้อยู่ไหม คราวนี้ดูวิธีการสังเกตนะ เวลาเราเขียนคำสั่งน่ะค่ะ แล้วเราต้องการเอาคำตอบนำมาใส่ จะเห็นว่าตัวสุดท้ายที่ครูเขียนถูกไหมคะ ก่อนเครื่องหมายเท่ากับนี่ เป็นได้ 2 ค่ามีอะไร มี data กับ next ถูกไหมนะคะ ไม่มีตัวอื่นเลย อันแรกก็ deta อันที่ 3 ก็ deta แล้วก็ next นะคะ มันเป็นได้ 2 ค่าก็คือ next กับ data เขียนได้ 2 แบบนะคะ แล้วจะเอาอะไรมาใส่ ก็คือเอาอะไรมาตอบ ถ้าลงท้ายด้วย data ให้เอาข้อมูลที่อยู่ในโหนด หรือในช่องสี่เหลี่ยมนี่มาตอบ ถ้าลงท้ายด้วย next ให้เอาตัวชี้มาตอบถูกไหมคะ เราชี้อยู่ที่โหนดไหนก็ดูว่าโหนดไหนก็เอาตัวชี้นั่นล่ะมาตอบนะคะ มาดูพร้อมกัน ข้อแรก เดี๋ยวครูเขียนให้ก่อนนะ ลิงก์ลิสต์อย่างที่เราตอบอยู่แล้ว มีอยู่ 4 โหนดนะคะ โหนดอะไรเป็นโหนดแรก ก็คือโหนดเท่าไหร่คะ โหนด 5 head.data แสดงว่าต้องเอาข้อมูลมาใส่ใช่ไหมคะ head คือตัวชี้นี่ head ชี้อยู่ที่ไหน ชี้อยู่ที่ตัวแรก .data คือเอาอะไรมาใส่คะ 5 ใช่ไหม ก็คือ .data ถัดมา head.next. .next .data head ชี้อยู่ที่นี่ใช่ไหมคะ .next เขยิบมาถูกไหม head.next แสดงว่ามันเดินไป 1 ช่อง next ช่องถัดไปแล้ว .data ที่ครูชี้อยู่นี่ มีข้อมูลอะไร 10 ใช่ไหมคะ คือ 10 ถัดมา p.next p ชี้อยู่ตรงนี้ เห็นไหมคะ ที่ครูชี้อยู่ p.next next คือ เดินไปถัดไป ครูชี้อยู่ที่ 20 แล้วคำตอบ ครูถาม next ครูถามคำตอบก็ .next แล้ว 20 มีอะไรชี้อยู่ q q ชี้อยู่นะคะ ถัดมา ข้อ 6 p.next.data ที่ครูชี้อยู่นี่ ข้อมูล คือ 20 โอเค q.next q.next ตกขอบเลย เพราะฉะนั้น ตอบอะไรคะ null q.next ไม่มีอะไรแล้ว เหมือนตกขอบเลยก็ไม่ต้องเอา null มาใส่นะคะ เช็กดูสิคะ เหมือนกับของเราไหม ได้ไหมคะ มา เราเข้าถึงข้อมูลโดยการใช้คำสั่งแล้วนะคะ ถ้าครูอยากจะเพิ่มโหนดใหม่เข้าไปนี่ อยากจะเพิ่มโหนดใหม่ อยากจะเพิ่มโหนดใหม่เข้าไปที่ท้ายลิสต์ ก็คือเอาเป็นตัวสุดท้ายนะคะ 20 แล้วต่อด้วย 30 30 ตัวนี้โหนดใหม่ที่สร้างขึ้นมาจะต่อท้าย 20 ก่อนจะเขียนคำสั่งถูกไหม วาดเส้นเสียหน่อย จะได้รู้ว่ามันต่อท้ายอย่างไรนะคะ เดี๋ยวลอกโจทย์ก่อน เดี๋ยวครูรอแป๊บหนึ่ง ให้เวลาลอกโจทย์ก่อน เสร็จหรือยังคะ ถ้าใครทำได้ ลองเขียนคำสั่งเส้นนี้สีชมพูนะคะ ให้ครูหน่อย ว่าจะสร้างเส้นนี้ขึ้นมา ต้องใช้คำสั่งอะไร ครูแก้นิดหนึ่งนะ ขออภัย ครูแก้โหนดที่สรา้งใหม่หน่อยนะ เพราะชื่อมันซ้ำกันครูลืมดู เป็นตัว t เป็นตัว T ตัว T ต้นไม้ เส้นที่เราสร้างขึ้นมาใหม่นะคะ เราจะเขียนคำสั่งให้กับเส้นนี้ เราก็ดูว่าจุดที่เราออกมานี่นะคะ โหนด 20 นี่มันมีอะไรชี้อยู่ มันมี p ชี้อยู่ใช่ไหมคะ ก็ p. ด้วย ช่องที่ชื่อว่า "next" เป็น t.next แล้วมมันชี้มาที่ไหน ชี้มาที่ 30 แล้ว 30 มีอะไรชี้อยู่ ก็คือมี t นะคะ ก็จะได้เป็น p.next = t ค่ะ ได้ไหมคะ ได้ไหมคะ เสร็จหรือยัง คราวนี้ถัดมามี 2 ข้อ ช่วยครูทำหน่อย เพิ่มโหนดใหม่ ระหว่าง 20 กับ 30 เอา 20 แล้วตามด้วย 25 แล้วก็ตามด้วย 30 นะคะ ข้อถัดมาลบโหนด 20 ก็คือลบโหนดที่อยู่ต้นลิสต์จะใช้คำสั่งอะไร เพิ่มโหนดใหม่นะคะ เราก็วาดเส้นเชื่อมเหมือนเดิมจาก 20 มา 25 จาก 25 ไป 30 ใช่ไหม ลบโหนด 20 ก็ตัดตัวนี้ทิ้ง คราวนี้นะคะ เดี๋ยวมาดูกัน ตัวแรกนะคะ เส้นที่ 1 อันนี้คือเส้นทีี่ 2 เส้นที่ 1 ครูจะเขียนคำสั่งว่าอย่างไร ครูเริ่มต้นจากตัวนี้นะคะ head ชี้อยู่ head ชี้อยู่นะคะ ครูเริ่มต้นจากตรงนี้ แล้วมันมีอะไรชี้อยู่ นะคะ ช่องนี้มีชื่อว่า next ก็คือ head.next ชี้มาที่ไหนชี้มาที่ 25 แล้ว 25 มีอะไรชี้อยู่ มี p ชี้อยู่ อันนี้คือเส้นที่ 1 นะคะ ถัดมาเส้นที่ 2 มันออจจากตรงไหน ออกจากตรงนี้ ตรงที่ครูชี้อยู่ มีอะไรชี้อยู่ p ช่องนี้มีชื่อว่า next p.next เท่ากับ ชี้ไปข้างบนนี้อะไรชี้อยู่ p ชี้อยู่ ถัดมาครูจะลบโหนด 20 ลบตัวนี้ทิ้งไปครูอยู่ตัวนี้ใช่ไหมคะ แสดงว่าเราลบโหนดแรก เราต้องทำอะไรคะ ต้องย้าย head ใช่หรือเปล่า แล้วย้าย head ไปไว้ที่ไหน มาไว้ที่ 30 แล้ว 30 มีอะไรชี้อยุ่ p ก็คือ head=p โอเค โอเค ลิงก์ลิสต์ เนื้อหาก็จะประมาณนี้นะคะ ให้เรารู้ concept ของลิงก์ลิสต์นะ ว่าเวลาเราจะเข้าถงข้อมุลเวลาจะเพิ่ม ลบนะคะ เดี๋ยวครูให้เบรก 5 นาที เดี๋ยวครูจะติวให้ทั้งหมดเลยเราจะนัดสอบกันสัปดาห์หน้านะคะ เราจะนัดสอบกันสัปดาห์หน้าจะมีสอบอะไรบ้าง ตั้งแต่เรื่องแรกเลย อัลกอริทึมคืออะไร Big-O Big O ใช่ไหมคะ การวัดประสิทธิภาพ Big-O ]bลิสต์ Dictionary และ ลิงก์ลิสต์ นะคะ 5 เรื่องครูให้เบรคก่อน 5 นาทีนะ และหลังจากนั้นเดี๋ยวครูจะทวนให้นะคะ พร้อมนะคะ เดี๋ยวเราจะมาทวนนะคะ เนื้อหาที่เราเรียนผ่านมาว่าเราเรียนเรื่องอะไรไปบ้างนะคะ สรุปสาระสำคัญ เรื่องแรกที่เราเรียน นะคะ เราพูดถึงอัลกอริทึม ยังจำได้ไหม ว่าอัลกอริทึมคืออะไร เอ่ยอัลกอริทึมนะคะ ก็คือขั้นตอนที่เราใช้ในการแก้ปัญหา ซึ่งปัญหาเดียวกันนะคะ เราอาจจะมรวิธีการแก้ไขปัญหาที่แตกต่างกัน นั่นคือขึ้นอยู่กับอัลกอริทึม หรือวิธีคิดที่เราใช้นะคะ เรามีอัลกอริทึมเพื่ออะไร เรามีโจทย์ถูกไหมคะ เราจะหาคำตอบจากโจทย์ นั้นได้อย่างไร เราต้องมีวิธีทำ ซึ่งไอ้ตัววิธีทำตัวนั้นหรือถ้าเราทำกับข้าว อัลกอริทึมก็คือการทำกับข้าว เห็นไหมว่าถ้าเราต้องการไข่เจียวสัก 1 จาน เรามีอัลกอริทึมในการทำไข่เจียวนั้นอย่างไร ก็ต้องมีตั้งแต่การเตรียมไข่ ถูกไหมคะ ตั้งกระทะตอกไข่เจียว ไข่อะไรก็ว่ากันไป นะคะ คราวนี้ครูยกตัวอย่างนะ เช่น การทำไข่ต้ม ครูก้จะมีขั้นตอน 1, 2, 3, 4, 5 เริ่มตั้งแต่ต้มน้ำ ต้มน้ำให้เดือด ใส่ไข่ลงไปรอ 10 นาทีดับไฟ แล้วก็ปลอกไข่ เอาไข่ขึ้นมาแล้วก็ปลอกไข่ เอาไข่ขึ้นมาแล้วก็ปลอกไข่ เพื่อให้ได้ไข่ต้ม เราจะข้ามขั้นตอนไม่ได้ใช่ไหมคะ เราต้องทำตามขั้นตอนนี้ เพื่อให้ได้ผลลัพธ์ตามที่เราต้องการนะคะ คราวนี้เรามีอัลกอริทึมนะคะ เช่น อีกอย่างหนึ่ง แม่ให้เงินไป 100 บาท ให้ไปซื้อหมูปิ้งถูกไหมคะ ที่เขาขายเป็นชุดน่ะ สมมติชุดละ 20 บาท เราจะไปซื้ออย่างไร ถูกไหมคะ เราก็เดินไปซื้อ สั่งถูกไหม ว่าต้องซื้อหมูปิ้งกี่ชุดนะคะ เสร็จแล้วพอเขาใส่มาให้ เราก็ต้องมีการตรวจสอบถูกไหมคะ ว่าเขาให้ถูกหรือเปล่า ใช่ไหมคะ แล้วก็ถือกลับมาให้แม่ อัลกอริทึมที่เราเขียนนะคะ สิ่งเหล่านี้จะถูกแปลงไปเป็นโปรแกรม เช่น อีกอย่างหนึ่ง ให้คำนวณการหาพื้นที่สามเหลี่ยม สูตรก็คือ 1 ส่วน 2 คูณฐาน แล้วก็คูณสูง เราต้องรู้ว่าฐานคืออะไร สูงคืออะไร และเอามาคำนวณโดยการใส่สูตรเพื่อหาพื้นที่ พอเราได้วิธีคิดแบบนี้เราก็เอาไปเขียนโปรแกรมถูกไหมคะ จากขั้นตอนที่เราคิดเมื่อกี้ เราควรทำอะไรก่อน เราก็เอาไปเขียนโปรแกรมนะคะ คราวนี้พอเราเอาอัลกอริทึมของเรานี่ไปสู่การเขียนโปรแกรมนะคะ มันจะต้องมีการวัดประสิทธิภาพของอัลกอริทึมในคลาสนี้ เราวัดโดยการสนใจในเรื่องของเวลาที่ใช้ในการประมวลผล เราสนใจว่าเวลาที่ใช้ในการประมวลผลนะคะ ของอัลกอริทึมของเรา มันมีค่าเท่าไหร่นะคะ ซึ่งเราจะใช้ตัววัดที่ชื่อว่า "Big-O" นะคะ เราจะใช้ตัววัดที่ชื่อว่า "Big-O" ในการวัดประสิทธิภาพ ใช้สัญลักษณ์ คือ ตัว O ตัวใหญ่นะคะ ในการวัดประสิทธิภาพของอัลกอริทึม เราก็ต้องมาดูก่อนว่าแล้วอัลกอริทึมที่เราเขียนนะคะ ที่เขียนเป็นโปรแกรมนี่เรามีคำสั่งแบบไหน เรามีคำสั่งที่เรียงลำดับลงมา เป็นคำสั่งที่มีเงื่อนไขหรือเป็นคำสั่ง ที่ใช้ในการวนลูปหรือการทำซ้ำหลาย ๆ รอบ แต่ว่ารูปแบบนะคะ การดำเนินการแต่ละรูปแบบ มีวิธีคิดการหาค่า Big-O ที่ต่างกัน เช่น ตัวแรกการหาค่า Big-O แบบค่าคงที่หมายถึงอะไร แบบค่าคงที่เราไม่ได้ทำซ้ำนะ ค่าคงที่นะคะ เราจะคิด... เราจะวัดว่าคำสั่งแต่ละคำสั่งที่ไม่ใช่การวนลูปและไม่ใช่การตรวจสอบเงื่อนไข แต่ล่ะคำสั่งทำงานกี่ครั้ง เมื่อเรากดปุ่ม Run นะ เมื่อเราเขียนโปรแกรมเสร็จ เรากดปุ่มรันปุ๊บคำสั่งที่เราเขียนขึ้นแต่ละบรรทัดทำงานกี่ครั้ง คำสั่งแต่ละบรรทัดทำงานกี่ครั้ง จากโปรแกรมที่ครูให้ไป ครูมีโปรแกรมอยู่ 2 บรรทัดนะคะ บรรทัดแรกเป็นการกำหนดค่าเริ่มต้น บรรทัดที่ 2 เป็นการคำนวณใช่ไหมคะ บรรทัดแรกกำหนดค่าเริ่มต้น บรรทัดที่ 2 เป็นการคำนวณ เวลาเรากดปุ่มรันปุ๊บ เขียนโปรแกรมเสร็จ บรรทัดที่ 1 จะเริ่มทำงานที่บรรทัดที่ 1 ก่อนทำเสร็จจะเลื่อนมาเป็นบรรทัดที่ 2 มันมียู่ 2 คำสั่งใช่ไหมคะ เสร็จแล้วมันก็จบการทำงาน เพราะฉะนั้น คำสั่งแต่ละตัว จะทำงานเพียง 1 ครั้งเท่านั้นนะคะ จากนั้นมาหาค่าฟังก์ชัน เพื่อจะเอามาคำนวณค่า Big-O เรารู้ว่าแต่ละบรรทัดทำงาน 1 ครั้ง เราก็เอาตัวเลข 1 ในแต่ละบรรทัดมาบวกกัน จะเป็น 2 นะคะ ไม่มีการทำงานวนซ้ำถูกไหม เพราะฉะนั้น เราจะบอกได้ว่า ถ้าคำสั่งที่เราเขียนขึ้นเป็นคำสั่งที่ทำงานเรียงลำดับลงมาเรื่อย ๆ ทำงานเพียงบรรทัดละ 1 ครั้ง Big-O จะตอบว่า O1 O1 ถึงแม้ว่าตรงนี้จะบวกกันกี่ครั้งก็ตาม แต่มันทำงานแต่ละคำสั่งเพียง 1 ครั้งนะคะ ก็จะตอบเท่ากับ O1 ถัดมา กรณีที่เป็นการตรวจสอบเงื่อนไข กรณีที่เป็นการตรวจสอบเงื่อนไข การตรวจสอบเงื่อนไขนะคะ เราใช้คำสั่ง if เราใช้คำสั่ง if เป็นการตรวจสอบเงื่อนไข ตรวจสอบเงื่อนไขหลัง if ใช่ไหมคะ ถ้าเป็นจริงถึงทำบรรทัดถัดไป ถ้าไม่ใช่ มาทำหลัง els if คือ ทางเลือกถูกไหมคะ ทำหรือไม่ทำ ตัดสินใจทำหรือไม่ทำจริงหรือเท็จ ถ้าไม่จริงทำหลัง else นะคะ สมมติครูกำหนดให้ n=2 n = 2 ครูมาตตรวจสอบ เช่น เช่นนะคะ n โอเค คราวนี้มาดูนะคะ เสียงดังไปไหมคราวนี้ดูนะคะ จากตารางตัวนี้นะคะ ครูกำหนดให้ตรง loop for เป็น length คือ 3 นะ เพราะฉะนั้น ค่าที่เป็นไปได้ของต่า i นี่มันควรจะเป็น ค่าอะไรบ้าง มันก็คือเป็นค่า 0 ค่า 1 แล้วก็ค่า 2 นะคะ ค่า i ที่เป็นไปได้นี่จะมีอยู่ 3 ค่าด้วยกัน เอามาจากไหนเอามาจากที่ครูกำหนดนั้นเอง ด้านบนน่ะ len เพราะฉะนั้น i เป็นไปได้ ก็คือมี 0, 1, 2 ใช่ไหมคะ มี 0, 1 แล้วก็ 2 คราวนี้ถัดมา ค่า i เป็น 0 คำสั่ง for ทำงานอยู่แล้วใช่ไหมคะ แล้วคำสั่ง total ก็ทำ i เป็น 1 คำสั่ง for ก็ทำถูกไหม เพราะมันเป็นช่วงตัวเลขที่กำหนดเอาไว้ คำสั่ง total ก็ทำนะคะ i เป็น 2 for ก็ทำ แล้วก็ total จำนวนครั้งทั้งหมดนะคะ คือทำ 3 ครั้ง ซึ่งเลข 3 ตัวนี้มันไปตรงกับค่าที่ n เป็นคนกำหนด ไปตรงกับค่า n ที่เรากำหนด ดังนั้น ครูกำหนด n เป็นตัวเลข... จำนวนครั้งของการทำงาน ก็จะเป็น n ครั้ง ครูกำหนด n 3 ตัวที่ทำงาน 3 ครั้ง ใช่หรือเปล่า ครูกำหนด n เป็น 5 จำนวนรอบของการทำงาน ก็คือ 5 นะคะ จากนั้นเมื่อเรารู้แล้วว่าตรงคำสั่ง for นี่ เมื่อกำหนดให้เป็น n เป็นค่าอะไรก็ตามจะทำงานเท่านั้นครั้ง เราจึงบอกได้ว่า ไม่ว่า n จะแทนด้วยเลขอะไร ก็จะทำงานเท่ากับ n ครั้ง เราก็เลยเขียนด้านบนนะคะ เขียนด้านบนตรงนี้ว่าบรรทัดนี้ทำงาน n ครั้ง แล้วบรรทัดของ total ก็ทำงาน n ครั้ง จากนั้น เรามาหาฟังก์ชัน ถูกไหมคะ แต่ละบรรทัดทำงานกี่ครั้ง ฟังก์ชันมันทำงานกี่ครั้ง ก็คือเอาแต่ละบรรทัดมาบวกกัน บรรทัดแรกทำงาน 1 ครั้งเพราะมันไม่ได้อยู่ภายใต้ loop ไม่ได้อยู่ภายใต้การทำงานแบบวนซ้ำเลย เป็น 1 + n n ก็คือบรรทัดที่ 2 ถูกไหมคะ ทำงาน n ครั้ง ตามด้วย n ตัวนี้คือบรรทัดที่ 3 บวกกัน n + n ก็ได้เป็น 2n + 1 นะคะ การหาค่า Big-O เลือก n ที่มากที่สุด แล้วตัดสัมประสิทธิ์ออก ก็จะได้On คราวนี้ลองดูนะคะ อันนี้คือบรรทัดที่ 1 นะ บรรทัดที่ 2 บรรทัดที่ 3 สมมติครูมีโปรแกรมมาให้อยู่ 3 บรรทัด บรรทัดแรกเป็นการกำหนดค่าเริ่มต้นให้กับ x นะคะ บรรทัดที่ 2 เป็นการทำงานแบบวนซ้ำนะคะ โดยกำหนดให้ for i in range แล้วก็มีค่า n ถ้า i อยู่ภายใต้เงื่อนไขตัวนี้ ก็จะมาทำงานคำสั่ง print นะคะ ครูกำหนดให้ n=5 เพราะฉะนั้น range จะมีค่าเท่ากับเท่าไหร่ range 5 มีค่าเป็นอะไรคะ เริ่มต้นที่เลขอะไร เลขอะไรคะ เราควรเริ่มต้นที่เลขอะไรถ้าครูเขียน range 5 แบบนี้ ควรเริ่มต้นที่ 0 0, 1... 0, 1, 2, 3, 4 พอหรือยังคะ พอแล้ว เพราะมีกี่ตัวแล้วนี่ 1, 2, 3, 4, 5 ครบแล้ว โอเค เพราะฉะนั้น i ที่เป็นไปได้ ก็จะมีเลข จะมีค่าอะไรคะ ตามนี้เลย 0, 1 ค่า i ที่เป็นไปได้ใช่ไหมคะ ก็จะมี 0, 1, 2, 3, 4 5 นี่ไม่เกี่ยว โอเค เห็นไหมคะ ตามนี้เลยที่เราเขียนเอาไว้ข้างต้น เสร็จแล้วตัวเลขเหล่านี้ก็ต้องทำงานโดยการวน loop for ก็ติ๊กถูกให้หมดเลย print ใช่ไหมคะ ก็ต้องทำงานด้วย โอเคก็ติ๊กถูกให้หมดเลย print ใช่ไหมคะ ก็ต้องทำงานด้วย โอเค เพราะฉะนั้น ตรง... for ทำงาน 5 ครั้ง print ทำงานกี่ครั้ง1, 2, 3, 4, 5 ทำงาน 5 ครั้ง สิ่งที่เราเห็นอะไรไหม 5 ตัวนี้ตรงกันไหม ตรงกัน เพราะฉะนั้น เมื่อเราแทนด้วย n ใด ๆ จะทำงานกี่ครั้ง n ครั้งนะ ตัวเลขตัวนี้ มันเท่ากันใช่ไหมคะ เราก็เลยเอาค่า n นี่ มาใส่ เห็นไหมคะ ว่าเมื่อเป็น n แทนด้วยตัวเลขอะไรก็ตามนี่ ก็จะได้ทั้งหมด n ครั้ง ถัดมาเราจะมาหาค่าฟังก์ชัน ถูกไหมคะ เราต้องรู้ว่าแล้วแต่ละบรรทัดทำงานกี่ครั้ง บรรทัดที่ 1 นี่ ทำงานกี่ครั้งคะ มันไม่ได้อยู่ใน Loop อะไรเลย เพราะฉะนั้น มันทำงาน 1 ครั้ง อยู่ใน Loop ใด ๆ เลยก็ตาม ไม่ได้อยู่ภายใต้ loop ใดเลยก็ตามจะทำงาน 1 ครั้ง บรรทัดที่ 2 คำสั่งนี้ จะทำงาน n ครั้ง ใช่ไหมคะ ตามที่เรากำหนดข้างล่าง print ก็เหมือนกัน จะทำงาน... เห็นไหมคะ n ครั้ง เพราะฉะนั้น ค่าฟังก์ชันที่ได้ ก็คือเอา 1 บวกอะไรคะ n + อะไรอีกคะ + กี่ n 2n + 1 เพราะฉะนั้น Big-O O1 Big-O ก็คือ O1 เดี๋ยวครูเขียนให้ใหม่ Big-O จะเท่ากับ O1 นะคะ พอได้ไหมคะ โอเคนะ ครูผ่านนะคะ ถัดมา ตัวเมื่อกี้คือการวัดประสิทธิภาพใช่ไหมคะ ถัดมาก็คือ list กับ Dictionary List กับ Dictionary ต่างกันอย่างไร ดูวิธีการเขียนนะ ถ้า list จะใช้สัญลักษณ์แบบข้างบนนี้ เห็นไหมคะ อันนี้คือลิสต์ ถ้าเป็น Dictionary เป็นปีกกาเปิด ไม่ใช่ ถ้า Dictionary เป็นก้ามปู เดี๋ยวนะคะ เขาเรียกว่าอะไรล่ะ "ปีกกา" ถ้าเป็น Dictionary เป็นปีกกาเปิด ถ้าเป้นลิสต์เป็นก้ามปุ ฃคือก้ามปูนะคะ ดูสัญลักษณ์นะคะ จะต่างกันนะคะ แล้วรูปแบบของการเขียนก็ต่างกัน Dictionary จะมี ; นะคะ แต่ list ไม่มีนะคะ ในลิสต์เราเก็บฉะเพราะค่า จะมีเฉพาะ Value หรือค่าเท่านั้น ใน Dictionary จะมีคีย์ด้วยและ value นะคะ ใน Dictionary จะมีคีย์และ value นะคะ เวลาเราเอามาวาดนะคะ จาก list ข้างบนนี่เราลองเอามาวาดในช่องเก็บข้อมูลลิสต์ จะใส่เป็น value ลงไป แล้วหมายเลขช่อง คือ ค่า index หมายเลขช่อง คือ ค่า index ที่เริ่มต้นจาก 0, 1, 2 ไล่ไปเรื่อย ๆ แต่ในขณะที่ Dictionary จะมีคีย์กับ value key เอามาจากไหน ก็เอามาจากใน Dictionary นั่นล่ะ แล้วแต่ว่ามันจะเขียบนแบบไหนนะคะ เราก็เอาตัวที่อยู่ข้างหน้า ; มาใส่เป็น Key หลัง ; เป็น value มันก็จะตรงกันเห็นไหมคะ 1. คือ One 2. คือ Two 3 คือ tree อันนี้คือวิธีการสังเกต เพื่อหย่อย และวิธีการสร้างตารางเพื่อหย่อนใส่ เราจะได้เข้าใจว่า เวลาเราจะเข้าถึงข้อมูลแต่ละตัวเราต้องอ้างอิงถึงหมายเลขตัวชี้คืออะไร ตัว list นะคะ เวลาเราจะเข้าถึงข้อมูลที่เป็น list เราอ้างอิงโดยการใช้ index เราอ้างอิงถึงการใช้ Index อย่างเช่น ครูจะเข้าถึงข้อมูล Apple ชื่อ list แล้วครูก็รู้ว่าแอปเปิลมันอยู่หมายเลข Index ที่เท่าไร ครูก็ใส่ 0 ลงไปมันจะมีค่าเท่ากับ apple นะคะ ครูอยากได้ banana มี index เป็น 1 ครูก็ใส่ค่าชื่อลิสต์แล้วก็ใส่หมายเลข index ก็จะได้ค่า banana ออกมา คราวนี้ในขณะที่ Dictionary เวลาเราจะเข้าถึงข้อมูล เราใช้ Key เป็นตัวอ้างอิง เช่น ครูต้องการที่จะเข้าถึง Dictionary ที่ชื่อว่า "y" เข้าถึงคีย์ 1 คำตอบที่ได้ คือ 1 y key 3 คำตอบก็คื่อ t นะคะ โอเค ถ้าเราต้องการ หาขนาดของ list หรือของ Dictionary เราใช้คำสั่ง range มันมีข้อมูลกี่ตัว ดูที่เครื่องหมายคอมมาถูกไหมคะ 1 ตัวจะนับก็คือเครื่องหมาย , 1 ตัว 2 ตัว 3 ตัวไล่ไป จะใช้คำสั่ง len l-e-n แล้วก็ใส่ชื่อ list ลงไปนะคะ เช่น... เดี๋ยวนะ ตรงนี้ต้องได้ 5 นะคะ ไม่ใช่ 6 พอดีครูมองผิด ตัวนี้คือ 5 นะ เช่น ครูใช้คำสั่ง len x นะคะ list ที่ชื่อว่า .x นี่มีข้อมูลกี่ตัวคะ มีทั้งหมดกี่ตัว 5 ตัว ถูกไหม ใช้ len (x) คือ x มีข้อมูลกี่ตัว ก็คือมี 5 ตัวจะเข้าถึงข้อมูลแต่ละตัว ครูก็ใช้ index ถ้าจะเข้าถึงข้อมูล 2 อ้างถึง Index หมายเลข 0 ถ้าครูอยากได้ข้อมูล ออกมาทั้งหมดทีเดียวที่อยู่ใน list ครูก็ใช้คำสั่งของการวน loop ก็คือ for นะคะ for i in x ค่า i ตัวนี้ก็จะัเอาค่า 2 ออกมาแล้วก็วนลูบออกมาเป็น 4 ตัวถัดไปวนลูปเป็น 6 ไปตัวถัดไป คือ 6 วนลูปไปตัวถัดไป คือ 8 และตัวสุดท้าย คือ 10 นะคะ การเข้าถึงข้อมูลหลายค่า คราวนี้มาดูพร้อมกัน การเข้าถึงข้อมูลหลายค่า เช่น ครูมลิสต์มาให้นี่ ชื่อว่า My list นะคะ มี list ข้อมุลมาให้ มีอยู่ 9 ตัวนะ ครูใช้คำสั่ง len จะได้คำตอบคือ 9 รู้ได้อย่างไร นับว่ามีกี่ตัวนะคะ นับทีละตัวว่ามีเท่าไหร่ เช่น ครูใช้คำสั่ง len นะ ตัวที่ 1, ตัวที่ 2, ตัวที่ 3, ตัวที่ 4, 5, 6, 7, 8, 9 นะคะ มี 9 ตัว ครูต้องการเข้าถึงข้อมูลทีเดียวหลายตัว ไม่เอามาทีละค่านะคะ ครูอยากได้ทีเดียวหลายตัว จำได้ไหม เราสามารถเข้าถึงข้อมูลได้ทีละหลายคัวโดยการใช้ ; บอกว่าเอาถึงไหน ดึงข้อมูลเอามาถึงไหน ตัวแรก 2 จนถึง 5 ทำอย่างไรคะ 2 จนถึง 5 เราก็เริ่มปิดไอ้ตัวที่ไม่ใช่ 2 เราก็เริ่มดูที่ 2 จนถึง 5 เราเอาตัวสุดท้ายด้วยไหม ไม่เอา ขยับปิดมันไว้เลย ตัว 5 ก็คือตัวที่เราปิด เพราะฉะนั้น คำตอบคืออะไร คะ o-g-r หาช่วยครูหน่อยอีก 4 ตัว ลอก ลอกตัวนี้ลงสมุด แล้วก็หาคำตอบ 4 ตัวนี้นี้ให้ครูหน่อย ทำเขียนลงในสมุดสิคะ ตอบอะไรนะ คราวนี้มาดูด้วยกัน โอเค ลองดูพร้อมกับครูก่อน 1 ข้อ จะได้รู้ว่าเราจะทำแบบไหนนะคะ ข้างบนเป็นหมายเลข Index list เราคือชื่อว่า my_list ครูต้องการ Index 1 จนถึง 01 คือตัวนี้ ครูเริ่มไว้ที่ 1 จนถึง 4 คือตัวนี้ใช่ไหมคะ ครูปิดที่ 4 ใช่ไหมคะ ครูต้องปิดที่ 4 ด้วย ก็ได้คำตอบข้อแรกของครูคืออะไร ครูปิดที่ 4 ด้วย 1 จนถึง 4 จะได้ตอบเท่ากับ r-o-g r-o-g ใช่ไหมคะ ถัดมา 5 ปิดไว้ใช่ไหมคะ ถึง 7 เพราะฉะนั้น จะได้อะไรคะ เพราะได้อะไรคะ m ใช่ไหม ได้ a กับ n ถัดมานะคะ 3-5 จะได้เท่ากับ g กับ r โอเค ถัดมา 0-2 จะได้เท่ากับ 2 ตรงนี้จะได้เท่ากับ p กับ r จะได้เท่ากับ p กับ r ได้ไหมคะ ครูเพิ่มอีก 2 ข้อนะคะ ตัวนี้ตอบอะไรเอ่ย ดูต่อ 5 ถึง 8 ตรงนี้ตอบอะไรคะ 5-8 จะเป็น a, m, i ทุกคนต้องอย่าลืม ใช่ ด้วยนะคะ ต้องอย่าลืมปีกกาด้วยนะคะ ตัวสุดท้าย 4-5 ตอบเท่ากับ r โอเค ทุกคนจะได้นะ ได้ ถัดมา โอเค สมมติครูอยากจะเพิ่มข้อมูลนะคะ ในการเพิ่มข้อมูลมันจะไปต่อด้านท้ายนะ เวลาเราจะเพิ่มข้อมูลน่ะ เราจะไปต่อท้ายใช่ไหมคะ ไปต่อท้ายของเดิมที่มีอยู่ เราจะใช้คำสั่งที่ชื่อว่า "append" เราจะใช้คำสั่งที่ชื่อว่า append" เป็นการเพิ่มข้อมูลเข้าไปต่อท้ายลิสต์ขอวิธีเขียนทำอย่างไร มีชื่อ list.append แล้วก็ใส่ข้อมูลที่เราจะเพิ่มเข้าไป มันจะมีช่องที่อยู่ด้านท้ายนี่โผล่ขึ้นมา มันจะมีช่องที่อยู่ด้านท้าย เพราะเราเพิ่มเข้าไปไง มันจะมีช่องที่อยู่ด้านท้ายใช่ไหมคะ เราเพิ่มเข้าไปไง มันเลย index เพิ่มขึ้นมาอีก 1 ตัว เป็น index หมายเลข 9 แล้วใส่ s เข้าไป เพิ่มได้แล้วเอาออกล่ะ ลบ ๆ ใช้คำว่า "del" ย่อมาจาก delete Del D-e-l ลบอะไร ลบ list ช่องไหน ช่องหมายเลข 9 มันก็จะเอาตัว s ออก ตัว s ตรงนี้ก็จะหายไปนะคะ ถัดมา Dictionary อย่างที่ครูบอก Dictionary กับ list ไม่เหมือนกันนะคะ dictionary ต้องมี key กับ value แต่ list มีเฉพาะ value อย่างเดียว มีแต่ value อย่างเดียว เห็นไหมคะ ว่า Dictionary จะมี ; เห็นไหมนะคะ โอเค ถ้าเราจะเข้าถึงข้อมูล ที่อยู่ใน Dictionary เราก็อ้างอิงไปถึง key ใช่ไหมคะ แต่ถ้าเราต้องการดึงข้อมูลทั้งหมดนะคะ ทั้ง key กับ value เราก็ใช้การวนลูปและใช้คำสั่งที่ชื่อว่า "item" ตรงนี้ ใส่ชื่อ dictionary.item มันก็จะเข้าค่า key คือตัว k แล้วก็ value คือตัว k คือเสร็จแล้วก็จะ print ออกมานะคะ key v ก็คือ value ถ้าครูมี Dictionary นะคะ ที่ชื่อว่า "Score" โดยการเก็บคะแนนของนักศึกษาแต่ละคน เช่น เจมส์มี 25 โทมัส 50 Danny 79 เห็นไหมคะ เสร็จแล้วครูก็จะเอามาใส่ในช่อง ข้างบนคือ key ใช่ไหมคะ ข้างบนคือ key ข้างล่าง คือ value นนของ Thomas คะแนนของ Thomus ชื่อ Dictionary แล้วก็ใส่ key คือ tomus ตรงนี้จะตอบเท่าไหร่คะ thomas 50 คะแนน ถ้าอยากจะเปลี่ยนค่าคะแนนของ Thomas ทำอย่างไร ก็ใส่ score แล้วก็ใส่ key แล้วก็ใส่คะแนนใหม่เข้าไปเลย มันก็จะเอาฝั่งขวามาหย่อนใส่ฝั่งที่ของ Thomus ค่าคะแนนก็จะเปลี่ยนเป็น 55 โอเคนะ จะเป็นลิงก์ลิสต์ก่อนจบ ทบทวน ลิงก์ลิสต์ 1 โหนดมี 2 ช่อง คือ data กับ next ใช่ไหมคะ จำได้ไหม ตอบอันนี้ให้ครูอีกรอบหนึ่ง ก่อนเลิก เรียนมาเยอะแล้ว ก่อนจบ มาพูดถึงลิงก์ลิสต์ปิดท้ายยังตอบถูกอยู่ไหม ลองดูสิ มาดูสิคะ ว่าตอบอะไร อันแรก head.data ตอบอะไรเอ่ย 3head.next.data ก็คือ 7 t.next.next t.next.nextnext ก็เป็น none ถ้า data ค่อยเอา data มาตอบ p.data 7 p.next.data 10 ก็คือ 10 เห็นไหมคะว่า ถ้าลงท้ายด้วย data ก็เอาข้อมูลข้างในมาใส่ ถ้าลงท้ายด้วย next ต้องเอาตัวชี้ แต่บังเอิญ next มันตกขอบไปแล้ว มันก็เลยกลายเป็น none โอเค คราวนี้กลับไปทบทวนสิ่งเหล่านี้ ครู post ไว้อยู่แล้วนะคะ ให้เอากลับไปทบทวน สัปดาห์หน้าวันอังคาร 13.00 น. ตรงนะคะ เตรียมอุปกรณ์ไม้บรรทัด ปากกา มาให้เรียบร้อยนะคะ สอบนะ ครูจะสอบนะคะ เป็นแบบ open book เปิดทุกอย่าง ยกเว้นถามเพื่อนนะคะ ไม่ได้ ไม่ให้ถามเพื่อน แต่ให้เปิดชีตครูได้ เปิดแบบฝึกหัดได้นะคะ แต่ไม่ให้ถามกันเท่านั้นเองนะ ครูออกแบบนี้ีล่ะ ที่เราติวกันวันนี้นะคะ ให้บอกคอนเซปต์แต่ละเรื่องนะคะ ว่าเป็นแบบไหนโอเค แบบฝึกหัดวันนี้ อ๋อ ที่มันเป็น 2 ชุดใช่ไหมคะ ถ่ายรูปส่งมาให้ Classroom นะ แบบฝึกหัดที่เราทำกันเมื่อต้นชั่วโมงนะคะ เดี๋ยวครูจะเปิด Classroom ให้ นะคะ แล้วก็ถ่ายรูปส่งด้วยนะคะ ค่ะ ทุกคนถ่ายรูปนะคะ แบบฝึกหัดนะคะ แล้วก็เอาลง Classroom เพื่อนที่ไม่มานะ ฝากติวด้วยนะคะ ฝากไปสอนเพื่อนด้วย ชื่ออะไรนะคะ อ๋อ มาทุกคนนะคะ ยกเว้นวริศา ใครยังไม่มีตัวไหนนะ ถามเพื่อนนะคะ ชีตหรือว่าแบบฝึกหัดที่ครูให้ไป โอเค วันนี้ก็น่าจะเท่านี้ค่ะ ค่ะ สวัสดีค่ะ