1 00:00:00,000 --> 00:00:12,350 >> [เล่นดนตรี] 2 00:00:12,350 --> 00:00:13,050 >> ROB สลิง: สวัสดี 3 00:00:13,050 --> 00:00:13,640 ฉันร็อบ 4 00:00:13,640 --> 00:00:16,210 และให้การแก้ปัญหานี้ออก 5 00:00:16,210 --> 00:00:20,070 ดังนั้นที่นี่เรากำลังจะดำเนินการ ตารางทั่วไป 6 00:00:20,070 --> 00:00:24,090 เราจะเห็นว่าโครงสร้างของโหนดของเรา ตารางจะมีลักษณะเช่นนี้ 7 00:00:24,090 --> 00:00:28,710 ดังนั้นมันจะมีคำถ่าน อาร์เรย์ที่มีขนาดความยาว + 1 8 00:00:28,710 --> 00:00:32,259 อย่าลืม + 1 เนื่องจากสูงสุด คำในพจนานุกรม 45 9 00:00:32,259 --> 00:00:33,130 ตัวอักษร 10 00:00:33,130 --> 00:00:37,070 แล้วเราจะต้องอย่างใดอย่างหนึ่งเป็นพิเศษ ตัวอักษรสำหรับศูนย์เครื่องหมาย 11 00:00:37,070 --> 00:00:40,870 >> แล้ว Hashtable ของเราในแต่ละ ถังเป็นไปในการจัดเก็บ 12 00:00:40,870 --> 00:00:42,320 รายการที่เชื่อมโยงของโหนด 13 00:00:42,320 --> 00:00:44,420 เราไม่ได้ทำที่นี่ละเอียดเชิงเส้น 14 00:00:44,420 --> 00:00:48,430 และอื่น ๆ เพื่อที่จะเชื่อมโยงไปยังถัดไป องค์ประกอบในถังที่เราต้องการ 15 00:00:48,430 --> 00:00:50,390 โหนด struct * ต่อไป 16 00:00:50,390 --> 00:00:51,110 ตกลง 17 00:00:51,110 --> 00:00:53,090 ดังนั้นนั่นคือสิ่งที่โหนดดูเหมือนว่า 18 00:00:53,090 --> 00:00:56,180 >> ตอนนี้ที่นี่คือการประกาศ ของ Hashtable ของเรา 19 00:00:56,180 --> 00:00:59,640 มันจะมี 16,834 ถัง 20 00:00:59,640 --> 00:01:01,910 แต่ตัวเลขที่ไม่ได้เรื่องจริงๆ 21 00:01:01,910 --> 00:01:05,450 และในที่สุดเรากำลังจะมี ขนาด Hashtable ตัวแปรทั่วโลกซึ่ง 22 00:01:05,450 --> 00:01:07,000 จะเริ่มออกมาเป็นศูนย์ 23 00:01:07,000 --> 00:01:10,760 และก็จะติดตามว่า หลายคำที่อยู่ในพจนานุกรมของเรา 24 00:01:10,760 --> 00:01:13,710 >> ดังนั้นลองมาดูที่โหลด 25 00:01:13,710 --> 00:01:16,390 ขอให้สังเกตว่าภาระมันกลับบูล 26 00:01:16,390 --> 00:01:20,530 คุณกลับจริงถ้ามันประสบความสำเร็จ โหลดและเท็จอย่างอื่น 27 00:01:20,530 --> 00:01:23,990 และจะใช้เวลา const char * พจนานุกรม ซึ่งเป็นพจนานุกรม 28 00:01:23,990 --> 00:01:25,280 ที่เราต้องการที่จะเปิด 29 00:01:25,280 --> 00:01:27,170 เพื่อให้เป็นสิ่งแรก เรากำลังจะทำ 30 00:01:27,170 --> 00:01:29,500 >> เรากำลังจะไป fopen พจนานุกรมสำหรับการอ่าน 31 00:01:29,500 --> 00:01:31,680 และเราจะต้องทำ แน่ใจว่าจะประสบความสำเร็จ 32 00:01:31,680 --> 00:01:35,920 ดังนั้นถ้ามันกลับโมฆะแล้วเราไม่ได้ ประสบความสำเร็จในการเปิดพจนานุกรม 33 00:01:35,920 --> 00:01:37,440 และเราต้องกลับเท็จ 34 00:01:37,440 --> 00:01:41,580 แต่สมมติว่ามันประสบความสำเร็จ เปิดแล้วเราต้องการที่จะอ่าน 35 00:01:41,580 --> 00:01:42,400 พจนานุกรม 36 00:01:42,400 --> 00:01:46,450 เพื่อให้การวนลูปจนกว่าเราจะพบบางส่วน เหตุผลที่จะแยกออกจากวงนี้ 37 00:01:46,450 --> 00:01:47,570 ซึ่งเราจะได้เห็น 38 00:01:47,570 --> 00:01:48,920 เพื่อให้การวนลูป 39 00:01:48,920 --> 00:01:51,780 >> และตอนนี้เรากำลังจะ malloc โหนดเดียว 40 00:01:51,780 --> 00:01:54,020 และแน่นอนเราต้อง ในการตรวจสอบอากาศอีกครั้ง 41 00:01:54,020 --> 00:01:58,680 ดังนั้นหาก mallocing ไม่ประสบความสำเร็จแล้ว เราต้องการที่จะยกเลิกการโหลดโหนดที่เรา ๆ 42 00:01:58,680 --> 00:02:02,590 ที่เกิดขึ้นกับ malloc ก่อนที่จะปิด พจนานุกรมและกลับเท็จ 43 00:02:02,590 --> 00:02:06,830 แต่ไม่สนใจว่าเราสมมติว่า ประสบความสำเร็จแล้วเราต้องการที่จะใช้ fscanf 44 00:02:06,830 --> 00:02:12,400 การอ่านคำเดียวจากเรา พจนานุกรมเป็นโหนดของเรา 45 00:02:12,400 --> 00:02:17,940 ดังนั้นจำไว้ว่ารายการ> คำเป็นถ่าน บัฟเฟอร์คำขนาด lenghth + 1 46 00:02:17,940 --> 00:02:20,300 ที่เรากำลังจะเก็บคำค่ะ 47 00:02:20,300 --> 00:02:25,070 >> ดังนั้น fscanf จะกลับ 1 ตราบใดที่ มันก็สามารถที่จะประสบความสำเร็จ 48 00:02:25,070 --> 00:02:26,750 อ่านคำจากแฟ้ม 49 00:02:26,750 --> 00:02:30,460 หากมีข้อผิดพลาดอย่างใดอย่างหนึ่งเกิดขึ้นหรือที่เรา ถึงจุดสิ้นสุดของไฟล์ที่จะ 50 00:02:30,460 --> 00:02:31,950 จะไม่กลับมาที่ 1 51 00:02:31,950 --> 00:02:35,180 ในกรณีที่มันไม่กลับ 1 เราก็จะแยกออกจาก 52 00:02:35,180 --> 00:02:37,280 ห่วงขณะนี้ 53 00:02:37,280 --> 00:02:42,770 ดังนั้นเราจะเห็นว่าเมื่อเราประสบความสำเร็จ อ่านคำพูดเป็น 54 00:02:42,770 --> 00:02:48,270 รายการ> คำแล้วเรากำลังจะไปที่ คำที่ใช้ฟังก์ชันแฮชของเรา 55 00:02:48,270 --> 00:02:49,580 >> ลองมาดูที่ ฟังก์ชันแฮช 56 00:02:49,580 --> 00:02:52,430 57 00:02:52,430 --> 00:02:55,610 เพื่อให้คุณไม่ได้จริงๆต้อง ที่จะเข้าใจในเรื่องนี้ 58 00:02:55,610 --> 00:02:59,460 และที่จริงเราก็ดึงกัญชานี้ ฟังก์ชั่นจากอินเทอร์เน็ต 59 00:02:59,460 --> 00:03:04,010 สิ่งเดียวที่คุณจำเป็นต้องรู้คือ ที่นี้จะใช้เวลา char * คำ const 60 00:03:04,010 --> 00:03:08,960 ดังนั้นจึงสละสตริงเป็น input และ กลับ int ไม่ได้ลงนามเป็นผลผลิต 61 00:03:08,960 --> 00:03:12,360 เพื่อให้ทุกฟังก์ชันแฮชจะเป็นมัน จะใช้เวลาในการป้อนข้อมูลและช่วยให้คุณ 62 00:03:12,360 --> 00:03:14,490 ดัชนีลงใน hashtable 63 00:03:14,490 --> 00:03:18,530 >> ขอให้สังเกตว่าเรากำลัง moding โดย NUM_BUCKETS, ดังนั้นค่าที่ส่งกลับมา 64 00:03:18,530 --> 00:03:21,730 เป็นจริงเป็นดัชนี Hashtable และไม่เกินกว่าดัชนี 65 00:03:21,730 --> 00:03:24,320 ขอบเขตของอาร์เรย์ 66 00:03:24,320 --> 00:03:28,060 ให้ดังนั้นฟังก์ชั่นที่เรากำลังจะ ที่จะสับคำที่เราอ่าน 67 00:03:28,060 --> 00:03:29,390 พจนานุกรม 68 00:03:29,390 --> 00:03:31,700 แล้วเรากำลังจะใช้ กัญชาแทรกว่า 69 00:03:31,700 --> 00:03:33,750 เข้าสู่ Hashtable 70 00:03:33,750 --> 00:03:38,520 >> กัญชาตอนนี้ hashtable ที่เป็นปัจจุบัน รายการที่เชื่อมโยงในตาราง 71 00:03:38,520 --> 00:03:41,410 และเป็นไปได้มาก ว่ามันเป็นโมฆะเพียง 72 00:03:41,410 --> 00:03:44,960 เราต้องการที่จะแทรกรายการของเราได้ที่ จุดเริ่มต้นของรายการที่เชื่อมโยงนี้ 73 00:03:44,960 --> 00:03:48,600 และเพื่อให้เรากำลังจะมีในปัจจุบันของเรา จุดเริ่มต้นกับสิ่งที่ Hashtable 74 00:03:48,600 --> 00:03:50,380 ปัจจุบันชี้ไปที่ 75 00:03:50,380 --> 00:03:53,310 และจากนั้นเราจะจัดเก็บ ใน Hashtable ที่ 76 00:03:53,310 --> 00:03:55,350 กัญชารายการปัจจุบัน 77 00:03:55,350 --> 00:03:59,320 ดังนั้นทั้งสองสายที่ประสบความสำเร็จแทรก รายการที่จุดเริ่มต้นของ 78 00:03:59,320 --> 00:04:02,260 รายการที่เชื่อมโยงที่ดัชนีที่ ใน Hashtable 79 00:04:02,260 --> 00:04:04,900 >> เมื่อเรากำลังทำกับที่เรารู้ ที่เราพบในคำอื่น 80 00:04:04,900 --> 00:04:07,790 พจนานุกรมและเราเพิ่มขึ้นอีกครั้ง 81 00:04:07,790 --> 00:04:13,960 ดังนั้นเราจึงให้ทำจน fscanf ในที่สุดสิ่งที่ไม่กลับ-1 ที่ 82 00:04:13,960 --> 00:04:16,950 จุดที่จำไว้ว่า เราต้องการที่จะเป็นอิสระเข้า 83 00:04:16,950 --> 00:04:19,459 ดังนั้นที่นี่เรา malloced รายการ 84 00:04:19,459 --> 00:04:21,329 และเราพยายามที่จะอ่านสิ่งที่ จากพจนานุกรม 85 00:04:21,329 --> 00:04:23,910 และเราไม่ได้อ่านที่ประสบความสำเร็จ บางสิ่งบางอย่างจากพจนานุกรมใน 86 00:04:23,910 --> 00:04:26,650 ซึ่งในกรณีที่เราต้องการที่จะเป็นอิสระเข้า ที่เราไม่เคยใส่จริงใน 87 00:04:26,650 --> 00:04:29,140 Hashtable และในที่สุดก็หยุดพัก 88 00:04:29,140 --> 00:04:32,750 >> เมื่อเราแบ่งออกเราต้องดูดี เราได้แบ่งออกเพราะมี 89 00:04:32,750 --> 00:04:34,360 อ่านข้อผิดพลาดจากไฟล์หรือไม่ 90 00:04:34,360 --> 00:04:37,120 เราไม่ออกหรือทำลายเพราะเรา ถึงจุดสิ้นสุดของแฟ้มหรือไม่ 91 00:04:37,120 --> 00:04:39,480 หากมีข้อผิดพลาดแล้ว เราต้องการที่จะกลับเท็จ 92 00:04:39,480 --> 00:04:40,930 เพราะโหลดไม่ประสบความสำเร็จ 93 00:04:40,930 --> 00:04:43,890 และในกระบวนการที่เราต้องการในการขน คำทั้งหมดที่เราอ่านและ 94 00:04:43,890 --> 00:04:45,670 ปิดแฟ้มพจนานุกรม 95 00:04:45,670 --> 00:04:48,740 >> สมมติว่าเราไม่ประสบความสำเร็จแล้วเราเพียงแค่ ยังคงต้องปิดพจนานุกรม 96 00:04:48,740 --> 00:04:53,040 ไฟล์และในที่สุดก็กลับจริงตั้งแต่เรา ประสบความสำเร็จในการโหลดพจนานุกรม 97 00:04:53,040 --> 00:04:54,420 และที่มันสำหรับการโหลด 98 00:04:54,420 --> 00:04:59,020 ดังนั้นตอนนี้ตรวจสอบให้ Hashtable โหลด จะมีลักษณะเช่นนี้ 99 00:04:59,020 --> 00:05:03,140 เพื่อตรวจสอบก็จะกลับบูลซึ่งเป็น จะระบุว่าที่ผ่านมา 100 00:05:03,140 --> 00:05:07,530 ใน char * คำว่าที่ผ่านมา ในสายที่อยู่ในพจนานุกรมของเรา 101 00:05:07,530 --> 00:05:09,890 ดังนั้นถ้ามันอยู่ในพจนานุกรม ถ้ามันอยู่ใน hashtable ที่ของเรา 102 00:05:09,890 --> 00:05:11,170 เราจะกลับจริง 103 00:05:11,170 --> 00:05:13,380 และถ้ามันไม่ได้เราจะกลับเท็จ 104 00:05:13,380 --> 00:05:17,740 >> ให้นี้ผ่านคำพูดเรา จะสับคำ 105 00:05:17,740 --> 00:05:22,110 ตอนนี้สิ่งที่สำคัญในการรับรู้เป็น ว่าในการโหลดเรารู้ว่าทุก 106 00:05:22,110 --> 00:05:23,820 คำที่เรากำลังจะเป็นกรณีที่ต่ำกว่า 107 00:05:23,820 --> 00:05:25,820 แต่ที่นี่เราไม่แน่ใจว่าดังนั้น 108 00:05:25,820 --> 00:05:29,510 ถ้าเราจะดูที่ฟังก์ชันแฮชของเรา ฟังก์ชันแฮชของเราจริง 109 00:05:29,510 --> 00:05:32,700 เป็นท่อที่ต่ำกว่าตัวละครแต่ละตัว ของคำว่า 110 00:05:32,700 --> 00:05:37,940 ดังนั้นโดยไม่คำนึงถึงมูลค่าของ คำฟังก์ชันแฮชของเราคือการกลับ 111 00:05:37,940 --> 00:05:42,270 ดัชนีเดียวกันสำหรับสิ่งที่ มูลค่าคือเป็นมันจะมี 112 00:05:42,270 --> 00:05:45,280 กลับตัวพิมพ์เล็กอย่างสมบูรณ์ รุ่นของคำว่า 113 00:05:45,280 --> 00:05:46,600 ไม่เป็นไร 114 00:05:46,600 --> 00:05:49,790 นั่นคือดัชนีของเราจะเป็น Hashtable สำหรับคำนี้ 115 00:05:49,790 --> 00:05:52,940 >> ตอนนี้สำหรับวงที่เป็นไป ย้ำผ่านรายการที่เชื่อมโยง 116 00:05:52,940 --> 00:05:55,000 ที่อยู่ในดัชนีที่ 117 00:05:55,000 --> 00:05:59,610 ดังนั้นเราจะสังเกตเห็นการเริ่มต้นรายการ ให้ชี้ไปที่ดัชนี 118 00:05:59,610 --> 00:06:02,750 เรากำลังจะดำเนินการต่อไป ในขณะที่รายการ! = NULL 119 00:06:02,750 --> 00:06:07,770 และจำไว้ว่าการปรับปรุงตัวชี้ ในรายการรายการที่เชื่อมโยงเราเข้า => ต่อไป 120 00:06:07,770 --> 00:06:14,400 เพื่อให้มีจุดเริ่มต้นในปัจจุบันของเราที่จะ รายการถัดไปในรายการที่เชื่อมโยง 121 00:06:14,400 --> 00:06:19,250 >> ดังนั้นสำหรับแต่ละรายการในรายการที่เชื่อมโยง เรากำลังจะใช้ strcasecmp 122 00:06:19,250 --> 00:06:20,330 มันไม่ได้ StrComp 123 00:06:20,330 --> 00:06:23,780 อีกครั้งเพราะเราต้องการที่จะ กรณีทำสิ่งที่ตัวดี 124 00:06:23,780 --> 00:06:27,870 ดังนั้นเราจึงใช้ strcasecmp เพื่อเปรียบเทียบ คำที่ถูกส่งผ่านทางนี้ 125 00:06:27,870 --> 00:06:31,860 ฟังก์ชั่นกับคำว่า ที่อยู่ในรายการนี​​้ 126 00:06:31,860 --> 00:06:35,570 ถ้ามันกลับเป็นศูนย์นั่นหมายความว่ามี การแข่งขันในกรณีที่เราต้องการที่จะ 127 00:06:35,570 --> 00:06:36,630 กลับจริง 128 00:06:36,630 --> 00:06:39,590 เราประสบความสำเร็จพบ คำใน hashtable ที่ของเรา 129 00:06:39,590 --> 00:06:43,040 >> หากไม่มีการแข่งขันแล้วเรา จะห่วงอีกครั้งและมองไปที่ 130 00:06:43,040 --> 00:06:43,990 รายการถัดไป 131 00:06:43,990 --> 00:06:47,640 และเราจะดำเนินการต่อไปในขณะที่มีการวนลูป เป็นรายการในรายการที่เชื่อมโยงนี้ 132 00:06:47,640 --> 00:06:50,160 จะเกิดอะไรขึ้นถ้าเราทำลาย จากนี้สำหรับวง? 133 00:06:50,160 --> 00:06:55,110 นั่นหมายความว่าเราไม่พบรายการที่ จับคู่คำนี้ในกรณีที่ 134 00:06:55,110 --> 00:07:00,220 เรากลับเท็จเพื่อแสดงว่าเรา hashtable ที่ไม่ได้มีคำนี้ 135 00:07:00,220 --> 00:07:02,540 และนั่นคือการตรวจสอบ 136 00:07:02,540 --> 00:07:04,790 >> ดังนั้นลองมาดูที่ขนาด 137 00:07:04,790 --> 00:07:06,970 ตอนนี้ขนาดเป็นไปได้ง่ายสวย 138 00:07:06,970 --> 00:07:11,080 ตั้งแต่จำในการโหลดสำหรับแต่ละคำ เราพบว่าเราเพิ่มขึ้นทั่วโลก 139 00:07:11,080 --> 00:07:12,880 ขนาด Hashtable ตัวแปร 140 00:07:12,880 --> 00:07:16,480 ดังนั้นฟังก์ชั่นขนาดเป็นเพียงการไป เพื่อกลับตัวแปรทั่วโลก 141 00:07:16,480 --> 00:07:18,150 และที่มัน 142 00:07:18,150 --> 00:07:22,300 >> ตอนนี้ในที่สุดเราจำเป็นต้องยกเลิกการโหลด พจนานุกรมเมื่อทุกอย่างเสร็จแล้ว 143 00:07:22,300 --> 00:07:25,340 ดังนั้นเราจึงมีวิธีการที่จะทำเช่นนั้นได้อย่างไร 144 00:07:25,340 --> 00:07:30,440 ที่นี่เรากำลังวนลูป ถังทั้งหมดของตารางของเรา 145 00:07:30,440 --> 00:07:33,240 จึงมีถัง NUM_BUCKETS เป็น 146 00:07:33,240 --> 00:07:37,410 และสำหรับรายการที่เชื่อมโยงในแต่ละของเรา hashtable ที่เรากำลังจะไปห่วงกว่า 147 00:07:37,410 --> 00:07:41,070 ทั้งหมดของรายการที่เชื่อมโยง พ้นแต่ละองค์ประกอบ 148 00:07:41,070 --> 00:07:42,900 >> ตอนนี้เราจะต้องระมัดระวัง 149 00:07:42,900 --> 00:07:47,910 ดังนั้นที่นี่เรามีตัวแปรชั่วคราว ที่จัดเก็บชี้ไปข้างหน้า 150 00:07:47,910 --> 00:07:49,730 องค์ประกอบในรายการที่เชื่อมโยง 151 00:07:49,730 --> 00:07:52,140 แล้วเรากำลังจะไปฟรี องค์ประกอบปัจจุบัน 152 00:07:52,140 --> 00:07:55,990 เราต้องให้แน่ใจว่าเราทำเช่นนี้เพราะเรา ก็ไม่สามารถเป็นอิสระองค์ประกอบปัจจุบัน 153 00:07:55,990 --> 00:07:59,180 แล้วพยายามที่จะเข้าถึงตัวชี้ต่อไป ตั้งแต่ครั้งที่เราได้ปลดปล่อยมัน 154 00:07:59,180 --> 00:08:00,870 หน่วยความจำจะไม่ถูกต้อง 155 00:08:00,870 --> 00:08:04,990 >> ดังนั้นเราจึงจำเป็นที่จะทำให้รอบตัวชี้ไปยัง องค์ประกอบถัดไปแล้วเราสามารถเป็นอิสระ 156 00:08:04,990 --> 00:08:08,360 องค์ประกอบในปัจจุบันและจากนั้นเราสามารถปรับปรุง องค์ประกอบในปัจจุบันของเราให้ชี้ไปที่ 157 00:08:08,360 --> 00:08:09,550 องค์ประกอบถัดไป 158 00:08:09,550 --> 00:08:12,800 เราจะห่วงในขณะที่มีองค์ประกอบ ในรายการที่เชื่อมโยงนี้ 159 00:08:12,800 --> 00:08:15,620 เราจะทำเพื่อเชื่อมโยงทั้งหมด รายการใน hashtable ที่ 160 00:08:15,620 --> 00:08:19,460 และเมื่อเรากำลังทำกับที่เราได้ ถอดสมบูรณ์ Hashtable และ 161 00:08:19,460 --> 00:08:20,190 ที่เรากำลังทำ 162 00:08:20,190 --> 00:08:23,200 ดังนั้นจึงเป็นไปไม่ได้สำหรับขน ที่เคยกลับเท็จ 163 00:08:23,200 --> 00:08:26,470 และเมื่อเรากำลังทำเรา เพียงแค่กลับจริง 164 00:08:26,470 --> 00:08:29,000 >> ขอให้แก้ปัญหานี้ลอง 165 00:08:29,000 --> 00:08:33,070 ดังนั้นลองมาดูที่สิ่งที่เรา โหนด struct จะมีลักษณะเช่น 166 00:08:33,070 --> 00:08:36,220 ที่นี่เราเห็นเรากำลังจะมีบูล คำและโหนด struct * เด็ก 167 00:08:36,220 --> 00:08:37,470 ALPHABET วงเล็บ 168 00:08:37,470 --> 00:08:38,929 169 00:08:38,929 --> 00:08:42,020 ดังนั้นสิ่งแรกที่คุณอาจจะ สงสัยว่าทำไม ALPHABET 170 00:08:42,020 --> 00:08:44,660 เอ็ดหมายถึง 27? 171 00:08:44,660 --> 00:08:47,900 ดีจำไว้ว่าเรากำลังจะต้อง จะได้รับการจัดการอัญประกาศเดี่ยว 172 00:08:47,900 --> 00:08:51,910 เพื่อที่จะเป็นบางส่วนของ กรณีพิเศษตลอดทั้งโปรแกรมนี้ 173 00:08:51,910 --> 00:08:54,710 >> ตอนนี้จำได้ว่า Trie ที่ ใช้งานได้จริง 174 00:08:54,710 --> 00:08:59,380 สมมติว่าเรากำลังทำดัชนีคำ "แมว." แล้วจากรากของ Trie ที่ 175 00:08:59,380 --> 00:09:02,610 เราจะมองไปที่เด็ก อาร์เรย์และเรากำลังจะไปดูที่ 176 00:09:02,610 --> 00:09:08,090 ดัชนีที่สอดคล้องกับตัวอักษร C. เพื่อที่ว่าจะได้รับการจัดทำดัชนีที่ 2 177 00:09:08,090 --> 00:09:11,530 ได้รับเพื่อที่จะว่า ให้เราโหนดใหม่ 178 00:09:11,530 --> 00:09:13,820 แล้วเราจะทำงานจากโหนดที่ 179 00:09:13,820 --> 00:09:17,770 >> เพื่อให้โหนดที่เราอีกครั้ง จะไปดูที่แถวเด็ก 180 00:09:17,770 --> 00:09:22,110 และเรากำลังจะไปดูที่ดัชนีศูนย์ ให้ตรงกับในแมว 181 00:09:22,110 --> 00:09:27,170 ดังนั้นแล้วเราจะไปที่โหนดที่ และได้รับโหนดที่เรากำลังจะ 182 00:09:27,170 --> 00:09:31,090 ที่จะมองไปที่ปลายมันสอดคล้อง ทีและย้ายไปยังโหนดที่ 183 00:09:31,090 --> 00:09:35,530 ในที่สุดเราได้ดูสมบูรณ์ ผ่านคำพูดของเรา "แมว." และตอนนี้ bool 184 00:09:35,530 --> 00:09:40,960 คำที่ควรจะระบุว่า คำที่กำหนดนี้เป็นจริงคำว่า 185 00:09:40,960 --> 00:09:43,470 >> ดังนั้นเราจึงไม่จำเป็นต้องมีเหตุผลว่ากรณีพิเศษหรือไม่ 186 00:09:43,470 --> 00:09:47,700 สิ่งที่ดีของคำว่า "ภัยพิบัติ" อยู่ในพจนานุกรมของเรา แต่ 187 00:09:47,700 --> 00:09:50,150 คำว่า "แมว" ไม่ได้คืออะไร 188 00:09:50,150 --> 00:09:54,580 มากและกำลังมองหาเพื่อดูว่าคำว่า "แมว" อยู่ในพจนานุกรมของเราเรา 189 00:09:54,580 --> 00:09:59,970 จะประสบความสำเร็จมองผ่าน ดัชนี C--T โหนดในภูมิภาค 190 00:09:59,970 --> 00:10:04,290 แต่นั่นเป็นเพียงเพราะภัยพิบัติ ที่เกิดขึ้นในการสร้างโหนดในทาง 191 00:10:04,290 --> 00:10:07,190 จาก C-A-T, ทุกวิธีการ ในตอนท้ายของคำว่า 192 00:10:07,190 --> 00:10:12,020 ดังนั้นคำว่าบูลถูกนำมาใช้เพื่อแสดงให้เห็นว่า ตำแหน่งนี้โดยเฉพาะอย่างยิ่ง 193 00:10:12,020 --> 00:10:14,310 จริงแสดงให้เห็นคำ 194 00:10:14,310 --> 00:10:15,140 >> ขวาทั้งหมด 195 00:10:15,140 --> 00:10:19,310 ดังนั้นตอนนี้ที่เรารู้ว่ามันเป็น Trie ที่ จะมีลักษณะให้ดูที่ 196 00:10:19,310 --> 00:10:20,730 ฟังก์ชั่นโหลด 197 00:10:20,730 --> 00:10:24,610 ดังนั้นภาระจะกลับบูล เพื่อว่าเราจะประสบความสำเร็จหรือ 198 00:10:24,610 --> 00:10:26,720 ประสบความสำเร็จในการโหลดพจนานุกรม 199 00:10:26,720 --> 00:10:30,460 และสิ่งนี้เป็นไปได้ในพจนานุกรม ที่เราต้องการโหลด 200 00:10:30,460 --> 00:10:33,930 >> ดังนั้นสิ่งแรกที่เราจะทำคือเปิด ขึ้นพจนานุกรมสำหรับการอ่านที่ 201 00:10:33,930 --> 00:10:36,160 และเราจะต้องทำให้แน่ใจว่า เราไม่ได้ล้มเหลว 202 00:10:36,160 --> 00:10:39,580 ดังนั้นถ้าพจนานุกรมไม่ได้ เปิดประสบความสำเร็จก็จะกลับ 203 00:10:39,580 --> 00:10:42,400 null ในกรณีที่เรากำลัง จะกลับเท็จ 204 00:10:42,400 --> 00:10:47,230 แต่สมมติว่ามันประสบความสำเร็จ เปิดแล้วเราจริงสามารถอ่าน 205 00:10:47,230 --> 00:10:48,220 ผ่านพจนานุกรม 206 00:10:48,220 --> 00:10:50,880 >> ดังนั้นสิ่งแรกที่เรากำลังจะ ต้องการที่จะทำคือการที่เรามีนี้ 207 00:10:50,880 --> 00:10:52,500 รากตัวแปรทั่วโลก 208 00:10:52,500 --> 00:10:56,190 ตอนนี้รากเป็นไปได้โหนด * 209 00:10:56,190 --> 00:10:59,760 มันเป็นด้านบนของ Trie ที่ของเราที่เรากำลัง จะวนผ่าน 210 00:10:59,760 --> 00:11:02,660 ดังนั้นสิ่งแรกที่เรากำลังจะ เพื่อต้องการที่จะทำคือการจัดสรร 211 00:11:02,660 --> 00:11:04,140 หน่วยความจำสำหรับรากของเรา 212 00:11:04,140 --> 00:11:07,980 ขอให้สังเกตว่าเรากำลังใช้ calloc ฟังก์ชั่นซึ่งเป็นพื้นเดียวกัน 213 00:11:07,980 --> 00:11:11,500 เป็นฟังก์ชัน malloc ยกเว้นมัน รับประกันว่าจะให้กลับสิ่งที่เป็น 214 00:11:11,500 --> 00:11:13,180 zeroed สมบูรณ์ออก 215 00:11:13,180 --> 00:11:17,290 ดังนั้นหากเราใช้ malloc เราจะต้อง ผ่านทุกตัวชี้ในของเรา 216 00:11:17,290 --> 00:11:20,160 โหนดและให้แน่ใจว่า พวกเขากำลัง null ทั้งหมด 217 00:11:20,160 --> 00:11:22,710 ดังนั้น calloc จะทำเพื่อเรา 218 00:11:22,710 --> 00:11:26,330 >> ตอนนี้เช่นเดียวกับ malloc เราต้องทำ ให้แน่ใจว่าการจัดสรรเป็นจริง 219 00:11:26,330 --> 00:11:27,520 ที่ประสบความสำเร็จ 220 00:11:27,520 --> 00:11:29,990 ถ้ากลับมาเป็นโมฆะแล้วเรา จำเป็นต้องปิดหรือพจนานุกรม 221 00:11:29,990 --> 00:11:32,100 ไฟล์และกลับเท็จ 222 00:11:32,100 --> 00:11:36,835 ดังนั้นสมมติว่าการจัดสรรที่ ประสบความสำเร็จเรากำลังจะใช้โหนด * 223 00:11:36,835 --> 00:11:40,270 เคอร์เซอร์ย้ำผ่าน Trie ที่ของเรา 224 00:11:40,270 --> 00:11:43,890 ดังนั้นรากของเราไม่เคยไปเปลี่ยน แต่เรากำลังจะใช้เคอร์เซอร์ไป 225 00:11:43,890 --> 00:11:47,875 จริงไปจากโหนดไปยังโหนด 226 00:11:47,875 --> 00:11:50,940 >> ดังนั้นในเรื่องนี้สำหรับวงเรากำลังอ่าน ผ่านไฟล์พจนานุกรม 227 00:11:50,940 --> 00:11:53,670 และเรากำลังใช้ fgetc 228 00:11:53,670 --> 00:11:56,290 fgetc จะคว้าเดียว ตัวอักษรจากไฟล์ 229 00:11:56,290 --> 00:11:59,370 เราจะยังคงโลภ ตัวละครในขณะที่เราไม่ถึง 230 00:11:59,370 --> 00:12:01,570 ส่วนท้ายของแฟ้ม 231 00:12:01,570 --> 00:12:03,480 >> มีสองกรณีที่เราจำเป็นต้องจัดการกับเป็น 232 00:12:03,480 --> 00:12:06,610 แรกถ้าตัวละคร ไม่ได้ขึ้นบรรทัดใหม่ 233 00:12:06,610 --> 00:12:10,450 เพื่อให้เรารู้ว่ามันเป็นสายใหม่แล้ว เรากำลังจะย้ายไปยังคำใหม่ 234 00:12:10,450 --> 00:12:15,240 แต่สมมติว่ามันไม่ได้เป็นสายใหม่แล้ว ที่นี่เราต้องการที่จะคิดออก 235 00:12:15,240 --> 00:12:18,380 ดัชนีที่เรากำลังจะเข้ามาในดัชนี ในอาร์เรย์ที่เด็ก 236 00:12:18,380 --> 00:12:19,810 เรามองที่ก่อน 237 00:12:19,810 --> 00:12:23,880 >> ดังนั้นเช่นฉันกล่าวก่อนที่เราต้อง กรณีพิเศษเครื่องหมายวรรคตอน 238 00:12:23,880 --> 00:12:26,220 สังเกตเห็นเรากำลังใช้ประกอบ ผู้ประกอบการที่นี่ 239 00:12:26,220 --> 00:12:29,580 ดังนั้นเรากำลังจะอ่านนี้ถ้า ตัวละครที่เราอ่านเป็น 240 00:12:29,580 --> 00:12:35,330 เครื่องหมายวรรคตอนนั้นเรากำลังจะตั้ง ดัชนี = "ALPHABET" -1 ซึ่งจะ 241 00:12:35,330 --> 00:12:37,680 เป็นดัชนีที่ 26 242 00:12:37,680 --> 00:12:41,130 >> อื่นถ้ามันไม่ได้เป็นเครื่องหมายวรรคตอนมี เราจะกำหนดดัชนี 243 00:12:41,130 --> 00:12:43,760 เท่ากับค - 244 00:12:43,760 --> 00:12:49,030 ดังนั้นอย่าลืมกลับมาจากก่อนหน้านี้พีชุด ค - จะให้เรา 245 00:12:49,030 --> 00:12:53,410 ตำแหน่งเรียงตามตัวอักษร C. ดังนั้นหาก C เป็นตัวอักษรนี้จะ 246 00:12:53,410 --> 00:12:54,700 ให้เราเป็นศูนย์ดัชนี 247 00:12:54,700 --> 00:12:58,120 สำหรับตัวอักษร B จะให้ เราดัชนี 1 และอื่น ๆ 248 00:12:58,120 --> 00:13:03,010 >> ดังนั้นนี้จะช่วยให้เราเข้ามาในดัชนี เด็กแถวที่เราต้องการ 249 00:13:03,010 --> 00:13:08,890 ตอนนี้ถ้าดัชนีนี้เป็นโมฆะในปัจจุบัน เด็กที่หมายความว่าโหนด 250 00:13:08,890 --> 00:13:11,830 ไม่ได้อยู่ในขณะนี้ จากเส้นทางที่ 251 00:13:11,830 --> 00:13:15,160 ดังนั้นเราจึงจำเป็นที่จะจัดสรร โหนดสำหรับเส้นทางที่ 252 00:13:15,160 --> 00:13:16,550 นั่นคือสิ่งที่เราจะทำที่นี่ 253 00:13:16,550 --> 00:13:20,690 >> ดังนั้นเราจะใช้อีกครั้ง calloc ฟังก์ชั่นเพื่อที่เราจะได้ไม่ต้อง 254 00:13:20,690 --> 00:13:22,880 ศูนย์ออกคำแนะนำทั้งหมด 255 00:13:22,880 --> 00:13:27,240 อีกครั้งและเราจำเป็นต้องตรวจสอบ calloc ที่ไม่ได้ล้มเหลว 256 00:13:27,240 --> 00:13:30,700 หาก calloc ไม่ล้มเหลวแล้วเราต้อง ขนทุกอย่างที่ปิดของเรา 257 00:13:30,700 --> 00:13:32,820 พจนานุกรมและกลับเท็จ 258 00:13:32,820 --> 00:13:40,050 ดังนั้นสมมติว่ามันไม่ได้ล้มเหลวแล้ว นี้จะสร้างเด็กใหม่สำหรับเรา 259 00:13:40,050 --> 00:13:41,930 แล้วเราจะไปที่เด็ก 260 00:13:41,930 --> 00:13:44,960 เคอร์เซอร์ของเราจะย้ำ ลงไปที่เด็ก 261 00:13:44,960 --> 00:13:49,330 >> ตอนนี้ถ้านี้ไม่ว่างที่จะเริ่มต้นด้วย แล้วเคอร์เซอร์ก็สามารถย้ำ 262 00:13:49,330 --> 00:13:52,590 ลงไปที่เด็กที่ไม่จริง มีอะไรที่จะจัดสรร 263 00:13:52,590 --> 00:13:56,730 นี้เป็นกรณีที่เกิดขึ้นครั้งแรกของเรา จัดสรรคำว่า "แมว." และ 264 00:13:56,730 --> 00:14:00,330 นั่นหมายความว่าเมื่อเราไปในการจัดสรร "ภัยพิบัติ" เราไม่จำเป็นต้องสร้าง 265 00:14:00,330 --> 00:14:01,680 โหนดสำหรับ C-A-T อีกครั้ง 266 00:14:01,680 --> 00:14:04,830 พวกเขามีอยู่แล้ว 267 00:14:04,830 --> 00:14:06,080 >> สิ่งนี้อื่นคืออะไร 268 00:14:06,080 --> 00:14:10,480 นี้เป็นเงื่อนไขที่เป็นค เครื่องหมาย n โดยที่คเป็นบรรทัดใหม่ 269 00:14:10,480 --> 00:14:13,710 ซึ่งหมายความว่าเราประสบความสำเร็จ เสร็จสิ้นคำ 270 00:14:13,710 --> 00:14:16,860 ตอนนี้สิ่งที่เราต้องการจะทำเมื่อเรา เสร็จคำประสบความสำเร็จ 271 00:14:16,860 --> 00:14:21,100 เรากำลังจะใช้ฟิลด์คำนี้ ภายในของโหนด struct ของเรา 272 00:14:21,100 --> 00:14:23,390 เราต้องการที่จะกำหนดว่าให้เป็นจริง 273 00:14:23,390 --> 00:14:27,150 ดังนั้นที่ระบุว่าโหนดนี้ แสดงที่ประสบความสำเร็จ 274 00:14:27,150 --> 00:14:29,250 คำคำที่เกิดขึ้นจริง 275 00:14:29,250 --> 00:14:30,940 >> ขณะนี้การตั้งค่าที่เป็นจริง 276 00:14:30,940 --> 00:14:35,150 เราต้องการที่จะตั้งค่าเคอร์เซอร์ของเราไปยังจุด ที่จุดเริ่มต้นของ Trie อีกครั้ง 277 00:14:35,150 --> 00:14:40,160 และในที่สุดเพิ่มในพจนานุกรมของเรา ขนาดเนื่องจากเราพบว่าการทำงานอื่น 278 00:14:40,160 --> 00:14:43,230 ดังนั้นเรากำลังจะเก็บทำที่ การอ่านในตัวละครโดยตัวอักษร 279 00:14:43,230 --> 00:14:49,150 สร้างโหนดใหม่ใน Trie ที่เราและ สำหรับแต่ละคำในพจนานุกรมจน 280 00:14:49,150 --> 00:14:54,020 ในที่สุดเราก็มาถึง C! = EOF ซึ่งใน กรณีที่เราแยกออกจากแฟ้ม 281 00:14:54,020 --> 00:14:57,050 >> ขณะนี้มีสองกรณีที่อยู่ภายใต้ ซึ่งเราอาจจะมีการตี EOF 282 00:14:57,050 --> 00:15:00,980 แรกคือถ้ามีข้อผิดพลาด อ่านจากแฟ้ม 283 00:15:00,980 --> 00:15:03,470 ดังนั้นหากมีข้อผิดพลาดเรา ต้องทำโดยทั่วไป 284 00:15:03,470 --> 00:15:06,460 ขนทุกอย่างใกล้ชิด ไฟล์กลับเท็จ 285 00:15:06,460 --> 00:15:09,810 สมมติว่ามีไม่ได้เป็นข้อผิดพลาดที่ ก็หมายความว่าเราจะตีจุดสิ้นสุดของ 286 00:15:09,810 --> 00:15:13,750 แฟ้มในกรณีที่เราปิด ไฟล์และกลับจริงตั้งแต่เรา 287 00:15:13,750 --> 00:15:17,330 พจนานุกรมโหลดเสร็จเรียบร้อยแล้ว ใน Trie ของเรา 288 00:15:17,330 --> 00:15:20,170 >> ดังนั้นตอนนี้ขอตรวจสอบการตรวจสอบ 289 00:15:20,170 --> 00:15:25,156 มองไปที่ฟังก์ชั่นการตรวจสอบเราจะเห็น การตรวจสอบที่เป็นไปเพื่อกลับไปบูล 290 00:15:25,156 --> 00:15:29,680 เพื่อกลับจริงถ้าคำนี้ว่ามันเป็น ถูกส่งอยู่ใน Trie ที่ของเรา 291 00:15:29,680 --> 00:15:32,110 มันกลับเท็จอย่างอื่น 292 00:15:32,110 --> 00:15:36,050 ดังนั้นวิธีการที่คุณตรวจสอบว่า คำนี้อยู่ใน Trie ของเราหรือไม่ 293 00:15:36,050 --> 00:15:40,190 >> เรามาดูกันว่าที่นี่เช่นเดียวกับก่อนหน้านี้ ที่เรากำลังจะใช้เคอร์เซอร์เพื่อย้ำ 294 00:15:40,190 --> 00:15:41,970 ผ่าน Trie ที่ของเรา 295 00:15:41,970 --> 00:15:46,600 ตอนนี้ที่นี่เรากำลังจะย้ำ เหนือคำทั้งหมดของเรา 296 00:15:46,600 --> 00:15:50,620 ดังนั้น iterating กว่าคำที่เรามีอดีตที่ผ่านมา เราจะตรวจสอบ 297 00:15:50,620 --> 00:15:56,400 ดัชนีลงในอาร์เรย์ที่เด็ก สอดคล้องกับคำวงเล็บ I. ดังนั้นนี่ 298 00:15:56,400 --> 00:15:59,670 จะมีลักษณะเหมือนกับ ภาระที่ถ้าคำ [i] 299 00:15:59,670 --> 00:16:03,310 เป็นเครื่องหมายวรรคตอนแล้วเราต้องการ ที่จะใช้ดัชนี "ALPHABET" - 1 300 00:16:03,310 --> 00:16:05,350 เพราะเราพิจารณาแล้วว่าที่ เป็นที่ที่เราจะเก็บ 301 00:16:05,350 --> 00:16:07,100 apostrophes 302 00:16:07,100 --> 00:16:11,780 >> อื่นที่เรากำลังจะใช้สองคำที่ต่ำกว่า วงเล็บ I. ดังนั้นจำคำที่สามารถ 303 00:16:11,780 --> 00:16:13,920 มีมูลค่าโดยพลการ 304 00:16:13,920 --> 00:16:17,540 และดังนั้นเราจึงต้องการที่จะทำให้แน่ใจว่าเรากำลัง ใช้รุ่นเล็กของสิ่งที่ 305 00:16:17,540 --> 00:16:21,920 แล้วลบจากที่ 'อีก อีกครั้งให้เราตามตัวอักษร 306 00:16:21,920 --> 00:16:23,880 ตำแหน่งของตัวละครที่ 307 00:16:23,880 --> 00:16:27,680 เพื่อที่จะเป็นดัชนีของเรา เป็นอาร์เรย์เด็ก 308 00:16:27,680 --> 00:16:32,420 >> และตอนนี้ถ้าดัชนีเป็นเด็กที่ อาร์เรย์เป็นโมฆะนั่นหมายความว่าเรา 309 00:16:32,420 --> 00:16:34,990 ไม่สามารถดำเนินการต่อ iterating ลง Trie ที่ของเรา 310 00:16:34,990 --> 00:16:38,870 หากเป็นกรณีที่คำนี้ไม่สามารถ อาจจะอยู่ใน Trie ที่ของเรา 311 00:16:38,870 --> 00:16:42,340 เพราะถ้ามันเป็นที่จะ หมายความว่าจะมีเส้นทาง 312 00:16:42,340 --> 00:16:43,510 ลงไปที่คำว่า 313 00:16:43,510 --> 00:16:45,290 และคุณจะไม่พบโมฆะ 314 00:16:45,290 --> 00:16:47,850 ดังนั้นพบ null เรากลับเท็จ 315 00:16:47,850 --> 00:16:49,840 เป็นคำที่ไม่ได้อยู่ในพจนานุกรม 316 00:16:49,840 --> 00:16:53,660 ถ้ามันไม่ได้เป็นโมฆะแล้วเรา จะยังคง iterating 317 00:16:53,660 --> 00:16:57,220 >> ดังนั้นเรากำลังจะออกมีเคอร์เซอร์ ให้ชี้ไปที่โดยเฉพาะอย่างยิ่ง 318 00:16:57,220 --> 00:16:59,760 โหนดที่ดัชนีที่ 319 00:16:59,760 --> 00:17:03,150 เราให้ทำอย่างนั้นตลอด ทั้งคำสมมติว่า 320 00:17:03,150 --> 00:17:03,950 เราไม่เคยตี null 321 00:17:03,950 --> 00:17:07,220 ซึ่งหมายความว่าเราสามารถที่จะได้รับผ่าน ทั้งคำและหา 322 00:17:07,220 --> 00:17:08,920 โหนดในลองของเรา 323 00:17:08,920 --> 00:17:10,770 แต่เราไม่ได้ทำมากยัง 324 00:17:10,770 --> 00:17:12,290 >> เราไม่ได้ต้องการเพียงแค่กลับจริง 325 00:17:12,290 --> 00:17:14,770 เราต้องการที่จะกลับเคอร์เซอร์> คำ 326 00:17:14,770 --> 00:17:18,980 ตั้งแต่จำอีกครั้งคือ "แมว" ไม่ได้ ในพจนานุกรมของเราและ "ภัยพิบัติ" 327 00:17:18,980 --> 00:17:22,935 คือแล้วเราจะประสบความสำเร็จที่เราได้รับ ผ่านคำว่า "แมว." แต่เคอร์เซอร์ 328 00:17:22,935 --> 00:17:25,760 คำจะเป็นเท็จและไม่เป็นความจริง 329 00:17:25,760 --> 00:17:30,930 ดังนั้นเราจึงกลับคำเคอร์เซอร์จะแสดงให้เห็น ว่าโหนดนี้เป็นจริงคำว่า 330 00:17:30,930 --> 00:17:32,470 และที่มันสำหรับการตรวจสอบ 331 00:17:32,470 --> 00:17:34,250 >> เพื่อขอตรวจสอบขนาด 332 00:17:34,250 --> 00:17:37,350 ดังนั้นขนาดเป็นไปได้ง่ายสวย ตั้งแต่จำในการโหลดเรา 333 00:17:37,350 --> 00:17:41,430 เพิ่มขึ้นขนาดพจนานุกรม คำที่เราพบกัน 334 00:17:41,430 --> 00:17:45,350 ดังนั้นขนาดเป็นเพียงจะ กลับพจนานุกรมขนาด 335 00:17:45,350 --> 00:17:47,390 และที่มัน 336 00:17:47,390 --> 00:17:50,590 >> ดังนั้นในที่สุดเราได้ปลดปล่อย 337 00:17:50,590 --> 00:17:55,100 ดังนั้นขนเรากำลังจะใช้ ฟังก์ชั่นซ้ำที่จะทำจริงทั้งหมด 338 00:17:55,100 --> 00:17:56,530 การทำงานของเรา 339 00:17:56,530 --> 00:17:59,340 ดังนั้นการทำงานของเราเป็นไป ได้รับการเรียกร้องให้ unloader 340 00:17:59,340 --> 00:18:01,650 สิ่งที่ unloader จะทำอย่างไร 341 00:18:01,650 --> 00:18:06,580 เรามาดูกันที่นี่ unloader ที่เป็นไป ย้ำกว่าทั้งหมดของเด็กที่ 342 00:18:06,580 --> 00:18:08,410 โหนดนี้โดยเฉพาะอย่างยิ่ง 343 00:18:08,410 --> 00:18:11,750 และถ้าโหนดเด็กไม่ null แล้วเรากำลังจะ 344 00:18:11,750 --> 00:18:13,730 ขนโหนดเด็ก 345 00:18:13,730 --> 00:18:18,010 >> ดังนั้นนี่คือคุณซ้ำขน ทั้งหมดของลูกหลานของเรา 346 00:18:18,010 --> 00:18:21,080 เมื่อเรากำลังตรวจสอบว่าทั้งหมดของลูกหลานของเรา ได้รับการยกเลิกการโหลดแล้วเรา 347 00:18:21,080 --> 00:18:25,210 สามารถฟรีตัวเองเพื่อ ปลดปล่อยตัวเอง 348 00:18:25,210 --> 00:18:29,460 นี้จะทำงานซ้ำ ขน Trie ทั้งหมด 349 00:18:29,460 --> 00:18:32,850 และแล้วเมื่อที่ทำ เราก็สามารถกลับจริง 350 00:18:32,850 --> 00:18:34,210 ขนไม่สามารถล้มเหลว 351 00:18:34,210 --> 00:18:35,710 เราก็พ้นสิ่งที่ 352 00:18:35,710 --> 00:18:38,870 ดังนั้นเมื่อเราดำเนินการเสร็จแล้วพ้น ทุกอย่างกลับจริง 353 00:18:38,870 --> 00:18:40,320 และที่มัน 354 00:18:40,320 --> 00:18:41,080 ชื่อของฉันคือร็อบ 355 00:18:41,080 --> 00:18:42,426 และนี่คือสะกด 356 00:18:42,426 --> 00:18:47,830 >> [เล่นดนตรี]