สำนักงานอัตโนมัติ (Office Automation)

Download Report

Transcript สำนักงานอัตโนมัติ (Office Automation)

By Juthawut Chantharamalee
วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122202
1
หลักนามธรรม(Abstraction)
หลักนามธรรม ถือเป็ นหลักการทีส่ าคัญหลักการหนึง่ โดยคาวาา
“นามธรรม Abstract” จะทาให้ทุกสิง่ ในโลกแหางความเป็ นจริงดูงาายดาย
ขึน้ ด้วยการพิจารณาบางสิง่ แยกออกจากความเป็ นจริงของสิง่ เหลาานัน้
โดยอธิบายวาาสิง่ ๆนัน้ ทาอะไร ไมาต้องมุางเน้นในรายละเอียดวาาต้องทางาน
อยาางไร ดังนัน้ การคิดด้วยหลักนามธรรมนี้ จึงทาให้เราสามารถคิดวิธกี าร
แก้ปญั หาด้วยการตัดทอนสิง่ ทีซ่ บั ซ้อน หรือรายละเอียดปลีกยาอยทีไ่ มา
จาเป็ นออกไปได้
วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122201
2
อัลกอริทมึ กับความเป็ นนามธรรมโดยธรรมชาติ
(The Abstract Nature of Algorithm)
อัลกอริทมึ คือขัน้ ตอนวิธที ใี่ ช้สาหรับแก้ปญั หา โดยสามารถ
สือ่ ออกมาในรูปแบบของภาษาพู ดหรือภาษาธรรมชาติ
(Natural Language) และหากมีการนาไปใช้เพือ่ แก้ปญั หา
ทางคอมพิวเตอร์ ก็จะสือ่ อกมาในรูปแบบของประโยค
ภาษาอังกฤษทีม่ คี วามใกล้เคียงกับชุดคาสัง่ โปรแกรมทีเ่ รียกวาาชู
โดโค้ด ทีใ่ ช้เป็ นตัวกลางสือ่ สารอัลกอริทมึ นัน้ ๆ
วิชาโปรแกรมประยุกต์ดา้ นการจัดการสานักงานอัตโนมัติ รหัส 4122602
3
ในความเป็ นจริง อัลกอริทมึ มีความเป็ นนามธรรมอยูาในตัวโดย
ธรรมชาติอยูาแล้ว อัลกอริทมึ สามารถทาให้เป็ นรูปธรรมได้ด้วย
การผาาน “ตัวแทน Representation” เพือ่ นาเสนอ
อัลกอริทมึ เหลาานัน้ ดังนัน้ ความสาคัญอยูาทวี่ าา ควรแยกความ
แตกตาางระหวาางอัลกอริทมึ และตัวแทนออกจากกัน เชาน
เรือ่ งราวในนวนิยาย
(Strory)
หนังสือ
(Book)
นามธรรมหรือแนวคิด
ตัวแทนทางกายภาพ
วิชาโปรแกรมประยุกต์ดา้ นการจัดการสานักงานอัตโนมัติ รหัส 4122602
4
ดังนัน้ อัลกอริทมึ ก็คอื กระบวนการทีน่ าไปใช้สร้างโปรแกรม
เพือ่ ทางานและแก้ปญั หาตามทีเ่ ราต้องการ ในขณะทีต่ วั แทนก็คอื
โปรแกรมทีไ่ ด้รบั การพัฒนาขึน้ จากอัลกอริทมึ นัน้ หรือกลาาวอีก
นัยหนึง่ ก็คอื โปรแกรมก็คอื ตัวแทนของอัลกอริทมึ และเมือ่
โปรแกรมได้รบั การพัฒนาขัน้ มาภายในโปรแกรมก็จะประกอบไป
ด้วยหลายๆ โปรเซสด้วยกัน
ตัวแทนอัลกอริทมึ
(Program)
วิชาโปรแกรมประยุกต์ดา้ นการจัดการสานักงานอัตโนมัติ รหัส 4122602
กิจกรรมทีเ่ อ็กซีควิ ต์
อัลกอริทมึ นัน้
(Process)
5
3.ซูโดโค้ดไมาขน้ ึ กับภาษาคอมพิวเตอร์ภาษาใดภาษาหนึง่ แตา
สามารถแปลงเป็ นภาษาคอมพิวเตอร์ เชาน ภาษา PASCAL, C
หรือ C++ ได้งาาย
4.การเขียนซูโดโค้ดจะเขียนมุางเน้นประโยคกิจกรรมทีใ่ ช้ในการเอ็กซี
คิวต์โปรแกรมเป็ นสาคัญ โดยสามารถสร้างประโยคคาสัง่
เรียงลาดับ (Sequence) กาหนดทางเลือก (Selection) และ
การทางานเป็ นรอบ (Iteration)
วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122201
6
Algorithm sample (pageNumber)
This algorithm reads a flie and prints a report.
pre
pageNumber passed by reference
post Report Printed
pageNumber contains number of pages in report
Return Number of lines printed
1 loop (not end of file)
1 read file
2 if (full page)
1 increment page number
2
write page number
3 end if
4 write report line
5 increment line count
2 end loop
3 Return line count
end sample
อัลกอริทมึ ที่ 2.1 ตัวอยาางซูโดโค้ดการอาานข้อมูลในไฟล์เพือ่ พิมพ์รายงาน
จากตัวอยาางอัลกอริทมึ ที่ 2.1 ทีน่ าเสนอในรูปแบบของชูโดโค้ดนัน้ จะทาการ
อธิบายในแตาละหัวข้อดังรายละเอียดตาอไปนี้
วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122202
7
สาวนหัวของอัลกอริทมึ (Algorithm Header)
แตาละอัลกอริทมึ จาเป็ นต้องเริม่ ต้นด้วยสาวนหัว หรือมักเรียกทับศัพท์วาา
เฮดเดอร์ (Header) ทีม่ ไี ว้เพือ่ กาหนดชือ่ อัลกอริทมึ นอกจากนีย้ งั ใช้
อธิบายรายละเอียดเกีย่ วกับพารามิเตอร์ (Parameters) รวมถึงเงือ่ นไข
กาอน (Preconditions) เงือ่ นไนหลัง (Postconditions) สิง่ เหลาานีถ้ อื
วาาเป็ นสิง่ สาคัญ เพราะวาาโปรแกรมเมอร์จะรับทราบข้อมูลรายละเอียดภายใน
อัลกอริทมึ นีจ้ ากเฮดเดอร์ และนาอัลกอริทมึ ไปประยุกต์ใช้เพือ่ เขียนการ
โปรแกรมตาอไป
วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122201
8
จุดประสงค์ เงือ่ นไข และการรีเทิร์นคาา
(Purpose, Conditions and Return
สาหรับประโยคสัน่ ๆ ทีอ่ ธิบายถัดจากบรรทัดชือ่ ของอัลกอริทมึ ก็คอื
จุดประสงค์ของอัลกอริทมึ ทีม่ ไี ว้เพือ่ อธิบายในเรือ่ งทัว่ ไปของการ
ประมวลผลในอัลกอริทมึ นัน้ แตาไมาได้หมายความวาาให้อธิบายรายละเอียด
ทัง้ หมดของกระบวนการวาามีการทางานอยาางไร จุดมุางหมายของ
อัลกอริทมึ ที่ 2.1 คงไมาใชาการแสดงสถานะไฟล์ทเี่ ปิ ดใช้งาน หรือจะต้อง
พิมพ์รายงานอยาางไร แตาจุดประสงค์แท้จริงของอัลกอริทมึ ก็คอื ต้องการ
อาานไฟล์เพือ่ นามาพิมพ์รายงานเทาานัน้
วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122201
9
สาวนบรรทัดถัดไป จะแสดงเงือ่ นไขกาอน (Preconditions) ซึง่ ใช้ชอื่ ยาอวาา
Pre โดยอัลกอริทมึ ที่ 2.1 นัน้ มีการกาหนดให้ PageNumber เป็ นคาา
เริม่ ต้นของเงือ่ นไขกาอน ดังนัน้ เมือ่ มีการเรียกใช้งานอัลกอริทมึ sample
จึงต้องพารามิเตอร์เลขหน้า (pageNumber) มาด้วย โดยพารามิเตอร์
pageNumber ถูกกาหนดให้สางผาานคาาแบบ passed by reference
แตาอยาางไรก็ตาม ในกรณีทไี่ มามเี งือ่ นไขกาอน ก็สามารถเขียนให้อยูาในรูปแบบ
ดังตาอไปนี้
Pre
nothing
วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122201
10
และถ้าในกรณีทมี่ อี นิ พุ ตพารามิเตอร?หลายๆ ตัว เงือ่ นไขกาอนก็จะแสดง
รายะเอียดของพารามิเตอร์ในแตาละตัวด้วย โดยพิจารณาจากตัวอยาาง
ตาอไปนี้ คืออัลกอริทมึ การค้นหาข้อมูลในอาร์เรย์อยาางงาาย ซึง่ มีกาหนด
รายละเอียดในเฮดเดอร์ ดงั ตาอไปนี้
Algorithm search (list, argument, location)
Search array for specific item and return index location.
pre
list contains data array to be searched
argument contains data to be located in list
post location contains matching index
-or- undetermined if not found
Return true if found, false if not found
วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122201
11
ลาดับประโยคคาสัง่ (Statement Numbers)
ประโยคคาสัง่ จะมีลาดับกากับไว้ ซึง่ จะใช้เลขทศนิยม ด้วยการลาดับ
หมายเลขเพิม่ ขึน้ ทีล่ ะหนึง่ ภายในโครงสร้างของบล็อกนัน้ ๆ ซึง่ เทคนิค
ดังกลาาวจะทาให้งาายตาอการอาานและอ้างอิงประโยคคาสัง่ เชาน จากตัวอยาาง
อัลกอริทมึ ที่ 2.1 เลขลาดับ 1.1 ก็คอื ประโยคคาสัง่ read file ในขณะที่
เลขลาดับ 1.2.2 คือประโยคคาสัง่ write page heading และการใช้
เทคนิคเลขลาดับนีเ้ อง จึงทาให้สามารถอ้างอิงประโยคคาสัง่ ทีต่ ้องการ
เฉพาะได้ รวมถึงทาให้ประโยคคาสัง่ เหลาานัน้ งาายตาอการอาาน
วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122201
12
ตัวแปร (Variables)
ในความเป็ นจริงเราได้ไมาจาเป็ นต้องกาหนดตัวแปรทุกตัวทีใ่ ช้งานใน
อัลกอริทมึ ก็ได้ ด้วยการกาหนดชือ่ ทีส่ ามารถสือ่ ความหมายได้เข้าใจในตัว
ข้อมูลเอง หรือทีเ่ รียกวาา Intelligent Data Names อยาางไรก็ตาม ก็ม ี
กฎเกณฑ์การตัง้ ชือ่ ตัวแปรเพือ่ ใช้งานในอัลกอริทมึ อยูา 3 ประการด้วยกันคือ
1. หากเป็ นไปได้ไมาควรตัง้ ชือ่ เป็ นตัวอักขระตัวเดียว เชาน A, B, C
2. ไมาควรใช้คาทัว่ ไปทีม่ คี วามหมายเฉพาะ (Generic Names) มาตัง้ เป็ น
ชือ่ ตัวแปร เชาน count, sum, total, row, column, file เป็ นต้น
3. หากจาเป็ นต้องใช้คายาอก็ควรตัง้ ชือ่ ให้สอื่ ความหมายให้ด ี เชาน คายาอ
stdCnt ใช้แทน StudentCount
วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122201
13
การสร้างประโยคคาสัง่ (Statement Constructs)
สาหรับการสร้างประโยคคาสัง่ โดยเฉพาะชุดคาสัง่ สาหรับการ
โปรแกรมเชิงโครงสร้าง จะมีรูปแบบการสร้างเพียง 3 รูปแบบเทาานัน้ ซึง่
ประกอบด้วยประโยคคาสัง่ ตาางๆ ตาอไปนี้
1. แบบเรียงลาดับ (Sequence)
2. แบบเลือกทางาน (Selection)
3. แบบทางานซ้ า (Repetition/Loop)
วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122201
14
Start
T
Statement 1
F
Condition
Statement 2
Statement 1
Statement 2
Statement 3
Stop
(a) แบบเรียงลาดับ (Sequence)
(b) แบบเลือกการทางาน (Selection)
วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122201
15
F
Condition
Statement 1
F
T
Statement 1
Condition
T
(a) แบบทางานซ้ าด้วย DoWhile Loop
(b) แบบทางานซ้ าด้วย Repeat…Until Loop
วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122201
16
Algorithm deviation
pre
nothing
post average and numbers with their deviation printed
1 loop (not end of file)
1 read number into array
2 add number to total
3 increment count
2 end loop
3. set average to total / count
4 print average
5 Loop (not and of array)
1 set devFromAve to array element - average
2. print array element and devFromAve
6. loop
end deviation
อัลกอริทมึ ที่ 2.2 ตัวอยาางอัลกอริทมึ การหาสาวนเบีย่ งเบนมาตรฐานจากคาาเฉลีย่ โดย
สังเกตอัลกอริทมึ นีด้ ๆี จะพบวาาไมามพี ารามิเตอร์ ไมามคี าอธิบาย และไมามกี ารประกาศคาาตัว
แปรใดๆ โดยชนิดของตัวแปรและจุดประสงค์ได้ถูกกาหนดไว้อยาางเรยบงาายบนชือ่ ทีส่ ามารถ
สือ่ ความหมายในตัวเอง
วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122202
17
ความรู้เกีย่ วกับข้อมูลและนามธรรม
(The Abstract Data Types)
การเขียนโปรแกรมในอดีต เป็ นการเขียนโปรแกรมในรูปแบบไมาม ี
โครงสร้าง หรือทีเ่ รียกวาาการเขียนโปรแกรมแบบสปาเก็ตตี (Spaghetti
code) และการเขียนโปรแกรมจะมีรูปแบบการเขียนทีเ่ ชือ่ มโยงกระโดดไปมา
ดูยุางเหยิงพันกันไปกันมาอยาางเชานเส้นสปาเก็ตตีทเี่ สริร์ฟอยูาบนจาน
นัน้ เอง และตาอมาในราวปี ค.ศ. 1970 ก็ได้มกี ารพัฒนาหลักการการ
เขียนโปรแกรมเชิงโครงสร้างขึน้ มา และด้วยเทคนิคดังกลาาว จึงทาให้การ
เขียนโปรแกรมดูเป็ นระบบ ระเบียบ ตรวจสอบงาาย ซึง่ ก็คอื แนวคิดการ
โปรแกรมแบบโมดูล (Modular Programming)
วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122201
18
ข้อมูลเชิงเดีย่ วและเชิงประกอบ
(Atomic and Composite Data)
ข้อมูลเชิงเดีย่ ว (Atomic Data) คือข้อมูลทีป่ ระกอบด้วยคาาเดียวทีไ่ มา
สามารถแบางข้อมูลนีอ้ อกไปเพือ่ สือ่ ความหมายได้อกี เชาน เลขจานวนเต็ม
4562 ก็คอื คาาเลขจานวนเต็มเพียงคาาหนึง่ เทาานัน้ สาหรับสิง่ ทีอ่ ยูา
ตรงกันข้ามคือข้อมูลเชิงประกอบ (Composite Data) โดยข้อมูล
ประกอบนัน้ สามารถทาการแตกออกเป็ นฟิ ลด์ยาอย (Subfields) และสิง่
ทีแ่ ตกออกไปมีความหมายด้วย เชาน หมายเลขโทรศัพท์ทเี่ ป็ นตัวเลขสาวนๆ
ได้คอื ตัวเลข 3 ตัวแรกทีร่ หัสจังหวัด สาวนทีเ่ หลือคือเบอร์หมายเลข
วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122201
19
ชนิดของข้อมูล (Data Type)
ชนิดของข้อมูลประกอบด้วย 2 สาวนด้วยกันคือ กลุมา ของข้อมูล
(Data)และโอเปอเรชัน (Operations) ทีส่ ามารถปฏิบตั กิ ารบนข้อมูลได้
เชาน ชนิดของข้อมูลแบบจานวนเต็ม (Integer) ซึง่ ก็คอื เลขจานวนเต็ม
ในชาวงตาางๆ สิง่ เหลาานีค้ อื กลุมา ของข้อมูล ในขณะทีโ่ อเปอเรชันทีใ่ ช้จดั การกับ
กลุมา ข้อมูลเลขจานวนเต็มเหลาานีก้ ค็ อื การบวก (+), การลบ (-), การ
คูณ (*), การหาร (/) และรวมถึงโอเปอเรชันอืน่ ๆ ทีต่ ้องการนามาใช้งาน
วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122201
20
โครงสร้างข้อมูล (Data Structure)
โครงสร้างข้อมูล คือ การรวมกันของข้อมูลเชิงเดีย่ วและข้อมูลเชิง
ประกอบเข้าด้วยกันเป็ นกลุมา พร้อมกับการกาหนดความสัมพันธ์ คาวาา
“โครงสร้าง (Structure)” มีความหมายวาา กลุมา ข้อมูลทีบ่ รรจุเข้า
ด้วยกัน ถ้ามีการรวมกันของข้อมูลในโครงสร้างแล้ว เราก็สามารถกาหนด
ความสัมพันธ์ ให้กบั ข้อมูลเหลาานัน้ ให้เป็ นไปตามกฎทีต่ งั้ ขึน้ ได้ และด้วยภาษา
โปรแกรม สาวนใหญาแล้วมักสนับสนุนโครงสร้างข้อมูลหลายรูปแบบด้วยกัน
รวมถึงโปรแกรมในยุคใหมาทอี่ นุญาตให้โปรแกรมเมอร์สามารถสร้าง
โครงสร้างข้อมูลใหมาๆ เพือ่ ใช้งานกับแอปพลิเคชันตามต้องการได้
วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122201
21
อาร์เรย์ (Array)
อาร์เรย์ (Array)
ชุดข้อมูลต้องเป็ นคาาชนิดใดชนิดหนึง่ ซึง่
เป็ นการรวมกันของชุดข้อมูลทีม่ คี วามแตกตาาง
หมายความวาา ชุดข้อมูลจะต้องเป็ นชนิดเดียวกัน กันลงในโครงสร้างหนึง่ ด้วยการใช้คยี ์ระบุ
(Homogeneous) โดยชนิดของข้อมูลสามารถ ตาแหนาง
อธิบายลักษณะตัวข้อมูลได้โดยตรง
ลาดับตาแหนางมีความสัมพันธ์กบั ข้อมูลทีจ่ ดั เก็บ ไมามคี วามสัมพันธ์ เนือ่ งจากลาดับตาแหนางกาอน
เชาน อาร์เรย์ทใี่ ช้จดั เก็บข้อมูลของเดือน คือ
หรือหลังภายในเรคอร์ดจะไมามคี วามสัมพันธ์ใดๆ
มกราคมถึงธันวาคม ดังนัน้ ลาดับตาแหนางเดือน
กับข้อมูลทีจ่ ดั เก็บภายในจะสัมพันธ์ กนั เชาน
ลาดับที่ 2 คือเดือนกุมภาพันธ์ เป็ นต้น
รูปที่ 2.4 รายละเอียดโครงสร้างข้อมูลแบบอาร์เรย์และเรคอร์ด
วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122202
22
(a) แมทริกซ์
(b) ลิสต์แบบเชิงเส้น
(d) กราฟ
(c) ทรี
รูปที่ 2.5 โครงสร้างข้อมูลชนิดตาางๆ
วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122202
23
ชนิดข้อมูลนามธรรม (Abstract Data Type : ADT)
ADT เป็ นการเขียนเขียนโค้ดเพือ่ อาานไฟล์ และนาไปจัดเก็บไว้ในไลบรารี
(Library) เพือ่ ให้โปรแกรมเมอร์ทวั่ ไปสามารถนาไปใช้งานได้ และหนึง่ ใน
วัตถุประสงค์หลักตามหลักวิศวกรรมซอฟต์แวร์ (Software
Engineering) ก็คอื การเขียนชุดคาสัง่ ทีส่ ามารถนากลับมาใช้ได้อกี
(Reusable Code) จึงเป็ นทีม่ าของการซาอนรายละเอียด
(Encapsulate) หรือการรวบรวมข้อมูลยาอยตาางๆ เข้าด้วยกันกับเมธอด
เพือ่ ใช้จดั การกับข้อมูลด้วยการแยกออกมาเป็ นโมดูลโปรแกรมหรือคลาส
ออกตาางหาก
วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122201
24
ดังนัน้ โปรแกรมใหมาๆ ทีเ่ ขียนขึน้ จึงสามารถนาเมธอดนีม้ าใช้งานได้
ทันที โดยไมาต้องมุางรายละเอียดเกีย่ วกับการสร้างแตาอยาางใด และด้วยการ
รวบรวมกันของข้อมูลเข้าด้วยกันกับเมธอดเหลาานีจ้ งึ เรียกวาา ชนิดข้อมูล
นามธรรม หรือ ADT นัน้ เอง โดยแบางเป็ น 2 รูปแบบด้วยกันคือ
1. รูปแบบเชิงลอจิคลั (Logical Form) เป็ นการนิยามข้อมูลด้วย ADT
โดยไมายดึ ติดกับซอฟต์แวร์หรือฮาร์ดแวร์ทใี่ ช้งาน ถือเป็ นพืน้ ฐานการ
ออกแบบและพัฒนาโปรแกรม
2. รูปแบบเชิงฟิ สคิ ลั (Physical Form) เป็ นขัน้ การนาไปใช้งาน หรือ
การนา ADT มาสร้างด้วยโครงสร้างข้อมูล
วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122201
25
Data Type
ADT:
Type
Operations
Data Item:
Logical Form
Data Structure:
Storage Space
Subroutines
Data Item:
Physical Form
รูปที่ 2.6 แสดงความสัมพันธ์ระหวาางชนิดข้อมูลเชิงลอจิคลั และฟิ สคิ ลั
วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122202
26
การวัดผลอัลกอริทมึ (Measuring Algorithm)
อัลกอริทมึ ทีอ่ อกแบบเพือ่ นาไปใช้แก้ปญั หาบนงานๆ หนึง่ นัน้
โปรแกรมเมอร์จาเป็ นต้องมีความเข้าใจหลักพืน้ ฐานเกีย่ วกับการวัดผล
อัลกอริทมึ เพือ่ จะได้นาอัลกอริทมึ เพือ่ จะได้นาอัลกอริทมึ ทีม่ ปี ระสิทธิภาพ
ไปใช้แก้ปญั หาได้อยาางเหมะสม ดังนัน้ เป็ นสิง่ ทีแ่ นานอนและยากตาอการปฏิเสธ
ก็คอื ปริมาณข้อมูลทีอ่ นิ พุ ตเข้ามาในระบบยาอมสางผลตาอความเร็วในการ
ประมวลผล
วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122201
27
ขนาดของอิ นพุ ต (Input Size)
10 ตัว
100 ตัว
1,000 ตัว
10,000 ตัว
เวลาที่ใช้ในการทางานเพือ่ จัดเรียงชุดตัวเลข (Running Time)
2 วินาที
2.1 วินาที
1 นาที
15 นาที
รูปที่ 2.7 ตัวอยาางตารางแสดงขนาดข้อมูลทีอ่ นิ พุ ตกับเวลาทีใ่ ช้ในการทางาน
จากรูปที่ 2.7 เป็ นตัวอยาางตารางแสดงปริมาณข้อมูลทีอ่ นิ พุ ตกับเวลาทีใ่ ช้ใน
การทางานเพือ่ จัดเรียงชุดตัวเลข จะเห็นได้วาา เวลาทีใ่ ช้ในการทางาน (Running
Time) ของคอมพิวเตอร์จะแปรผันตามขนาดข้องข้อมูลทีอ่ นิ พุ ตเข้าไป ดังนัน้ ขนาด
ของอินพุ ต (Input Size) จึงเป็ นสิง่ จาเป็ นทีเ่ ราต้องนามาพิจารณามากทีส่ ุด
เนือ่ งจากมีผลตาอเวลาทีใ่ ช้ในการประมวลผลนัน้ เอง
วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122202
28
เราสามารถกาหนดได้วาา เวลาในการทางาน T อัลกอริทมึ แทนด้วยฟั งก์ชนั T(n) ทีม่ ขี อ้ มูล
อินพุ ตเข้ามาจานวน n ตัว และจากตารางดังรูปที่ 2.8 สามารถนามาเขียนให้อยูาในรูปแบบ
ฟั งก์ชนั T ไดดังนี้
T(10)
= 2
วินาที
T(100)
= 2.1
วินาที
T(1,000)
= 1
นาที
T(10,000)
= 15
นาที
จะสังเกตไดวาาเมือ่ จานวนอินพุ ตมีขนาดเพิม่ ขึน้ คาา T(n) ก็จะเพิม่ ขึน้ ในอัตราสาวนที่
สัมพันธ์กบั n ดังนัน้ จึงกลาาวได้วาา T(n) คือ อันดับของขนาด n (Order of Magnitude)
ซึง่ สามารถแทนด้วยสัญลักษณ์บกิ๊ โอคือ T(n) = O(n) โดยทีโ่ ปแกรมจะใช้เวลาในการทางาน
มากน้อยขึน้ อยูากบั ขนาดของอินพุ ต ดังนัน้
T(n) = จานวนเวลาที่ใช้ในการทางานเพือ่ จัดเรียงชุดข้อมูล n ตัว
วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122201
29
เราสามารถวัดฟั งก์ชนั T(n) ได้ในกรณีเลวร้ายทีส่ ุด กรณีดที สี่ ุด หรือกรณีเฉลีย่ หรืออาจ
วัดได้ทุกกรณี แตาอยาางไรก็ตาม กรณีดที สี่ ุด (Best-case) ของอัลกอริทมึ นัน้ ไมาใช้ประเด็น
ใหญา ซึง่ มักไมากาอให้เกิดประโยชน์ตาอข้อมูลใดๆ สาวนกรณีเฉลีย่ (Average-case) จะคานวณ
ยาก ในขณะโดยทัว่ ไป T(n) มักพบบาอยครัง้ กรณีเลยร้ายสุด (Worst-case) ดังนัน้ การ
วัดผลอัลกอริทมึ จึงมักพิจารณาความซุบซ้อนด้านเวลากรณีเลวร้ายเทาานัน้
Time (T)
Worst-case
Best-case
Input (n)
รูปที่ 2.8 กราฟเปรียบเทียบเวลาในการทางานในกรณี Worst-case, Average-case, และ Best-case
วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122202
30
เกณฑ์เปรียบเทียบเพือ่ วัดผลอัลกอริทมึ วาาอัลกอริทมึ ไหนดีกวาากัน
อยาางไร อัลกอริทมึ ทีด่ จี ะประกอบด้วยคุณสมบัตติ าางๆ ดังตาอไปนี้
1. อัลกอริทมึ ทีด่ ตี ้องมีความถูกต้อง (Correctness)
2. อัลกอริทมึ ทีด่ ตี ้องงาายตาอการอาาน (Readability)
3. อัลกอริทมึ ทีด่ ตี ้องสามรถปรับปรุงในอนาคตได้
(Ease of Modification)
4. อัลกอริทมึ ทีด่ ตี ้องสามารถนากลับมาใช้ใหมาได้ (Reusability)
5. อัลกอริทมึ ทีด่ ตี ้องมีประสิทธิภาพ (Efficiency)
วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122201
31
อัลกอริทมึ ทีม่ ปี ระสิทธิภาพจะเกีย่ วข้องกับปัจจัยตาอไปนี้
1. เวลาทีใ่ ช้ในการทางาน (Running Time)
2. หนาวยความจาทีใ่ ช้ (Memory Requirement)
3. เวลาทีใ่ ช้ในการคอมไพล์โปรแกรม (Compile Time)
4. เวลาทีใ่ ช้ในการติดตาอสือ่ สาร (Communication Time)
แนานอนวาา ความเร็วในการทางานยาอมขึน้ อยูากบั ขนาดอินพุ ตทิ เี่ ข้ามา
โดยกาหนดให้ปจั จัยอืน่ ๆ คงที่ ดังนัน้ จึงสรุปได้วาา เวลาในการทางานเป็ น
ฟั งก์ชนั ของอินพุ ต
วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122201
32
ประสิทธิภาพของอัลกอริทมึ (Algorithm Efficiency)
การพิจารณาประสิทธิภาพของอัลกอริทมึ จากฟั งก์ชนั่ ทีใ่ ห้มา ด้วยการ
พิจารณาจากจานวนอิลเิ มนต์ (Elements) ทีถ่ ูกโปรเซส หรือจากจานวน
รอบการทางานของตัวดาเนินการนัน้ ๆ โดยประสิทธิของอัลกอริทมึ เราจะ
แทนด้วยฟั งก์ชนั ดังนี้
f(n) = efficiency
และหากฟั งก์ชนั นัน้ เป็ นฟั งก์ชนั แบบเชิงเส้น (Linear) ไมามกี ารทางานใน
ลักษณะลูป (Loop) ประสิทธิภาพของฟั งก์ชนั นีก้ ค็ อื จานวนชุดคาสัง่ ที่
บรรจุอยูาภายในทัง้ หมด
วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122201
33
ลูปแบบเชิงเส้น (Linear Loop)
ลักษณะการทางานภายในลูปเชิงเส้น จะมีการเพิม่ คาาหรือลดคาาภายในลูป
คงที่ จนกระทัง่ ครบจานวนรอบทีก่ าหนดไว้ โดยจากตัวอยาางโปรแกรม
วงจรลูปตาอไปนีจ้ ะเป็ นการเพิม่ คาาลูป (i++) ด้วยการเพิม่ คาาทีละหนึง่ ในแตา
ละรอบจนกวาาจะครบรอบตามทีก่ าหนด
For (i = 0. i < 1000; i++)
application code
วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122201
34
ลูปแบบลอการิธมิค (Logarithmic Loop)
ลักษณะการทางานภายในลอการิธมิค จะมีการเพิม่ คาาหรือลดคาาสองเทาา
ด้วยการคูณ (เพิม่ คาาสองเทาา) หรือการหาร (ลดคาาสองเทาา) จาก
ตัวอยาางตาอไปนี้
Multiply Loops
For (i = 1. i <= 1000; i*=2)
application code
Divide Loops
For (i = 1000 i >= 1 ; i /=2)
application code
กรณีทงั้ สอง ผลทีไ่ ด้กค็ อื แตาละรอบของคาา I จะมีคาาเพิม่ เป็ นสองเทาา
จากลูปทีค่ ูณกัน และลดลงครึง่ หนึง่ จากลูปการหาร
วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122201
35
ลูปแบบซ้อน (Nested Loop)
ลักษณะการทางานของลูปแบบซ้อน ก็คอื ภายในลูปจะมีลูปซ้อนอีกลูปหนึง่
สาหรับในกรณีวเิ คราะห์ลูปซ้อนลูป จะต้องพิจารณาวาามีจานวนรอบการ
ทางานของลูปเทาาไรจนกระทัง่ เสร็จสิน้ ยอดรวมทีไ่ ด้กค็ อื ผลคูณทัง้ สิน้ ของ
จานวนรอบของลูปชัน้ ใน (inner Loops) กับจานวนลูปชัน้ นอก (Outer
Loop) โดยผลก็คอื
Iterations = outer loop iterations x inner loop iterations
ลูปแบบซ้อนสามารถแบางเป็ น 3 รูปแบบยาอยด้วยกันดังนี้
วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122201
36
ลูปแบบซ้อนชนิดลอการิธมิคเชิงเส้น (Linear Logarithm)
ให้พจิ ารณาชุดคาสัง่ ภายในลูปชัน้ ใน ซึง่ มีการเพิม่ คาาเป็ นสองเทาาด้วยการคูณกัน
ในขณะทีล่ ูปชัน้ นอกจะเป็ นแบบเชิงเส้นทีม่ กี ารเพิม่ คาาทีละหนึง่ ในลักษณะคงที่
for (i = 0 ; i < 10 ; i++)
for (j = 1 ; j <= 10 ; j *= 2)
application code
ดังนัน้ จานวนรอบของลูปชัน้ ในก็คอื log10 นัน้ เอง แตาลูปชัน้ ในถูกควบคุมโดยลูป
ชัน้ นอกอีกชัน้ หนึง่ ดังนัน้ สูตรทีไ่ ด้จะต้องคูณด้วยจานวนรอบของลูปชัน้ นอกด้วย
10 ก็จะได้ 10log10 เมือ่ เขียนฟั งก์ชนั่ จะได้
f(n) = n log n
วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122201
37
ลูปแบบซ้อนชนิดกาลังสอง (Quadratic)
ลักษณะการทางานของลูปชนิดนี้ แตาละลูปจะทาการเอ็กซีควิ ต์ในจานวนรอบที่
เทาากัน จากตัวอยาางจะเห็นได้วาา ลูปชัน้ นอกจะทางาน 10 รอบ ในขณะทีแ่ ตาละรอบ
การทางานของลูปชัน้ ในการทางานจานวน 10 รอบเชานกัน
for (i = 0 ; i < 10 ; i++)
for (j = 0 ; j < 10 ; j++)
application code
ดังนัน้ คาตอบทีไ่ ด้กค็ อื 100 ซึง่ ได้มาจาก 10x10 ผลลัพธ์จากการคูณ
ด้วยกันระหวาางลูปชัน้ ในและลูปชัน้ นอก ก็จะได้สูตรตามฟั งก์ชนั ดังนี้
f(n) = n2
วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122201
38
ลูปแบบซ้อนกาลังสองชนิดขึน้ ตาอกัน (Dependent Quadratic)
ลักษณะการทางานของลูปชนิดนี้ จานวนรอบการทางานของลูปชัน้ ในจะขึน้ อยูากบั
ลูปชัน้ นอก และจากตัวอยาางจะเห็นได้วาาลูป j ซึง่ เป็ นลูปชัน้ ใน จะมีรอบการทางานที่
ขึน้ อยูากบั i ซึง่ เป็ นลูปชัน้ นอก
for (i = 0 ; i < 10 ; i++)
for (j = 0 ; j < i ; j++)
application code
โดยจานวนรอบการทางานในชุดคาสัง่ ของลูปชัน้ ในคานวณได้ดงั นี้
1 + 2 + 3 + . . . + 9 + 10 = 55
วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122201
39
เมือ่ ดาเนินการคานวณคาาเฉลีย่ ของรอบการทางานภายในลูปชัน้ ใน ก็จะมีคาาเทาากับ
5.5 (55/10) ซึง่ ผลทีไ่ ด้กจ็ ะมีคาาตรงกับจานวนรอบ (10) บวกด้วย 1 หาร
ด้วย 2
n+1
2
สาหรับจานวนรอบการทางานทัง้ หมด ก็คอื ผลคูณระหวาางรอบการทางาน
ภายในลูปชัน้ ในกับรอบการทางานของลูปชัน้ นอกทีเ่ ป็ นไปได้ตามลูปซ้อนกาลังสองที่
ขึน้ ตาอกัน ก็จะได้สูตรดังนี้
f(n) = n+1
2
วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122201
40
สัญลักษณ์บกิ๊ โอ (Big-O Notation)
ในการวัดประสิทธิภาพของอัลกอริทมึ หากยึดหลักเวลาการทางาน
เป็ นสาคัญ คงเป็ นเรือ่ งยากมากทีจ่ ะทาให้เห็นถึงความแตกตาางในเงือ่ นเวลา
โดยเฉพาะคอมพิวเตอร์ในปัจจุบนั มีการประมวลผลทีร่ วดเร็วมากสามารถ
ประมวลผลชุดคาสัง่ ได้มากถึง 1 ล้านคาสัง่ ภายในหนึง่ วินาที ดังนัน้ หาก
วิเคราะห์อลั กอริทมึ สองอัลกอริทมึ บนโปรแกรมเดียวกัน เนือ่ งจากสอง
อัลกอริทมึ ทางานด้วยความเร็วทัง้ คูา จนกระทัง้ ไมาสามรถแยกแยะให้เห็นถึง
ความแตกตาางในด้านเวลาได้เลย เพราะจะเป็ นสิง่ ทีว่ ดั ยาก และไมานาาจะ
นามาใช้เป็ นเกณฑ์วดั ผลอัลกอริทมึ เพือ่ หาประสิทธิภาพแตา อยาางใด
วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122201
41
ดังนัน้ ปัจจัยหลักทีจ่ ะนามาใช้เป็ นเกณฑ์เพือ่ วัดประสิทธิภาพของ
อัลกอริทมึ นัน้ จะพิจารณาจาก อัตราการเติบโตของฟั งก์ชนั (Growth
Rates) ด้วยการพิจารณาปัจจัยของขนาดเป็ นสาคัญ ดังนัน้ เกณฑ์การ
วัดประสิทธิภาพของอัลกอริทมึ นีก้ ค็ อื ฟั งก์ชนั บิก๊ โอ (Big-O) ทีม่ า
จากคาวาา Order of Magnitude โดยอัตราการเติบโตของฟั งก์ชนั่ ที่
แสดงในรูปที่ 2.11 จะเห็นวาาฟั งก์ชนั ลอการิทมึ มีอตั ราการเติบโตต่ าทีส่ ุด
ในขณะทีฟ่ ั งก์ชนั เอ็กซ์โพเนนเซียลและแฟคตอเรียลมีอตั ราการเติบโตสูงสุด
และถือวาาสินเปลืองทีส่ ุด
วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122201
42
O(f(n))
O(log n )
O(n)
O(n log n )
O(n2)
O(n3)
O(2n)
O(n!)
f(50)
5.64
50
282
2500
12,500
1,126 x 1015
3.0 x 1064
f(50)
6.64
100
664
10,000
100,000
1.27 x 1030
9.3 x 10157
รูปที่ 2.11 ตารางแสดงความแตกตาางของอัตราการเติบโตในแตาละฟั งก์ชนั
วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122202
43
การวัดประสิทธิภาพจึงเกีย่ วข้องกับฟั งก์ชนั ของจานวนข้อมูล (f(n)) ซึง่ อาจเขียน
แทนด้วย T(n)= O(f(n)) ทีใ่ ช้เป็ นฟั งก์ชนั แสดงการเปลีย่ นแปลงของเวลาในการ
ทางานวาาคิดเป็ นสัดสาวนเทาาไรกับจานวนอินพุ ต
ให้พจิ ารณารายละเอียดจากอัลกอริทมึ ที่ 2.3 ตาอไปนี้ ทีว่ าาด้วยการคานวณ
T(n) ด้วยการถอดรหัสคาสัง่ ในอัลกอริทมึ เพือ่ หาเวลาในการปฏิบตั งิ านของ
ชุดคาสัง่ ทีแ่ สดงไว้ดงั รูปที่ 2.12
1 set sum to zero
2 set i to zero
3 dowhile i < n
1 add 1 to i
2 add score(i) to sum
4 enddo
5 compute mean = sum / n
อัลกอริทมึ 2.3 ซูโดโค้ดการคานวณคะแนนเฉลีย่
วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122201
44
เลขลาดับคาสั่ง เวลาในการทางาน
คาอธิบาย
1
1
ถูกทางาน 1 ครั้ง
2
1
3
n+1
3.1
n
3.2
n
ถูกทางาน n ครั้ง
4
-
ไม่ได้นามาคิด เนื่องจากเป็ นตัวปิ ดลูป dowhile
5
1
ถูกทางาน n ครั้ง
รวม
3n + 4
ถูกทางาน 1 ครั้ง
ถูกทางาน n+1 ครั้ง เนื่องจากต้องมีการ
เปรียบเทียบตัวแปร i กับตัวแปร n เพิม่ อี ก 1 ครั้ง
เพือ่ ให้หลุดจากลูป
ถูกทางาน n ครั้ง
รูปที่ 2.12 ตารางแสดงเวลาในการปฏิบตั งิ านของชุดคาสัง่ ในอัลกอริทมึ ที่ 2.3
วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122202
45
O(log n )
จานวนรอบ
การทางาน
(Iteration)
14
O(n)
10,000
ระดับวินาที
O(n log n )
140,000
ระดับวินาที
กาลังสอง (Quadratic)
O(n2)
10,0002
ระดับนาที
โพลีโนเมียล(Polynomial)
O(n3)
10,000k
ระดับชั่วโมง
เอ็ กซ์โพเนนเซียล(Exponentail)
O(2n)
210,000
มากจนยากต่อการระบุได้ชัดเจน
แฟคตอเรียล(Factorial)
O(n!)
10,000!
มากจนยากต่อการระบุได้ชัดเจน
ประสิทธิภาพของฟังก์ชัน (Efficiency)
อั ลกอริทึม(Logarithmic)
เชิงเส้น (Linear)
ลอการิทึมเชิงเส้น (Linear Logarithmic)
บิ๊กโอ
O(f(n))
เวลาที่ใช้ในการทางาน
โดยประมาณ (Running time)
ระดับไมโครวินาที
รูปที่ 2.15 ตารางแสดงเวลาในการปฏิบตั งิ านของชุดคาสัง่ ในอัลกอริทมึ ที่ 2.3
วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122202
46
O(n)
n3
รูปที่ 2.16 กราฟแสดงความสัมพันธ์ระหวาางจานวนข้อมูลกับเวลา
ในการทางานของฟั งก์ชนั ตาางๆ (Big-O Range)
วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122202
47
จึงสรุปได้วาา ควรเลือกอัลกอริทมึ ทีม่ อี ตั ราการเติบโตต่ าทีส่ ุดเมือ่
ปริมาณอินพุ ตของข้อมูลจานวนมาก เชาน อัลกอริทมึ O(n) แทนทีจ่ ะ
เลือก O(n2) ดังนัน้ แนวทางในการวัดผลประสิทธิภาพของอัลกอริทมึ จะ
วัดจาก
1. ขนาดของอินพุ ต
2. ให้ละเลยคาาคงทีท่ อี่ ยูาในสภาพแวดล้อมนัน้
3. สนใจเฉพาะกรณีเลวร้ายสุดเทาานัน้ (Worst-case)
4. มองข้ามขนาดของอินพุ ตทีม่ จี านวนน้อยๆ
วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122201
48
ตัวอยาางการวิเคราะห์บกิ๊ โอ (Big-O Analysis Example)
การนาสองแมทริกซ์มาบวกกันนี้ จะดาเนินการด้วยการนาอิลเิ มนต์
ทีต่ รงกันระหวาางแมทริกซ์แรกกับแมทริกซ์ทสี่ องมารวมกัน โดยผลลัพธ์ ท ี่
ได้จะเก็บไว้ในแมทริกซ์ทสี่ าม หลักการดังกลาาวจะเป็ นไปตามวิธกี ารดังรูปที่
2.17 ในขณะทีอ่ ลั กอริทมึ ที่ 2.4 คือซูโดโค้ดทีแ่ สดงถึงการบวกของ
แมทริกซ์น้ ี
วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122201
49
4
2
1
0
-3
4
5
6
2
+
6
1
7
3
2
-1
4
6
2
=
10
3
6
3
-1
3
9
12
4
รูปที่ 2.17 แสดงวิธกี ารบวกแมทริกซ์
Algorithm addMatrix (matrix1, matrix1, size, matrix3)
Add matrix1 to matrix2 and place results in matrix3
pre
matrix1 and matrix2 have data
size is number of columns or rows in matrix
post matrices added-result in matrax3
1 loop (not end of row)
1 loop (not end of column)
1 add matrix1 and matrix2 cells
2 store sum in matrix3
2 end loop
2. end loop
end addMatrix
อัลกอริทมึ ที่ 2.4 การบวกของสองแมทริกซ์
วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122202
50
จากอัลกอริทมึ ที่ 2.4 นีเ้ อง จะเห็นวาาในแตาละอิลเิ มนต์ของแถว
(ลาดับ 1) จะมีการนาไปบวกกับอิลเิ มนต์ทงั้ หมดในในหมดในคอลัมน์ (เลข
ลาดับ 1.1) ซึง่ จัดเป็ นรูปกาลังสอง (Quadratic Loop) ดังนัน้
ประสิทธิภาพของอัลกอริทมึ นีก้ ค็ อื O(size2) หรือ O(n2)
วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122201
51
เมือ่ มีการนาสองแมทริกซ์มาคูณกัน จะต้องนาแตาละอิลเิ มนต์ในแถว
ของแมทริกซ์ตวั แรกมาคูณกับตาแหนางอิลเิ มนต์ตรงกันในคอลัมน์ของ
แมทริกซ์ตวั ทีส่ อง ผลลัพธ์ ทไี่ ด้จากผลคูณในแตาละตาแหนางจะนามาบวก
รวมกัน ซึง่ เป็ นไปตามหลักการดังนี้
matrix3 [row, col]=
+ matrix1[row, 0] x matrix2[0, col]
+ matrix1[row, 1] x matrix2[1, col]
+ matrix1[row, 2] x matrix2[2, col]
. . .
+ matrix1[r, s-1] x matrix2[s-1, col]
Where s = size of matrix
วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122201
52
r0, c0
4
2
1
6
1
7
0
-3
4
3
2
-1
5
6
2
4
6
2
34
r0, c1
(a) (4x6)+(2x3)+(1x4)= 34
4
2
1
6
1
7
0
-3
4
3
2
-1
5
6
2
4
6
2
14
(b) (4x1)+(2x2)+(1x6)= 14
4
2
1
6
1
7
0
-3
4
3
2
-1
5
6
2
4
6
2
r1, c2
11
(c) (0x7)+((-3)x(-1))+(4x2)= 11
รูปที่ 2.18 แสดงวิธกี ารคูณแมทริกซ์
วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122202
53
จากอัลกอริทมึ ที่ 2.5 คือซูโดโค้ดการคูณแมทริกซ์ดงั กลาาว จะเห็น
ได้วาาอัลกอริทมึ การหาผลคูณของแมทริกซ์นจ้ ี ะมีลูปซ้อนกันอยูา 3 ลูป
ด้วยกัน โดยเป็ นลูปชนิดลูกบาศก์ (Cubic Loop) ดังนัน้ ประสิทธิภาพ
ของอัลกอริทมึ นีก้ ค็ อื O(size3) หรือ O(n3)
วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122201
54
The End
Lesson 2
วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122201
55