ทดสอบเสียงนะครับ ทางฝั่งนั้นได้ยินเสียงล่ามไหมครับผม (อาจารย์) สวัสดีค่ะ ได้ยินไหมคะ (ล่าม) ได้ยินครับ ล่ามได้ยินครับ (อาจารย์สุธาสินี) โอเคนะคะ เดี๋ยววันนี้นะคะ เราจะมาพูดถึงการวัดประสิทธิภาพของอัลกอริทึมเดี๋ยวคสัปดาห์ที่แล้วเราพูดถึงอัลกอริทึมอัลกอริทึมคืออะไร อัลกอริทึม ก็คือกระบวนการของการแก้ไขปัญหา เรามีโจทย์ใช่ไหมคะ เรามีโจทย์นะคะคือ output เราคืออะไร เราต้องหากระบวนการหรือขั้นตอนในการแก้ไขปัญหานะคะ ไอ้กระบวนการหรือขั้นตอนตัวนั้นล่ะ เรียกว่า "อัลกอริทึม" คราวนี้นะคะ เราพูดอัลกอริทึมของการต้มไข่ มีต่้มไข่มีมาม่าทุกคนจะเห็นว่า แต่ละคนนี่ จะกระบวนการของการต้มมาม่าไม่เหมือนกัน แต่สิ่งที่ได้เราได้มาม่าเหมือนกัน พร้อมรับประทาน โจทย์โจทย์ 1 โจทย์เราสามารถมีวิธีการแก้ไขแตกต่างกันได้หลายรูปแบบ เราแสดงอัลกอริทึมที่เป็นขั้นตอน 1 2 3 นะคะ นอกจากนั้นแล้วเรายังเขียนในลักษณะที่เป็นFlowchart หรือว่าผังงาน ค่ะ โอเค โดยผังงานตัวนั้นนี่เราเริ่มต้น ถูกไหมคะ เราจะมีสัญญาสำหรับการเริ่มต้น การสิ้นสุดนะคะ สิ่งที่อยู่ข้างในก็คือ Process นะคะ จะแทนด้วยสี่เหลี่ยมนะคะ สี่เหลี่ยมผืนผ้า จะแทนด้วย Process นะคะ กระบวนการไหนที่เราใช้การตัดสินใจ สี่เหลี่ยมข้าวหลามตัด และการตัดสินใจของเรานี่ ก็คือตัดสินใจว่าจริงหรือไม่จริง ถ้าจริงให้ทำอะไร ไม่จริงให้ทำอะไรนะคะ แล้วก็ คราวที่แล้วเราพูดถึงการเดินนะ เดินของนกนะคะ ที่ไปกินหมู อันนี้ทุกคนสามารถเดินได้ โดยการเดินไหนที่เราเดินซ้ำ ๆ ถูกไหมคะ อะไรที่เราเดินซ้ำ ๆ เราทำเหมือนกันเลย เราไม่จำเป็นต้องเขียนขั้นตอนเหล่านั้นซ้ำ ๆ เราจะใช้การวนลูปหรือว่าทำซ้ำ ถ้าจำได้เราจะเขียนการวนซ้ำ ซ้ำ แล้วข้างในนี่ ก็ใช้สัญลักษณะหรือคำสั่งที่เขียนหลาย ๆ บรรทัดนั่นล่ะ เหลือแค่ 1 คำสั่งนะคะ เสร็จแล้วเราก็ระบุว่าเราทำซ้ำคำสั่งนั้นกี่ครั้งอันนี้ก็คือการวน Loop หรือกานะคะ คราวนี้จากอัลกอริทึมที่เราเขียนไป แล้วเราจะรู้ได้อย่างไรว่าอัลกอริทึมที่เราเขียนนี่มันมีประสิทธิภาพมันดีหรือเปล่า มันทำงานได้เร็วหรือเปล่านะคะ เราต้องมีวิธีการวัดนะ เราต้องมีวิธีการวัดนะคะ เราวัดจากอะไรได้บ้าง 1. วัดจากเวลาที่ใช้ในการประมวลผลโปรแกรม เขียนขึ้น ใช้เวลาในการประมวลผลเป็นอย่างไร ใช้หน่วยความจำในคอมพิวเตอร์เป็นอย่างไรนะคะ เหมือนกับเทียบกับการเรียนในชั้นเรียนพอเรียนเสร็จเราก็ต้อง การวัดผล ใช่ไหมคะ ทุกคนรับข้อมูลเหมือนกัน ครูสอนเหมือนกันทุกคนเลย แต่การวัดผลทุกคนก็อาจจะแตกต่างกันบางคนได้ A ได้ b เหมือนกันนะคะ อัลกอริทึมก็มีวิธีการวัดประสิทธิภาพ เราจะได้รู้ว่าสิ่งที่เราเขียนนี่มีประสิทธิภาพมากแค่ไหน มันคือวัดจากเวลากับหน่วยความจำใน คลาสนี้ ครูจะใช้วิธีการในการประมวลผล เราจะเรียนการวิเคราะห์เวลาที่ใช้ในการประมวลผลนะคะ คราวนี้เวลาที่ใช้ในการประมวณผล จะใช้เป็นการประมาณเวลาโดยการใช้ตัววัดที่มีชื่อว่า Big-O Big-O เขียนอย่างนี้นะ b-i-g แล้วก็ - แล้วกตอนนี้ก็คือ Big-O จริง ๆ ตอนนี้ก็มีตัววัดประสิทธิภาพหลายตัวนะคะ มี Big-O, Big-Omega Big-Teta นะคะ แต่ที่เราจะใช้กันวันนี้ใน Class นี้ หา Big-O จากอัลกอริทึม 1 ตัว จะดูว่าเราจะใช้เวลาในการประมวลผลคิดเป็นเท่าไรนะคะ เขาบอกว่า Big-O ก็คือหน่วยวัดความเร็วของการทำงานของโปรแกรม โดยที่เราวัดจากจำนวนรอบของการทำงานกับข้อมูล นับจำนวนรอบ หมายความว่าอะไร เราเขียนโปรแกรมใช่ไหมคะใช่ไหมคะ แต่ละบรรทัดเราเขียนโปรแกรมแต่ละบรรทัดเรียงลำดับลงมา เวลาเรากดปุ่ม Run ปุ๊บ มันจะค่อย ๆ ทำงานทีละ บรรทัดใช่ไหมคะ มันจะทำงานทีละบรรทัดไล่ลงมาจากบนลงล่างนะคะ ถ้าเราเขียนโค้ดเรียงลำดับลงมาเรื่อย ๆ นะคะ จะทำงานเพียง 1 ครั้ง ทำบรรทัดที่ 1 ทำ ที่ 2 ทำบรรทัดที่ 3 ที่ 4 ตามไปเรื่อย ๆ ไม่ได้วนกลับขึ้นไปข้างบนนะแต่เมื่อไหร่ก็ตามที่เราใช้ลูป หรือว่าการทำงานแบบวนซ้ำที่เราเคยพูด ไปแล้วนะ ตัวนี้ อย่างเช่นตรงนี้นะคะ เป็นการทำงานแบบวนซ้ำแสดงว่าเราทำงานมากกว่า 1 รอบใช่ไหมคะ เมื่อไหร่ก็ ตามที่มีการใช้Loop หรือว่ามีการวนซ้ำ คำสั่งนั้นนี่ อาจจะมีการทำงานมากกว่า 1 ครั้ง เราจะต้องรู้ว่าแล้วมันทำงานกี่ครับ ถ้าไม่มีการวน Loop มันจะทำงาน 1 ครั้งนะคะ แต่เมื่อไรก็ตามที่มีการทำซ้ำหรือวนลูป มันจะทำงานตามจำนวนรอบที่เรากำหนด ว่าเรากำหนดให้มันทำงานกี่ครั้งแล้วเราถึงจะนำมาสรุปว่า เอามาหาความเร็วของการทำงานของโปรแกรมคราวนี้สัญลักษณ์ของ Big-O คืออะไร ก็คือ O ใหญ่นะคะ เราจะใช้ตัว O ใหญ่เป็นสัญลหาความเร็วนะคะ ของการทำงานเราเริ่มต้นอย่างที่ครูบอกว่า Big-O คือ การวัดความเร็วของการทำงานโดยวัดจากจำนวนรอบ ฉะนั้นเราจะมาดูว่า แล้วจะนับจำนวนครั้งของการทำงานหรือจำนวนรอบของการทำงานนี่นับอย่างไร มีอยู่ 2 แบบนะคะ แบบค่าคงทีก็คือแบบที่ครูบอก ทำเรียงลำดับลงมาเรื่อย ๆ หรือทำงานแบบ Loop ลำดับ ก็คือวนซ้ำ เราใช้ลูปอะไรบ้างในการเขียนโปรแกรม ในการวนซ้ำเราใช้ Loop อะไรบ้าเราใช้ Loop อะไรบ้างเอ่ย จำได้ไหมจำได้ไหมคะ ลูปอะไร ในการวนลูปในภาษา Python น่ะค่ะ เราใช้ Loop อะไรบ้าง ใช่ เราใช้อะไรคะ ใน Python ที่เราเขียน ตัวแรก คือ Loop For ใช่ มี While ใช่ไหมคะมี While อีกตัวหนึ่ง คืออะไร For นะคะ เราจะคุ้นเคยนะ การทำงานแบบวนซ้ำหรือลูปนี่ จะมี for กับ While for กับ While ต่างกันอย่างไรคะ ทราบไหม เมื่อไหร่เราจะใช้ For เมื่อไหร่เราจะใช้ While 1 เราสันนิษฐาน ได้เลย อาจจะทำงาน 1 ครั้งหรือมากกว่า 1 ครั้งนะคะ ขึ้นอยู่กับเงื่อนไข แสดงว่าถ้าเราต้องการวนซ้ำ เราสามารถใช้ for หรือใช้ While ได้เมื่อไหร่ที่เราทราบจำนว รอบที่แน่นอนของการวนซ้ำ เราจะใช้ for นะคะ เพื่อความง่าย เมื่อไรก็ตามที่เรารู้จำนวนรอบของการวนซ้ำเราจะใช้ for เช่นเขาบอกว่สให้วิ่งรอบ แสดงว่าต้องวิ่ง 10 รอบใช่ไหม เราจะวิ่ง 11 รอบได้ไหมไม่นับถูกไหม ครูบอกว่า 10 รอบ ก็ต้อง 10 รอบ เพราะฉะนั้น ต้องใช้ for ถูกไหมคะ แต่ถ้าครูบอกว่าวิ่งจนกระทั้ง เพื่อน นาย A มา รู้ไหมไม่รู้เพราะว่าไม่รู้นายเอมาตอนไหนวิ่งไปเรื่อย ๆ จนกว่านาย A จะมา นาย A มาเมื่อไรถึงหยุดนะคะ เพราะฉะนั้น Ehileเราไม่รู้จำนวนรอบที่แน่นอน ให้คิดว่าเรารู้จำนวนรอบที่แน่นอนนะคะ เช่น แม่ให้เงินมานะ มาโรงเรียน ไม่ใช่มาโรงเรียนหรอก แม่ให้ไปซื้อของนะคะ ไปซื้อหมูปิ้ง ให้เงิน 100 บาท ไปซื้อหมูปิ้ง เรารู้ไหมต้องซื้อได้กี่ไม้ ไม่รู้เหมือนกันนะ เราก็ใช้ while ก็ได้นะ ซื้อไปจนกระทั่งเงินหมดน่ะ เงินหมดเมื่อไรถึงหยุดนะคะ ไม่อย่างนั้นก็ซื้อไปเรื่อย ๆ หวยถูกไหม ซื้อไปเรื่อย ๆ ไม่ถูกไม่รู้ว่าจำนวนรอบต้องซื้อกี่งวดใช่ไหมคะ คราวนี้เราแยก Loop While กับ Loop for พอได้นะคะ คราวนี้การนับตัว นับดำเนินการ นับ 1 2 3 4 นับ นะคะ การนับ ก็คือจำนวนรอบนะคะ ในการทำงาน ในกรณีที่ไม่มีลูป การวนซ้ำเป็นคำสั่งเรียงกันมานะคะ เป็นคำสั่งเรียงกันมาเรื่อย ๆ นะคะ เช่น ครูมีคำสั่งอยู่ 2 บรรทัด คำสั่งอยู่ 2 บรรทัด ไม่ใช่การวนลูปใช่ไหม เพราะไม่มีคำว่า "for" กับไม่มีคำว่า "Whileคำสั่งแรกcount = 0 คืออะไร เราให้ค่ากับตัวแปรmี่ชื่อว่า Count C-o-u-n-t ตอนนี้ เมื่อเรา รันคำสั่งนี้ปุ๊บ คำสั่งนี้ถูกประมวลผล count จะมีค่าเป็น 0 ใช่ไหมคะ ทำงาน 1 รอบนี่ บรรทัดที่ 1 นี่ เมื่อผ่านบรรทัดที่ 1 ไป Count นะคะ Count จะมีค่าเป็น 0 เสร็จแล้วทำงานบรรทัดที่ 2 บรรทัดที่ 2 คือ การคำนวณใช่ไหมคะ คำนวณ คำนวณเสร็จแล้วก็เก็บในคัวแปรที่ชื่อว่าเวลาเรากด Run ถูกไหมคะ เวลาเรากดโปรแกรม Python แล้วเรากด Run นี่ มันจะอ่านบรรทัดที่ 1 เสร็จ ในกรณีที่ไม่มี Error นะ ก็มาบรรทัดที่ 2 มันหมดแล้วไม่มีอะไรมันก็จบการทำงานใช่ไหมคะ เพราะฉะนั้น ครูเลยถามว่าไอ้คำสั่งของบรรทัดที่ 1 มันทำงานกี่ครั้งคิดว่ามันทำงานกี่ครั้ง ทำงานกี่ครั้ง ครูกดปุ่ม Run ปุ๊บ มันมาอ่านบรรทัดที่ 1 ใส่ค่าให้กับตัวแปร Count เสร็จแล้วก็มาทำบรรทัดที่ 2 เพราะ แล้วก็จบ เพราะฉะนั้นบรรทัดที่ 1 ทำงานกี่ครั้ง1 ครั้งใช่ไหมคะ ทำงานแค่ 1 ครั้ง ต่อการ Run ต่อการ Run บรรทัดที่ 2 ทำงานกี่ครั้ง กด Run ครั้งหนึ่ง ถูกไหมคะ มันอ่านบรรทัดที่ 1 1 ครั้ง บรรทัดที่ 2 1 ครั้งเหมือนกัน แล้วก็จบใช่ไหมคะ เพราะฉะนั้นเมื่อไหร่ก็ตาม โปรแกรมของเราไม่มีการวนลูป การทำงานแต่ละบรรทัดจะทำงาน 1 ครั้งเท่านนั้นนะคะ จะทำงาน 1 ครั้งเท่านั้น เราจะถึงเป็นการนับตัวดำเนินการ นี้คือ 1 ก็คือ 1 ครั้งตัวนี้ 1 ครั้งถ้าเราจะหาค่า Big-O นะคะ เรานับตัวดำเนินการได้แล้ว ต่อไปเราจะหาค่า Big-O เราต้อง หาค่า ฟังก์ชันก่อนคือ f f คือฟังก์ชันf = ตัวเลขตัวนี้มาจากไหน 1 ตัวนี้ ก็คือ 1 ตัวนี้นะคะ ของบรรที่ 1 บวกด้วย ก็คือ จำนวนรอบของบรรทัดที่ 2 นะคะ ทำงาน 1 ครั้ง ทำงาน 1 ครั้ง บวกกันเป็น 2 ครั้งนะคะ เราถือว่าค่า Big-O เป็น O 1 เขียน O วงเล็บเปิดก็คือเลข 1 นะคะ เป็น o1 แล้ว ถ้าเป็นเงื่อนไขบ้าง เป็นเงื่อนไขคืออะไร เป็นการตัดสินใจ เมื่อไรก็ตามที่เราตัดสินใจใช่ไหมคะ คือ การเลือก การตัดสินใจคือการเลือก เลือกว่าจะไปทางซ้ายหรือจะไปทางขวาเวลาเราเจอสี่แยกใช่ไหม เราต้องตัดสินใจก่อนว่าเราตรงไป เลี้ยวซ้าย เลี้ยวขวา เพราะฉะนั้นการตัดสินในเราใช้คำสั่ง ใช้คำสั่ง if i-f นะคะ คำสั่ง if ใน Python if คือ ถ้า ถ้า แล้วตามด้วยเงื่อนไขใช่ไหมคะ ข้างในตรงนี้คือเงื่อนไหเงื่อนไขที่ครูกำหนด คือ ค่า n น้อยกว่า 0 ถ้า N น้อยว่า 0 N เป็นตัวเลข เดี๋ยวเราจะมาแทนค่า N กัน จากโค้ดตัวนี้นะคะ ถ้า n น้อยกว่า 0 ให้ทำอะไร ถ้าเงื่อนไขตัวนี้เป็นจริง โอเค มาทำบรรทัดที่ 3 นะคะพูดผิด เป็นบรรทัดที่ 3 ถ้าเงื่อนไขตรงนี้เป็นจริง จะมาทำบรรทัดที่ 3 ก็คือให้ print คำว่า Negative Integer ก็คือตัวเลขติดลบ else คืออะไรคะ ถ้าเงื่อนไขตรงนี้เงื่อนไขตัวนี้ไม่จริง ก็คือ n มันมากกว่า เท่ากับ 0 ใช่ไหมคะ เงื่อนไขตรงนี้ไม่จริงคืออะไร คือ n มากกว่าหรือเท่ากับ 0 เป็นนิเศษจากตัวนี้ เงื่อนไขข้างบน ถ้าข้างบนนี่ไม่จริง ก็แสดงว่า n มากกว่าหรือเท่ากับ 0 เราจะทำอะไร เราก็จะแสดงคำว่า Positive Integer นะคะ คราวนี้ ทุกคนช่วยครูดู สิ่งที่เราจะต้องตอบครูให้ได้ว่าจะทำงานบรรทัดที่ 3 หรือทำงานบรรทัดที่ 7 นะคะ เดี๋ยวให้ยกมีนะ ยกมือ ตัวเลข ครูจะแทนค่า n ใด ๆ ให้ ลองบอกครูหน่อยว่าเราจะทำงานบรรทัดที่ 3 หรือบรรทัดที่ 7 ด้วยเงื่อนไขตัวนี้ ถ้า n น้อยกว่า 0 จะ ทำบรรทัดที่ 3 ถ้า n มากกว่าเท่ากับ0 จะทำบรรทัดที่ 7 ครูกำหนดให้ n เท่ากับ 20 ทำบรรทัดไหนเอ่ย บรรทัดไหนดี อันนี้ n = 20 นะ คำถามคือจาก Code ตัวนี้ใช่ไหมคะ Code ตัวนี้ที่ครูให้มาครูอยากรู้ว่าเมื่อครูแทน n ด้วยจำนวนใด ๆ ด้วยตัวเลขนี้ แทนค่า n ด้วยตัวเลขนี้เมื่อ N เท่ากับ 20 เอา 20 ไปแทน n นี่ เมื่อเรารันคำสั่งนี้ครูจะทำบรรทัดที่ 3 หรือบรรทัดที่ 7 อันไหนคะ น้อยกว่า ครูก็เลยอยากรู้ว่าเราจะโชว์ บรรทัดที่ 3 ที่หน้าจอ หรือว่า Show บรรทัดที่ 7 คนอื่นบรรทัดที่เท่าไหร่เอ่ย อันนี้ n น้อยกว่า 0 เราจะทำบรรทัดไหนดีคะ เดี๋ยวนะ ครูลองกด 14 นะ ครูลองกด... นะคะ จาก Code ตัวนี้นะนะคะครูกำหนดให้ n = 20 เมื่อเรา Run โปรแกรมตามเงื่อนไขนี้แล้ว จะแสดงข้อความในบรรทัดที่ 3 หรือบรรทัดที่ 7 เราต้อง Check เงื่อนไขถูกไหมคะ เอา 20 ไปแทน n ได้ไหมคะ โอเค น้องตอบแล้วนะ คือบรรทัดที่ 7 นะคะ ใช่ ถ้าเราแทน n ด้วย 20 ใช่ไหมคะ 20 น้อยกว่า 0 จริงไหม 20 น้อยกว่า 0 จริงไหม ไม่จริง ถ้าไม่จริงให้มาทำอะไร ให้มาทำหลัง else ใช่ไหมคะ เพราะฉะนั้นจะต้อง Print ออกมาที่หน้าจอ โอเคเอาใหม่นะ เอาทีละตัวนะคะ เอาใหม่นะ สมมติว่าเดี๋ยวครูถามอย่างนี้แล้วกันนะ ถ้า ถ้าคิดว่าถามทุกคนเลยนะคะ ถ้าทำงาน บรรทัดที่ 3 นี่ เดี๋ยวจะให้ยกมือซ้าย ถ้าทำงานบรรทัดที่ 7 ยกมือขวา เดี๋ยวครูเขียนให้ ถ้าตัวนี้นะ ให้ยกมือขวา ถ้าทำงานตรงนี้ให้ยกมือซ้ายนะค เอาใหม่ ทุกคนดูนะ ถ้าครูกำหนดให้ n = 6 n เท่ากับ 6 ยกมือซ้ายหรือมือความ n = 6 มีใครยกอีก ยกมือให้ครูดูหน่อยเร็ว n เท่ากับ 6 6 น้อยกว่า 0 จริงไหม 6 น้อยว่า 0 จริงไหมคะ6 น้อยกว่า 0 ไม่จริงใช่ไหม แล้วที่จริงแล้วแสดงว่า 6 มากกว่า 0 ยกมืออะไรคะ ต้องยกมือขวา ยกมือขวา เอาใหม่เดี๋ยวทุกคนต้องยกมือนะ เปลี่ยนใหม่ เปลี่ยนใหม่ ตัวเลข 25 ยก ใครไม่ยก ยกมือด้วย 25 มากว่า 0 ไหม มากกว่าเพราะฉะนั้น ยกมือ ยกมือขวาใช่ไหม ใช่เพื่อนตอบถูกยกมือขวา เอาใหม่ -10 -10 -10 - มันน้อยกว่า 0 ไหม น้อยกว่าเพื่อนตอบถูกยกมือ ซ้ายนะใช่ยกมือซ้าย สมมติว่าครูมีโจทย์ใหม่ ยกมือซ้าย หรือมือขวาครูแทนตัวเลขให้แล้วได้ไหมคะ ถ้า 25 มันน้อยกว่า 0 มันจริงไหม ไม่จริง 25 มันไม่ได้น้อยกว่า 0 เพราะฉะนั้นทำบรรทัดไม่จริง ถูกไหม ไม่จริง เพราะฉะนั้น บรรทัดนี้ไม่ทำ ต้องย้ายมาทำตัวนี้ 25 มากกว่าเท่า 0 ใช่ไหม ใช่ก็เลยต้องยกมือซ้าย ดูเส้น อันนี้คือ 0 นะ -10 ใช่ไหมคะ มากกว่า 0 มาทางขวา มากกว่า 0 อันนี้ไปทางซ้ายคือน้อยกว่า 0 ถ้าตัวเลขอยู่ในช่วงนี้ถูกไหมคะ ให้ทำอะไร ยกมือซ้ายใช่ไหม ถ้าตัวเลขอยู่ในช่วงนี้นะคะ คือรวมถึงตัวนี้ด้วยนะ ได้ไหม ดูเส้นจำนวนตัวนี้นะ ครูแปลงจากตัวนั้นมาเป็นเส้นจำนวนตัวนี้แล้ว 0 ตั้งแต่ 0 มาทางขวา ให้ยกมือซ้าย เห็นไหม ถ้า 0 ย้อนไปทางซ้าย คือ ตัวเลขมันติดลบน่ะ ตัวเลขมันติดลบ ทำไมมันไมมันไม่ลบ เอาใหม่นะคะ ตัวเลขติดลบนะ ถ้ามีตัวเลขติดลบแบบนี้ ให้ยกมือขวา เอาไหมนะ สมมติว่าครู บอกว่า เลข -1 ถ้า -1 จะยกมือขวาหรือยกมือซ้าย ลบ ๆ -1 จะยก ขวา หรือ ซ้าย ขวา-1 ขวาใช่ไหม เอาใหม่ ถ้าครูเปลี่ยนเลขตัวนี้เป็น 9 มันเกินนะ 15 15 ยกซ้ายหรือขวา 15 15 อันนี้โอเคขึ้นนะ อันนี้ครูเปลี่ยนใหม่ คือซ้าย ติดลบคือซ้าย เป็น + มากกว่า 0 ก็คือขวานะคะ คราวนี้จะได้ไม่งงนะ 19 ยกมือไหน คนอื่นล่ะ ใช่ ๆ ครูขีดฆ่าแล้วเส้นจำนวน ได้ไหม โอเคเอาใหม่นะอีกครั้งหนึ่ง -5 -5 ซ้ายหรือขวา ใช่ คือ ซ้ายใช่ไหมคะ เรารู้ได้อย่างไรเราเอาตัวเลขนั้นมาเทียบ ถูกไหมคะ เรากำลังตัดสินใจอยู่ตอนนี้ จะยกซ้ายหรือจะยกขวา ใช่ไหม นี่คือการตัดสินใจนะคะจะยกมือไหนดี โดยมีเงื่อนไขอย่างที่ครูบอกว่าถ้ามากกว่า =0 เพราะฉะนั้นเมื่อไหร่ก็ตามที่ครูบอกตัวเลขเราไป ต้องคิดตัดสินใจ เอ๊ะ มันมากกว่า 0 หรือเปล่า ใช่ไหม ถ้ามันมากกว่า 0 นี่ เราต้องยกมือซ้าย แต่ถ้าไม่ใช่มันน้อยกว่า 0 มากกว่า 0 ต้องยกมือขวา น้อยกว่า 0 เราต้องยกมือซ้ายนะคะ อันนี้คือการตัดสินใจนะคะ ตัดสินใจจะยกซ้ายหรือยกมือขวาดี เทียบกับอะไร ก็ต้องมีเงื่อน ใช่ไหม ต้องมีเงื่อนไขของการตัดสินใจนะคะ จะยกมือซ้ายเมื่อไร จะยกมือขวาเมื่อไร เวลาเราเอาไปเขียนโปรแกรม เราจะใช้คำสั่ง if ตัวนี้ล่ะนะคะ แล้วข้างในวงเล็บ ก็คือเงื่อนไขที่เรากำหนดขึ้นนะคะ เป็นเงื่อนไขที่เรากำหนดขึ้น เสร็จแล้วถ้ามันจริงให้เราทำอะไร ถ้าไม่จริง ให้ทำอะไรนะคะ โอเค ถัดมา จะเห็นว่าการตัดสินใจตรงนี้เราจะทำงานแค่ 1 ครั้งเท่านั้น ตรวจสอบเงื่อนไขถูกไหม แล้วก็ยกมือ ถูกไหมคะ ตามโจทย์นี่ ตรวจสอบเงื่อนไข 1 ครั้ง แล้วมันเป็นจริงหรือเปล่า ถ้าจริงก็มายกมือในบรรทัดนี้ เห็นไหมคะ หรือตรวจสอบเงื่อนไขตรวจสอบเงื่อนไขตัวนี้แล้วไม่จริง ก็มายกมือในบรรทัดยกมือซ้าย เพราะฉะนั้นเวลาเรานั้บการ ทำงานนะคะ เราก็จะนับเฉพาะบรรทัดที่เราทำงานเท่านั้น ทำงานเพียง 1 ครั้งเท่านั้นนะคะ ทำงานเพียง 1 ครั้งเท่านั้น เพราะฉะนั้น เช่น เราเปรียบเทียบที่เงื่อนไขทำงาน 1 ครั้งนะคะ ถ้ามันเป็นจริงจะมาทำบรรทัดที่ 3 แล้วก็จบการทำงาน ข้างล่างนี้จะไม่ทำต่อ นะคะ จะไม่ทำต่อ เพราะเราตัดสินใจแล้วนะคะ เพราะเราตัดสินใจแล้ว ตัดสินใจให้แสดงข้อความนี้แล้วก็จบ เพราะฉะนั้นการทำงาน มันก็จพทำงานบรรทัดที่ 1 ทำงาน 1 ครั้ง ทำงานบรรทัดที่ 3 ทำงานอีก 1 ครั้งนะคะ ก็จบการทำงาน เพราะฉะนั้น ถ้า Big-O ที่ได้ เราก็เอา 1 นะคะ + 1 เป็น 2 เวลาเราเขียนค่า Big-O จะแทนค่าด้วย 1 เพราะมันไม่มีสัมประสิทธิ์อะไรเลย มันเป็นตัวเลขนะ เราก็แทนมันเป็น 1 นะคะ ตราวนี้ไม่ได้ใช่ไหม ไม่เป็นอะไรค่ะ เราจำอย่างไรให้ขึ้นมาอีกทีหนึ่ง เได้แล้ว คราวนี้เมื่อกี้คือเงื่อนไขใช่ไหมคะ คือเงื่อนไขคือการตัดสินใจ ถัดมา เมื่อกี้ครูบอกแล้วว่าถ้าเรามีคำสั่งซ้ำ ๆ นะคะ เราจะไม่เขียนคำสั่งเดิม ๆ หลาย ๆ ครั้ง เราก็จะใช้การวนซ้ำนะคะ หรือการใช้ Loop แทน การเขียนแบบเดิม ๆ เหมือน ๆ กันแล้วการใช้ลูปนะคะ เราจะพูดถึง Loop for นะคะ ที่ง่ายที่สุด การใช้ Loop For คือการ ที่แน่นอน เรานับจำนวนรอบได้ว่าทำงานกี่ครั้งนะคะ จากโจทย์ที่ครูกำหนดให้เราใช้ For แสดงว่า เราอาจจะทำงานมากกว่า 1 ครั้งอาจจะทำงาน 1 ครั้ง 2 ครั้ง 3 ครั้ง 4 ครั้ก็แล้วแต่เงื่อนไขที่เรากำหนด แล้วเราอยากรู้ว่าแล้วจำนวนรอบของการทำงานน่ะ เมื่อเราวัดประสิทธิภาพเวลา ที่ใช้นะคะ เราจะวัดอย่างไรมันจะได้ค่าอะไรออกมาในการทำงานนะ เรากำหนดให้เป็น n ใด ๆ นะคะ เป็นตัว n ใด ๆ นั่นหมายความว่าเมื่อแทน n ด้วยตัวเลขอะไรก็ตาม จะมีประสิทธิภาพในเรื่องของความเร็ว มีค่า Big-O เท่ากันนะคะ เช่นครูมีคำสั่งทถ้าทุกคนเห็นหน้าจอ ครูมีอยู่ 3 บรรทัดนะคะ บรรทัดแรกไม่ได้อยู่ในลูป For นะ บรรทัดแรกเป็นการกำหนดค่าเริ่มต้นให้กับตัวแปรที่ชื่อว่า Total เมื่อเรา Run หรือทำงานผ่านบรรทัดที่ 1 ไป total จะมีค่าเป็น 0 นะคะ total จะมีค่าเป็น 0 เป็นตัวเลขนะเป็นตัวเลข ถัดมาเจอคำสั่งบรรทัดที่ 2 มีการใช้ลูป for แเราก็คาดเดาได้เลยว่ามันน่าจะทำงานมากกว่า 1 ครั้งนะคะ แล้วมันทำงานกี่ครั้งล่ะ เขากำหนดให้ For i in range(n) นะคะ หมายความว่าตัว i ตัวนี้ตัวแปร i นี่ มันสามารถเป็นค่าอะไรได้บ้างเมื่อเราแทนค่าตัวเลขที่แทน n ตัวนี้ ถ้ามันอยู่ภายใต้จำนวนรอบที่เรากำหนด เมื่อเรากำหนดค่า n แล้ว มันจะมาทำงานคำสั่งบรรทัดที่ 3 นะคะ จะ วนรอบตามจำนวนที่กำหนดจนครบแล้วก็หลุดออกจากการวนซ้ำนะคะ มันก็หลุดออกจากการวนซ้ำนะคราวนี้สมมติ ครูกำหนดให้ n = 3 n = 3 นะคะ 1 2 3 n เท่ากับ 3 แล้ว i มีค่าเป็นอะไรได้บ้าง ตัวนี้ครูใช้เป็น pythonถูกไหมคะ คำสั่งตัวนี้เป็นภาษา Python for i in range 3 ครูแทน n ตัวนี้ด้วย 3 ครูไม่ใช่ล่ะ ครูใช้ 3 แทน ครูถามว่าค่า i ควรจะเป็นตัวเลขอะไรได้บ้าง ใน Python นะคะ Index หรือตัวเลขแรก ของ list ของ Range ตัวนี้จะเริ่มต้นที่ 0 เสมอนะคะ range 3 จะเริ่มต้นที่ 0 1 แล้วก็ 2 คือมี 3 ตัว ถูกไหมคะ 0 1 2 หรือ จำแบบเร็ว ๆ เริ่มต้นที่ 3 เริ่มต้นที่ 0 ใช่ไหมคะ ตัวเลขตัวนี้มันเป็น 3 แสดงว่าต้องแค่ 2 จำเร็ว ๆ ลดลงมา 1 เพราะฉะนั้น Range 3 คือ 0 1 2 คราวนี้ครูถามเพิ่มใหม่ เเป็นอะไรได้บ้าง ตรงนี้ควรมีค่าอะไรได้บ้าง ดูตัวนี้เป็นตัวอย่างนะ ครูบอกว่าตัวแรกต้องขึ้นต้นด้วยตัวอะไร 0, เลขอะไรคะ 1 ไปต่อไหม ปิดได้หรือยัง ต้องมี 2 ไหม ดูเทียบกับตัวนี้ มีแค่ 0 กับ 1 แล้วก็ปิดทุกคนมีกระดาษที่ครูให้แล้วใช่ไหม ผลิกไปด้านหลัง หน้าหลังมันจะเป็นกรพลิกกระดาษที่ครูแจกให้ ทุกคนคลิกเป็นกระดาษที่ครูแจกให้ คราวนี้ range 3 กับ range 2 ทำที่เหลืออีก 3 ข้อให้ครูหน่อยสิ ด้วย ตัวเลขที่อยู่ใน list มีค่าอะไรบ้าง range 1 range 10 มันควรมีค่าอะไใช่ไหมคะ มันควรจะเป็นตัวเลขอะไรได้บ้างต้องอยู่ใน list นะคะ ว่าที่อยู่ใน list ตัวนี้มันมี กี่ตัว เราก็จะรู้จำนวนรอบของการทำงานของการทำงาน (อาจารย์สุธาสินี) คราวนี้เมื่อกี้ครูเดินดูแล้ว ทุกคนได้นะ ตัวนี้รู้ว่า range 5 นะคะ มีค่าเป็นอะไรได้บ้างนะ ก็คือ 0 1 2 3 4 นะคะ range 1 ก็คือเลข 0 นะคะ range 10 ก็คือ 0, 1, 2, 3, 4, 5 , ก็คือมี 10 ตัว เริ่มจาก 0 นะคะ นับไปให้ได้ 10 ตัวก็ถึง 0 ถึง 9 คราวนี้ range ตัวนี้นะ ครูไม่มีจุดเริ่มต้นครูไม่ได้บอกว่าเริ่มต้น เราจะเริ่มด้วย index ที่เป็น 0 เสมอแต่ถ้าครูอยากจะระบุตัวเลขเริ่มต้นว่าควรเริ่มต้นด้วยตัวเลขอะไร ควรด้วยเริ่มต้นด้วยตัวเลขอะไรที่ไม่ใช่ 0 เราจะไม่เริ่มต้นจากตัวแรกที่เป็น 0 นะคะ เราอยากเริ่มต้นจากตัวเลขตัวอื่นบ้าง เราจะกำหนด range ตัวนี้อย่างไรเช่น Range คือช่วงถูกไหมคะ range (1: แสดงว่าตัวเลขตัวแรกที่เราเขียน คือ 1 นะคะ เป็น 1 ตามที่เรากำหนด ตัวแรก เสร็จแล้วนี่ข้างหลังมันถึง4 ใช่ไหม ลดลงไป 1 นะคะ เป็น 1 2 3 เห็นไหมตัวเลขข้างหลังมือคือ 3 มันจะน้อยกว่า ตัวเลข 4 1 ตัวให้จำแบบนี้ ถัดมา range 1, 3 เราเริ่มต้นที่เลข 1 นะคะ , 2 เห็นไหมมันน้อยกว่าเลข 3 1 ตัวถัดมาคราวนี้มาดูด้วยกัน 3 กับ 7 เราควรใช้อะไร เริ่มต้นตัวแรกเป็นอะไรคะ 3 แล้วเลขอะไรอีก 4 5 6 มี 7 ไหม ไม่มีใช่ไหมคะ 3, 4, 5, 6 ทำให้ครูหน่อยเร็ว Range 1 , 2 ต้องมีตัวเลขอะไรบ้าง range 2, 6 มีตัวเลขอะไรบ้าง ต้องอยู่ในลิสต์ใช่ไหม ทุกอันต้องอยู่ใน List นะ เราต้องมีกเปิด มีตัวเลขอะไรบ้าง คราวนี้ดู เมื่อกี้ครูเดินดูแล้วตอบถูกนะ range 1,2 ได้เลขอะไรคะ เลข 1 ใช่ไหมทุกคนได้เลข 1 นะ 2 , 6 ก็คือ 2 3 4 แล้วก็ 5 ใช่ไหมคะ ถามต่อ บรรทัดนี้สมมติ for i in range 3-7 ทำงานกี่รอบ ลองดูสิคะ ข้อนี้ทำงานกี่รอบ มันได้ 3 3, 4 5 6 ทำงานทั้งหมดกี่รอบ มีกี่ตัว 4 ตัว ถูกหรือเปล่า มีอยู่ 4 ตัว เพราะฉะนั้น ทำงานกี่ตัว... ทำงานกี่รอบ 4 รอบ เขียนให้ครูหน่อย ทุกอันเลยนี่ ทำงานกี่รอบ เขียนเพิ่มให้ครูหน่อยที่เราทำไปแล้วน่ะ เขียนเพิ่มว่าทำงานกี่รอบ เท่ากับ... รอบ นับจากไหน นับว่ามันมีกี่ตัว List เรานี่ มีกี่ตัว ก็คืองานเท่านั้นรอบ จาก Code โปรแกรมตัวนี้นะคะ เดี๋ยวเราจะเอาไปรวมในลูป For นะคะ เราแยกส่วนมาเฉย ๆ นะ เพื่อให้ว่าถ้าขอบเขตของค่า ที่เรากำหนดมันสามารถเป็นตัวเลขอะไรได้บ้างนะคะ ก็อย่างที่เราเขียน และมันทำงานกี่รอบ ก็คือนับว่ามันมีกี่ตัวนะคะ คือจำนวนรอบ ย้อนกลับมาดูตัวโปรแกรมตัวนี้นะคะ ครูมี Code อยู่ 3 บรรทัดนะอย่างที่บอก บรรทัดแรก กำหนดค่าเริ่มต้นนะคะ กำหนดค่าเริ่มต้นให้กับ total เหมือนแม่ให้เงินเรา 100 บาท สำหรับวันนี้นะคะ เราก็จะมีวันนี้ทั้งวันนี่ มีเงินอยู่ในกระเป๋านี่ เริ่มต้นอยู่ที่ 100 บาท แล้วทั้งวันเราจะใช้กี่บาทนะคะ ก็แล้วแต่ แต่ละคนแต่เริ่มต้นเรามี 100 บาท ใช่ไหมคะ ตอนนี้ครูกำหนดค่าเริ่มต้นให้กับ total นี่ มีค่าเป็น 0 นะคะ เริ่มต้นมีค่าเป็น 0 ทำงานไปเรื่อย ๆ total จะเปลี่ยนเป็นอะไรก็แล้วแต่เราสั่งให้มันมีค่าเป็นอะไร บรรทัดที่ 2 ที่เราเจอนี่ เราเจอ Loop for แล้ว ทำงานหลายรอบ เหมือนอย่างที่ครูถาม ทำงานกี่รอบนะคะ เราต้องหาคำตอบให้ได้แล้วทำงานกี่รอบ for i in range , (n i in range นะคะ ที่เราเจอไปเมื่อกี้นี้เอง ตัวนี้นะคะ วงเล็บเปิด แล้วก็ตัว n ตัวนี้อาจจะเป็นตัวเลขอะไรก็ได้เหมือนที่เราทำเมื่อกี้นี้ครูยังเปลี่ยนไปเยอะเลย 3 2 5 1 ถูกไหมคะ เพราะฉะนั้นแล้วนี่ n ตัวนี้เป็น n อะไรก็ได้ ให้นะคะ ถ้ามันอยู่ในขอบเขตของข้อมูล list ตัวเลขที่เรากำหนดมันก็จะทำงานบรรทัดที่ 3 ต่อนะคะ คือการบวกค่า Total เมื่อกี้เราเพิ่งทำไป ครูแทน n ตัวนี้ด้วย 3 เราต้องทำงานกี่รอบ range 3 ทำงานกี่รอบคะ ดูในกระดาษสิ ดูว่ามีไหม range 3 ที่เราทำไปเมื่อกี้ เราต้องทำงานกี่รอบคะ 3 ถูกไหม หาเจอไหม เจอที่เราเขียนไปเมื่อกี้ นี่ไงคะ ถ้าเรายังจำได้ นี่ไง Range 3 เราทำงานกี่รอบคะ 3 รอบ เพราะฉะนั้น ตอบครูได้แล้วว่าคำสั่งนี่จะต้องทำงานกี่รอบ 3 รอบ ใช่ไหม ดูจากไหน ดูจาก Range range ที่เรากำหนดให้นี่ range เราเป็นค่าอะไรได้บ้าง 0 1 2 เพราะฉะนั้นทำงานกี่รอบคะ 3 รอบ 3 รอบ เพราะฉะนั้น i มีค่าเป็นอะไรได้บ้าง i ตัวนี้มีค่าเป็นอะไรได้บ้างคะ มีค่า 0 1 2 ใช่ไหมคะ i ตัวนี้ สามารถมีค่าเป็น 0 1 2 นั่นหมายความว่า บอกว่าเราทำงาน 3 รอบใช่ไหมคะ ทำงานรอบที่ 1 มีค่าเป็นอะไร เป็น 0 รู้ได้อย่างนี่ไง เราเป็นคนลิสต์ค่าไว้อยู่แล้ว ทำงานรอบที่ 2 i มีค่าเป็นอะไรคะ เป็น 1 ทำงานรอบที่ 3 i มีค่าเป็น 2 ใช่ไหมคะ ตามนี้นะ ตามที่เราขยายบอกว่า range 3 มีค่าเป็นอะไรได้บ้าง 2 เห็นไหมคะ i มีค่าเป็นอะไรได้บ้าง0 1 2 แสดนี่มีค่าเป็น 0 1 2 นะคะแสดงว่ามันต้องทำงานทั้ง 2 บรรทัดนี้ใช่ไหมคะ มันต้องทำงานทั้งบรรทัดที่ 2 และบรรทัดที่ 3 ทำงานอย่างละ 3 ครั้ง หรือว่า 3 รอบ บรรทัดที่ 2 ก็คือตรวจสอบเงื่อนไข i นี่ก็คือต้องทำ 3 ครั้ง อันนี้คือบรรทัดที่ 3 ถูกไหมคะ อันนี้คือบรรทัดที่ 2 อันนี้คือบรรทัด 3 มันก็ทำงาน 3 ครั้งเหมือนกัน ถ้าครูเปลี่ยนดูนะคะ ถ้าครูเปลี่ยนจาก range ตัวนี้ ถ้าครูเปลี่ยน Range ตัวนี้นี่n n เป็น 2 ครูต้องทำงานกี่รอบ ครูเปลี่ยนให้ n ตัวนี้เป็ย ครูต้องทำงานกี่รอบคะ เป็น 2 ทำงานกี่รอบ เราทำงานกี่รอบนี่ range 2 เราทำงานกี่รอบคะ กี่รอบเอ่ย 2 รอบ นะคะ นี่ไง Range 2 i มีค่าเป็น 0 กับ 1 เพราะฉะนั้น เราทำงานกี่รอบคะ 2 รอบ n เป็น 2 เราทำงาน 2 รอบ n เป็น 3 เราทำงคะ 3 รอบ ถ้า n เป็น5 เราทำงานกี่รอบ n เป็น 5 เราทำงานกี่รอบคะ 5 รอบใช่ไหม n เป็น 1 เราทำงานกี่รอบ 1 รอบ ก็คือ i เป็น 0 ถูกไหม ทำงานแค่ 1 รอบ i เป็น... พูดผิด n เป็น 10 เราต้องทำงานกี่รอบ กี่รอบคะ 10 รอบตามที่เรา เขียนเลยนี่ n สมมติแทน n เป็น 10 เพราะฉะนั้น ต้องทำงานทั้งหมด 10 รอบ เราสามารถบอกได้ไหมคะ ว่าเมื่อ n ใด ๆ จะทำงาน n n ครั้ง ได้ใช่ไหม เพราะเมื่อกี้ที่เราทำกันนี่ n เป็น 3 ก็ 3 รอบ n เป็น 2 ก็ 2 รอบ n เป็น 5 ก็ทำงาน 5 รอบ n เป็น 10 ก็ ทำงาน 10 รอบ เพราะฉะนั้น n เป็น 999 ต้องทำงานกี่รอบ ถ้า n เป็น 999 ต้องทำงานกี่รอบคะ ทำงาน ทำงานกี่รอบเอ่ย 999 รอบใช่ไหม n เป็น 1 ก็ทำงาน 1 รอบ เพราะฉะนั้น เราจึงบอกได้ว่าการทำงาน n ครั้งนี่ หมายความว่าไม่ว่าจะแทนด้วย n เป็นตัวเลขอะไรก็ตาม ก็จะทำงาน n ครั้ง เราจึงสามารถสรุปได้นะคะ ว่าในบรรทัดที่ 2 นี่ เราจะทำงาน n ครั้ง บรรทัดที่ 3 ก็ทำงาน n ครั้งนะคะ แต่ในบรรทัดที่ 1 นี่ มันอยู่นอกลูปใช่ไหมคะ มันไม่ได้อยู่ใน Loop Total นี่มันอยู่ข้าง เข้ามาแต่การกำหนดค่าตัวแปรข้างบน Total = 0 นี่มันอยู่นอกลูป มันทำงานกี่ครั้ง 1 ครั้ง เราจึงสามารถเขียนข้างหลังได้ว่า บรรทัดที่ 1 ทำงาน 1 ครั้ง บรรทัดที่ 2 ทำงาน n ครั้ง บรรทัดที่ 3 ก็ทำงาน n ครั้งนะคะ เราจะหาค่า Big-O ทำอย่างไร เอาสิง่ที่เราเขียนด้านหลังนี่ เอามาบวกกัน ตัวแรกเป็น 1 ตัวที่ 2 เป็นอะไรคะ เป็น n ตัวที่ 3 ก็เป็น n บวกกันได้เท่าไหร่ n + n ข้างหน้า n ตัวนี้ ดูนะ ข้างหน้า n ตัวนี้มันคือเลข 1 นะ ข้างหน้า n คือ เลข 1 บวกกันแล้วได้กี่ n 1 n + 1 n ได้เป็น 2 n อันนี้มัน 1 เฉย ๆ ไหม ใช่ไหม ไม่ได้มีตัวอื่นเลยนะคะ ก็คือ 1 มันไม่มีตัวไหนบวกเลยก็บวก 1 อันนี้มันบวกด้วยกันได้เพราะมันเป็นค่า n มันเลยกลายเป็น 2 n มันบวกไม่ได้ เพราะมันไม่มี n อะไรเลย มันเอาเข้ามารวมกับพวกนี้ไม่ได้ เราจึงสรุปได้ว่าค่า Big-O เราสนใจเฉพาะค่าโดยตัดสัมประสิทธิ์ออก เพราะฉะนั้น ก็เหลือแค่ 1 นะคะ เพราะฉะนั้น Big-O ก็คือ on โปรแกรม นี้จะรันในเวลา O nเดี๋ยวครูให้เบรกก่อนนะ เบรก 5 นาทีนะคะ เดี๋ยวเราจะมาหัดทำด้วยกันนะ มีโจทย์ 1 โจทย์ตัวนี้หลังจากเบรกแล้วนะ เราจะมาทำโจทย์นี้ด้วยกันนะคะ (อาจารย์สุธาสินี) คราวนี้มาดูต่อ โจทย์ตัวนี้นะคะ เหมือนถ้าเราดูนะ ตัวโปรแกรมบันทัดที่ 1 บรรทัดที่ 2 บรรทัดที่ 3 นี่ เหมือนกับโจทย์ข้อนี้เลย เหมือนกันเลย แต่สิ่งที่ต่างกันคืออะไร คือ จำนวนตัวแปร ค่านะ ค่าของตัวแปร n นะคะ จากข้อนี้ ครูบอกว่า ครูให้ n = 2 ครูแทน n ตัวนี้ด้วย 2 นะ ขออภัยแป๊บหนึ่งต้องเขียนเลข 2 ครูแทน n ด้วย 2 นะคะ เพราะฉะนั้นครูถามว่า บรรทัดนี้ทำงานกี่รอบ จำนวนกี่รอบ เมื่อเราแทน n ด้วย 2 เมื่อแทน n ตัวนี้ด้วย 2 range 2 ตัวนี้ทำงานกี่รอบ ทำงานกี่รอบคะ คนอื่นทำงานกี่รอบเอ่ยrange 2 มีค่าเป็นอะไรได้บ้าง ดูที่เราเขียนเมื่อกี้นะ range 2 มีค่าเป็น 0 แล้วก็ 1 เพราะฉะนั้น เราทำงานกันกี่รอบ 2 รอบใช่ไหมคะ เราทำงานกัน 2 รอบเพราะฉะนั้น i ตัวนี้ มีค่าเป็นอะไรได้บ้างi ตัวนี้มีค่าเป็นอะไรได้บ้างi มีค่าเป็น 0 แล้วก็ 1 ใช่ไหมตาม ตามนี้เลย นี้เลย เห็นไหมคะ อันนี้ทุกคนแยกได้อยู่แล้วว่า Range 2 คืออะไร เพราะฉะนั้น ค่า i มันก็ต้องมีค่าตามที่เราเขียนข้างบน ถูกไหมคะ เป็น 0 กับ 1 แค่นั้นนะ เป็น 0 กับ 1 มันทำเงื่อนไขตรงนี้ด้วยใช่ไหมคะ เราก็ติ๊กถูกเลย จำนวนครั้งที่ทำตรงนี้ทำกี่รอบคะ 2 รอบ เราก็ใส่ 2 รอบดูนะคะ นี่ครูจะมีกระดาษให้ทำต่างหาก เป็น 2 รอบนะ เราทำ 2 รอบ เพราะฉะนั้นเรามองด้านบนสิเมื่อครูแทน n = 2 2 ตัวนี้เท่ากับค่า n เลยนะ เพราะฉะนั้น ครูก็เลยสามารถเขียนตรงนี้ได้เป็นเลข n นี่เลย 2 นี่เห็นไหม n = 2 นี่สามารถแทนด้วย n ได้ ครูก็ขึ้นมาดูข้างบนนะคะ และการทำงานแต่ละครั้งทำงานกี่รอบ บรรทัดที่ 1 ทำงาน 1 รอบใช่ไหม มันไม่ได้อยู่ใน Loop น่ะต้องทำงานแค่ 1 ครั้งเท่านั้นบรรทัดที่ 2 ทำงานเท่าไหร่คะ ทำงาน 2 รอบ แต่เมื่อแทนด้วย n ใด ๆ มันก็คือทำงาน n ครั้ง นะคะ บรรทัดที่ 3 คือ n ครั้งเหมือนกัน หาค่า fn ทำอย่างไร เอาตัวนี้ 3 ตัวนี้มาบวกกัน เป็น 1 + n แล้วก็บวก n ได้เท่าไหร่คะตรงนี้ กี่ n 1 n 2 n ได้ 2 n แล้วก็บวก 1 ใช่ไหมคะ มันมี 1 ว่าตรงนี้ จะมี 1 อีกตัวหนึ่งตรงนี้ เพราะฉะนั้น Big-O คืออะไร ตัดสัมประสิทธิ์ออก ถูกไหมคะ เอาค่า n ที่มากที่สุด คือ ตัวนี้ ก็จะกลายเป็น O n นะคะ ก็จะเป็น o nอันนี้เราลองเริ่มค่า range อย่างที่เราเขียนไปนะ range ตัวนี้ที่เราทำไป เริ่มจาก 0 ถ้าเราไม่เริ่มจาก 0 นี่ เราต้องกำหนดค่าเริ่มต้นใน Range ให้แล้วเราจะทำงานกี่ครั้งนะ เราดูนะ อันนี้ range 1-4 ทำงาน 3 ครั้งถูกไหมคะ range 3-7 3, 7 , 7 ทำงาน 4 ครั้งหรือทำงาน 4 รอบคราวนี้มาดูโจทย์นี้บ้าง ตรงนี้นะคะ ครูมีตัวอย่างให้ดูข้างบนนี้ด้วยนะตรงมุมขวา คำสั่งแรกนี่ range 1,4 ทำงานกี่ครั้งคะ ทำงานกี่ครั้ง ทำงานกี่รอบ กี่รอบตัวนี้ ๆ Range 1 ถึง 4 ทำงานกี่รอบ 3 รอบเพราะมีตัวเลขกี่ตัว 3 ตัว บรรทัดที่ 2 ทำงานกี่รอบ 2 รอบ นะคะ อันนี้คือ 2 รอบ อันนี้คือ 3 รอบนะ ร เรือ รอบนะคะ ในโจทย์นะคะ ในโจทย์ คำสั่งคล้าย ๆ เดิมเลยสิ่งที่ต่างกันคืออะไร For i in range , วงเล็บเปิด1,n เห็นไหมคะ เเริ่มเห็นความต่างแล้ว ค่า i เรานี่ไม่ได้เริ่มต้นจาก 0 แล้วเราเริ่มต้นที่เลขอะไรคะ เลข 1 ถูกไหม เริ่มต้นจากเลข 1 ถูกไหมคะเพราะฉะนั้น ถ้าครูกำหนดให้ n = 3 ครูเปลี่ยนตรงนี้เป็น 3 บรรทัดที่ 2 ทำงานกี่รอบ ครูเปลี่ยนค่า n for i in rang 1,3 ครูแทน n ด้วยเลข 3 เห็นไหมคะ range (1,3 บรรทัดที่ 2 นี่ ค่า i มีค่า เป็นอะไรได้บ้าง และทำงานกี่รอบ เห็นไหมนี่ไงที่เราเขียนข้างบนไง 2 รอบนี่ไง 1,3 เหมือนกันเลย ค่า i ที่เป็นไปได้คือเลขอะไรคะเลข 1 แล้วก็เลข 2 มันทำงานกี่รอบ 2 รอบ ก็มันมีเลข 2 ตัว มันก็ทำงาน 2 รอบใช่ไหมคะ เพราะฉะนั้น มันทำงาน 2 รอบ หรือ 2 ครั้งนะคะ ค่า i ที่เป็นไปได้ คือ 1 แล้วก็ 2 ใช่ไหมคะ แล้วมันก็ทำงาน ติ๊กถูกได้เลย ทำงานทั้ง 2 บรรทัดนี้ ก็คือทำงาน 2 ครั้ง ครูจะแปรงนะคะ เมื่อเป็น n ใด ๆ เมื่อเป็น n ใด ๆ สังเกตนะคะ ตัวนี้คือเลข 4 นะ มันคือค่า n ถ้าครูแทน n เป็น 4 ทำงานกี่รอบ ตรงนี้ทำงานกี่รอบคะ 3 รอบ ทุกคน 1, 5 ทำงานกี่รอบคะมีค่าที่เป็นไปได้คือ 1 2 3 แล้วก็ 4 ถูกไหมคะ ใช่ 4 รอบ n เป็น 4 ทำงาน 3 รอบ n เป็น 5 ทำงาน 4 รอบ เห็นไหมคะ ว่าจะนวนรอบมันลดลง 1 เมื่อทเียบกับ n เพราะฉะนั้น เมื่อเราเขียนแทนสมการมันเป็น 2 ถูกไหมทำอย่างไรถึงจะได้เลข 2 n - 1 n - 1 ถูกไหม n เราคืออะไร n ที่ครูกำหนดให้เป็น 3 - 1 เป็นเท่าไหร่คะ เป็น 2 ตรงกันเพราะฉะนั้น เมื่อแทน n ด้วย 2 ก็ทำงาน 1 ครั้ง หรือแทน n ด้วย 4 ก็จะทำงาน 3 ครั้ง ดังนั้น เมื่อแทน n ใด ๆ จะทำงาน n - 1 ครั้ง เมื่อ Code ตัวนี้นะคะ เมื่อโปรแกรมตัวนี้ ครูแทน n ด้วย 10 ครูแทน n ด้วย 10 จะทำงานกี่รอบ 9 รอบ คือ 10 - 1 ใช่ไหมคะ คือ 9 รอบ เพราะฉะนั้น เราจึงแทนจำนวนตัวแทนของการทำงานนะคะ บรรทัดที่ 1 คือทำ 1 ครั้ง 1 รอบ เพราะมันไม่ได้อยู่ในลูป มันเลยทำงาน 1 ครั้ง บรรทัดที่ 2 มันทำงาน n - 1 ครั้ง เมื่อ n ใด ๆ มันทำ n-1 ครั้งนะคะ บรรทัดที่ 3 ก็เหมือนกัน ก็เป็น n - 1 มันจะต้องเท่ากันนะ อันนี้ให้ดู เขียนเหมือนกันนะคะ มาหาค่าฟังก์ชัน ก็เอาตัวข้างหลังมาบวกกัน 1 + (n - 1) Zn- 1 ) นะคะ คำตอบที่ได้ครูกระจายตัวนี้นะคะ จะได้เป็น 1 + n - 1 + n -1 +n 1 n +1n ได้เป็น 2n 1 - 1 - 1 1 กับ -1 gsเหลือ - n ก็เป็น 2 -1 เพราะฉะนั้น Big-O ก็คือเอา n ที่มากที่สุด ก็คือ n ตัวนี้ แล้วตัดสัมประสิทธิ์ออก ก็จะได้เป็น O n ค่อย ๆ ดูนะ ถ้าว่าเริ่มต้นเรารู้ว่าทำงานกี่นอบนะ ขอให้นับให้ได้ว่า i นี่มีค่าเป็นอะไรได้บ้าง แล้วมันทำงานทั้งหมดกี่รอบโอเค เข้าใจตัว Basic ตัวนี้ก่อนก็ได้นะคะ อย่างนี้ดีกว่า ก่อนที่ครูจะไป range สัญลักษณ์ตัวอื่นเป็น n-1 n+เดี๋ยว ๆ ครูแบบฝึกหัดให้ทำก่อนนะคะ เดี๋ยวลองทำตัวนี้ดูก่อน ครูมีชีตแจกให้ในห้องนะ มันจะเป็นคำอธิบายสิ่งที่สอนวันนี้แหละ นะคะ โจทย์ตัวเป็น Range n กับ 1,n นะ ที่เราเรียนผ่านไปเมื่อกี้นี้ 2 โจทย์นะคะ ครูจะเขียนอธิบายไว้ในชีตที่แจกเพิ่ม สามารถนั่งดูตัวนีัได้นะ เดี๋ยวครูให้ทำแบบฝึกหัดตรงนี้ก่อนเลย จะได้รู้ว่าทำได้ไหมนะคะ คนละ 1 แผ่นแล้วเขียนลงไปในนี้เลยนะคะ ลองทำในแบบฝึกหัดที่ครูแจกให้นะคะ แล้วลองดูกระดาษเพิ่ม หรือในสไลด์ที่เรียนกันเมื่อกี้ โจทย์น่าจะเป็นตัวนี้ โอเค ได้ โจทย์จะคล้าย ๆ กับตัวนี้เลย โจทย์จะคล้าย ๆ กับสิ่งที่ครูโชว์บนกระดานนี้บนสไลด์ ค่อย ๆ ดูนะคะ ลองดู แล้วดู Sheet ประกอบ แล้วลองทำนะคะ ลองทำอย่างไร ครูให้โจทย์ตัวนี้มา ตัวโค้ดข้างบน แต่ครูเปลี่ยนค่า nmครูกำหนดให้ n = 4 อันนี้ครูเปลี่ยนให้ n = 4 เพราะฉะนั้น ค่า i นี่มันเป็นค่าอะไรได้บ้าง เขียนให้ครบรู้ได้อย่างไร ถ้าเรายังจำไม่ได้ เราก็มาเขียนตรงนี้ก่อนก็ได้นะคะ range (4 มันมีค่าเป็นอะไรได้บ้าง พอเราเขียนลิสต์ตรงนี้แล้ว เราก็เอามาเขียนในคอลัมที่ 1 มีค่าเป็นอะไรได้บ้าง แล้วก็ติ๊กถูกเลย เพราะว่าติ๊กเครื่องหมายถูกคือมันทำงานที่คำสั่งนั้น แล้วนับ มันทำงานกี่ครั้ง แลเวก็นับมันมีเครื่องหมายถูกกี่ครั้ง แล้วเทียบว่าไอ้ตัวที่เรานับได้นี่ เมื่อเทียบกับ n แล้วนี่ มันควรแทนด้วย n อะไร n + 1 n -1 หรือ n เฉย ๆ จากนั้นเอากลับขึ้นมาเขียนด้านบนเพื่อบอกว่าแต่ละบรรทัดทำงานกี่ครั้งหรือกี่รอบ ได้แล้ว มาหาค่า ฟังก์ชั่น เอาแต่ละตัวมาบวกกัน แล้วก็หาค่า Big-O เป็นตัวสุดท้าย ลองทำดูสิคะ ไม่ได้เดี๋ยวบอกเดี๋ยวครูลองเดิน เดี๋ยวครูฝากอันนี้นะเอกสารที่ครูให้ไปมีอยู่ 3 แผ่นนะคะ มีอยู่ 3แผ่นมีอยู่ 3 ตัวอย่สานะ ฝากไปอ่านแล้วก็ทำความเข้าใจอีกครั้งหนึ่งนะคะ ครูฝากไปอ่านแล้วก็ทำความเข้าใจอีกครั้งหนึ่งนะคะ มีอยู่ 3 ตัวอย่างด้วยกันนะคะ เดี๋ยวเรามาดูด้วยกันอีก 1 ข้อ เมื่อกี้คือ คือเราสามารถนับจำนวนรอบได้ เราสามารถรู้ได้ว่าค่า i นี่เป็นจำนวนอะไรได้บ้างและรู้ว่า Loop for จะทำงานกี่รอบ อันนี้ทุกคนทำได้นะคะ แต่อาจจะสับสนกับการ แปลงให้เป็นค่า n นะ เดี๋ยวค่อย ๆ ดูนะคะ อาจจะสับสนเรื่องของการแปลงให้เป็นค่า n พอเราแปรงให้เป็นค่า n กลับขึ้นไปดูตัว Code อีกครั้งหนึ่งและเขียนนะคะ บอกว่าบรรทัดบรรทัดแรกทำงานกี่ครั้ง บรรทัด ที่ 2 ทำงานกี่ครั้ง และบรรทัดที่ 3 ทำงานกี่ครั้งแล้วจึงเอาจำนวนครั้งเหล่านั้นมาบวกกัน ตรงค่าฟังก์ชันตรงนี้ ตัวนี้มากจากไหน มาจากจำนวนครั้งของการทำงานในแต่ละคำสั่งเห็นไหม บรรทัดแรกทำงาน 1 ครั้ง บรรทัดที่ 2 เราดูจากตรงนี้ก็ได้ ทำงานเหมือนกัน ทำงาน n ครั้ง ก็ n ครั้ง ก็เลยเอาทั้ง 3 บรรทัดมาบวกกัน โอเค คราวนี้มาดูโจทย์นี้พร้อมกัน มาดูโจทย์บนกระดานพร้อมกัน ครูมี 3 บรรทัดเหมือนกัน โจทย์มี 3 บรรทัด โค้ดน่ะมีอยู่ 3 บรรทัดใช่ไหมคะ คล้าย ๆ ของเดิมเลยนะ แต่สังเกตเห็นไหมคะ ว่าตรง range ครูใช้ Range ( n + 1 )นะคะ วงเล็บ n+1 เช่น ครูกำหนดให้ n = 3 เพราะฉะนั้น range ตรงนี้ มันคือ 3 + 1 เป็น range 4 ใช่ไหมคะ range (4) ค่าที่เป็นไปได้จะมีทั้งหมด 4 ค่า อันนี้ตามที่เราเข้าใจ range 4 จะเริ่มต้นจาก 0 วงเล็บ 1 0 1 2 3 เป็นลิสต์ข้อมูลนะคะ มีอยู่ทั้งหมด 4 ตัว เราต้องทำงานกี่รอบ 4 รอบ ใช่ไหมคะ เขามีข้อมูลอยู่ 4 ตัวจะต้องทำงานทั้งหมด 4 รอบ i เป็นอะไรได้บ้าง เป็น 0 ตามที่เราเขียนด้านบนนี้เลย 0 1 2 3 i จะมีค่าที่เป็นไปได้อยู่ 4 ค่าด้วยกัน คือ 0, 1, 2, 3 จากนั้น เราหาจำนวนรอบใช่ไหมคะอันนี้คือค่าที่เป็นไปได้ ตรงนี้เราก็ติ๊กถูกหมดเลย เพราะฉะนั้นจำนวนครั้งที่ทำคือ 4 ครั้ง บรรทัด total ก็ทำ 4 ครั้งคำสั่ง Total นี่จะทำอยู่ 4 ครั้ง คำสั่ง for i in range ก็ทำอยู่ 4 ครั้ง แล้วเมื่อแทนด้วย n ใด ๆ เห็นไหมคะ n เดิมเราเป็น 3 ทำอย่างไรจึงจะเป็น 4 ได้ ก็ต้องทำอย่างไรคะ บวก 1 ใช่หรือเปล่า 3 + 1 เป็น 4 เท่ากับข้างบนเลยตรงนี้นะคะ เป็น 3 + 1 ทำไมเท่ากับ 4 เพราะฉะนั้นตรงนี้กล่นเป็น N เพราะเมื่อแทน n ด้วย 3 3+1 เท่ากับ 4 มันเท่ากับตัวข้างบนเลย เพราะฉะนั้น เราจึงบอกได้นะคะ ว่าคำสั่งแต่ละคำสั่ง ในโค้ด 3 บรรทัดนี้จะทำกี่รอบ บรรทัดที่ 1 ทำงาน 1 รอบ ถูกไหมคะ เราเขียนไว้ก่อน เชียนไว้ก่อนมันอยู่นอก Loop ทำงาน บรรทัดที่ 2 ทำงานกี่ครั้งนี่ มันทำงาน n+1 ครั้ง เราก็เขียนไว้ข้างหลังก่อนถูกไหมคะ บรรทัดที่ 3 ทำงานกี่ครั้งนี่ไง n+1 ครั้ง เมื่อเราหาค่า n ตรงนี้ได้แล้ว ย้อนกลับขึ้นไปเขียนตรงหลังคำสั่งแต่ละคำสั่งด้วย อันนี้คือ ทำงาน n+1 ครั้งอันนี้ทำงาน n+1 ครั้ง เราลองแทนค่า n ด้วย 3 เห็นไหมคะ ถ้าครูแทน n ด้วย 3 เห็นหรือเปล่า คือทำงาน 4 ครั้ง ตรงกันเลย เห็นไหมคะ ค่านี้คือทำงาน 4 ครั้ง เสร็จครูจะหาค่า fn ก็เอาแต่ละบรรทัดมาเขียน 1 + n + 1 + n + 1 นะคะ ครูก็กระจ่ายค่าออกมาก 1 + n + 1 จะได้เท่ากับ 1 n + 1 n ก็กลายเป็น 2 n นะคะ 1 + 1 +1 ก็กลายเป็น 3 ค่า Big-O เลก็คือตัวนี้ ก็เลยได้เป็น on นะคะ เราเลือกค่า n ที่มากที่สุดก็ตัวสุดท้าย ก่อนเลิกนะ เดี๋ยวช่วยครูทำหน่อยก่อนเลิก ครูมีโจทย์ Range ( n-1)ให้ n = 3 ช่วยครูหน่อยหาว่าค่า i ที่เป็นไปได้ จะมีค่าเป็นอะไรได้บ้าง 3 - 1 ได้เท่ากับเท่าไหร2 เพราะฉะนั้นค่าที่เป็นไปได้เป็นอะไรบ้างคะ เริ่มต้นที่ 0 เพราะว่าไม่มีอะไรนี่ ครูไม่ได้บอกว่าเริ่มต้นที่เท่าไร ถูกหรือเปล่า ครูไม่ได้กำหนดก็เริ่มต้น 1 มี 2 ไหมไม่มีใช่ไหมคะ range (2) จะได้ค่าเป็น 0 กับ 1 จะได้กี่รอบ 2 รอบถูกไหม ทำงาน 2 รอบ ตอนนี้ทุกคนทำงาน 2 รอบ ตอนนี้ทุกคนรู้ว่าทำงาน 2 รอบ ติ๊กถูกไปก่อน ใ่ไหมคะ ค่าที่ได้คือ 0 กับ 1 ค่า i ที่ได้ 1 ทำงาน 2 รอบ n ต้องทำ n ต้องลบเท่าไหร่คะ ถึงจะเป็น 2 ตอนนี้ n เป็น 3 3 - อะไร 2 3 - 1 เท่ากับ 1 เพราะฉะนั้นแทน 3 ก็คือ n ถูกหรือเปล่า ก็กลายเป็น n - 1 โอเค ทันไหมคะ n - 1 มาจากไหนเดิม n เท่ากับ 3 ถูกหรือเปล่า ทำอย่างไร ให้ n = 2 n-1 มันก็เลยจะเป็น = 2 เพราะฉะนั้น บรรทัดที่ 1 ทำงาน 1 ครั้ง บรรทัดที่ 2 ทำงาน n - 1 ครั้ง บรรทัด 3 ก็จะเป็น n - 1 ครั้งตัวเลขมาบวกกัน 1 + n - 1 + n - 1 เท่ากับเท่าไหร่ครูกระจายก่อน 1 + n - 1 + n - 1 = 2 n ตัวนี้ตัดได้ถูกไหม 1 - 1 ได้ 0 แล้วก็ - 2 เพราะฉะนั้น Big-O เท่ากับอะไรคะon มีใคร งง ไหม เริ่ม งง ตรงไหนไหม ตรงไหนไหมคะ ิบาสเดี๋ยวกลับไปทวนอีกครั้งหนึ่งนะคะ เดี๋ยวพรุ่งนี้ครูจะฝากแบบฝึกหัด เดี๋ยวครูจะพรินต์แบบนี้มาให้ ให้ลองทำอีกนะสัก 2 ข้อ นะคะ คนละ 1 แผ่นด้านหลัง เดี๋ยวครูจะเอาไปฝากไว้ให้ที่ DSS พรุ่งนี้เช้า พรุงนี้เช้าเสร็จแล้ว เสร็จแล้วฝากไปอ่านชีตนี้ดีกว่า คืนนี้ไปอ่าชีสที่ครูให้หน่อยนะ ไม่เข้าใจ ถามพี่เขานะคะ พรุ่งนี้หลังจากที่อ่านมาแล้วนี่ ไม่เข้าใจประเด็นตรงไหน ไม่เข้าใจบรรทัดไหนให้วงนะ วงมาเลย เดี๋ยวให้พี่อุ๋ยเขาบอกให้ วง ตรงที่ เราไม่เข้าใจนะคะ เสร็จแล้วนี่ เราทำแบบฝึกหัดนะคะ เดี๋ยวครูให้โจทย์ 2 โจทย์ เดี๋ยวครูทำแบบฝึกหัด แล้วก็ลองทำดูนะคะ ว่า ถ้าครูกำหนดค่า n มาให้แบบนี้จะทำงาน... มีค่า i ที่เป็นไปได้มีค่าอะไรบ้างแล้วทำงานกี่รอบ เอาเริ่มต้นทำงานกี่รอบให้ได้ก่อนแล้วกันนะคะ ว่าน่าจะได้แล้วล่ะ อาจจะมาลงตาราง อาจจะสับสนนิดหน่อยนะคะ ต้องลองทำแบบฝึกหัดนะคะ มันน่าจะเข้าใจมากขึ้น เดี๋ยวครูเช็คชื่อหน่อย อุ๋ยศิริลักษณ์ (อาจารย์สุธาสินี) อ๋อ อดิศร มาค่ะ นพกิต พงษ์พร จันทการณ์ ไหน กัญญานัต ธัญญารัตน์ ติด COVID ค่ะ วลิศา ภัทรดา อ๋อ เทพอักษร ค่ะ พณพัฒน์ภากร อ๋อเป็น ค่ะ เดี๋ยวเจอกันสัปดาห์หน้านะ ค่ะ ค่ะสวัสดีค่ะ เรียบร้อยแล้วค่ะ ขอบคุณค่ะล่าม