DAVID Malan: בסדר. אז זה CS50, ואת זה הוא עכשיו תחילת השבוע שלושה. אז עד עכשיו, יש לנו כבר בכתיבת תוכניות בשפת C שנראה קצת משהו כזה כאן. אז יש לנו כמה חד כולל בחלקו העליון. יש לנו int, עיקרי, חלל, ו אז משהו לעשות באמצע, כמה קצת קוד בתוך של פונקציה ש. אבל המפתח היה העובדה ש אנחנו כבר אומרים פה תהום. אז חלל, כל הזמן הזה, מציין כי תכנית זו, כאשר לרוץ, ניתן להפעיל רק באמצעות שמו. לא ניתן להקליד כל מילות אחרות או מספרים אחרי השם של התכנית כאשר מפעיל אותו. כך, למשל, אם התכנית היתה מלוקט לתוך קובץ בשם שלום, אתה יכול לעשות ./hello, אבל זה אותו. הדרך שאתה יכול רק לספק קלט לתכנית זו הוא על ידי קריאה לפונקציה. לדוגמא, מה פונקציה יש לנו כבר משתמש עד כה כדי לקבל קלט מהמשתמש? קהל: קבל מחרוזת. DAVID Malan: כדי לקבל מחרוזת, או לקבל int, או שראית אחרים, אפילו אם לא השתמש בהם עדיין, כמו לקבל ארוך, ארוך וכדומה. אבל נניח שאנחנו למעשה רוצה להתחיל תוכניות כתיבה, כי הם קצת יותר תכליתי, ולמען האמת, קצת יותר כמו פקודות שיש לך היה מקבל, אני מקווה, קצת רגיל. כמו Dropbox החלל cd. זה, כמובן, שינויים במדריך שלך, בהנחה אתה בביתו של ג'ון הרווארד ספרייה, לתיקיית Dropbox שלך. בינתיים, פיקוד כזה יוצר ספרייה חדשה בשם pset2, כפי שאולי כבר או בקרוב לבעיה להגדיר שני. הפוך שלום, כמובן, היא הפקודה שבונה תכנית בשם שלום מקובץ שנקרא שלום הנקודה ג. ובכל אחד מאלה מקרים, עכשיו, שהיו לנו לספק ויכוח על מה שנקרא שורת הפקודה, הפקודה המהבהבת, אז ודא שיודע מה לבנות, וכך mkdir שיודע מה תיקייה כדי ליצור, וכך cd שיודע שבו אתה רוצה ללכת. אבל עד עכשיו, אנחנו חוזרים ואומרים כי, פונקצית ברירת המחדל שלך העיקרית, יש ביטוי חלל בתוך הסוגריים אלה, מה שאומר שזה לא יכול לקחת את כל טיעונים. אז החל מיום, מה שאנחנו הולכים לעשות הוא, אנחנו הולכים להתחיל תמיכה דברים כמו גם זה. למעשה, במקרה, זה שבו אתה לא בדרך כלל להקליד באופן ידני, הפוך כבר עושה את זה עבורנו, אין אחד אבל אחד, שתיים, שלוש נוסף מחרוזות אחרי התכנית של שם צלצול. אז איך אנחנו משיגים את זה? ובכן, החל מיום, במקרים שבם אנחנו רוצים לספק קלט באמצעות מה שנקרא שורת הפקודה, אנחנו הולכים להתחיל להוסיף כאן מה שיש בyellow-- החלפת חלל עם פסיק argc int argv מחרוזת סוגר קרוב סוגר פתוח. עכשיו זה מעניין עבור כמה סיבות. אחד, זה הולך לתת לנו לכתוב תוכניות שהם קצת יותר דינמיים. אבל, יותר משכנע, זה הולך להיפתח עכשיו שיחה כל מה מערכים יכולים באמת לשמש, למה מחרוזת באמת מתחת למכסת המנוע, עד השבוע הבא, כאשר אנחנו מתחילים צלילה באפילו עמוק יותר לגבי איך המכונה מה שהופך את כל העבודה את החומר הזה. אבל לעת עתה, בואו לצייר, אולי, תמונה. כשאתה כותב תכנית עם הכריז עיקרי בדרך זו, באופן שראשי לוקח שני טיעונים, int and-- מה סוג הנתונים הוא הטיעון השני? קהל: מערך. DAVID Malan: מערך. כך זה נראה במבט ראשון כמו זה מחרוזת, אבל שים לב לסוגריים מרובעים. נזכיר פעם האחרונה שהצגנו הרעיון של מערך. ומערכים להשתמש בסוגריים מרובעים בכמה הקשרים. אתה יכול להשתמש בריבוע סוגריים להיכנס למערך ולקבל אלמנט מסוים, כמו סוגר 0 או 1 או סוגר סוגר 2. אבל ראינו, אם לזמן קצר, בשבוע שעבר, כי אתה גם השתמש בסוגריים מרובעים אלה להכריז על הגודל של מערך, אם אתה יודע מראש כמה ints או כמה חוטים או מה שאתה רוצה בעצם. אז מתברר של שם הקשר שלישי כאן שאין לו מספר בתוך של סוגריים מרובעים. כאשר אתה מציין, כמו שעשיתי כאן, שמו של משהו כמו argv, וזה רק דרך מפוארת של אומר וקטור טיעון, ש היא דרך מפוארת נוספת של אומר מערך של טיעונים, סוגר קרוב סוגר פתוח רק משמעות הדבר היא שאתה לא בהכרח לדעת מראש עד כמה גדול המערך הולך להיות, אבל אתה יודע שזה הולך להיות מערך. אז אם אתה לא יודע מספר לא לשים אותו שם, לסוגר קרוב סוגר פתוח משמעות הדבר היא כי argv הוא לא מחרוזת, אבל מערך של מחרוזות. אז מבחינה תחבירית, אם אתה נזכר בשבוע שעבר, זה מאוד דומה לאמירה משהו כמו גילאי int סוגר פתוח, ואז משהו לאחר מכן. אז מה זה נראה? בואו ממש לצייר תמונה. לכן, כאשר אתה מפעיל תכנית זו עם ראשי לאחר ששני טיעונים שהוגדרו בתוך של הסוגריים האלה, אתה יש לי בעצם לפחות שני גושים זיכרון מסר לך מתחת למכסה המנוע. אחת, כאני יהיה מושך כמלבן זה, הוא הולך להיקרא argc. ובדיוק כפי שסיכום מהיר, מה הוא סוג הנתונים של תכנית +? אז זה int. אז מספר הולך ללכת בסיבובי argc-- כי עומד לספירת טיעון. בינתיים, אני כבר נמשך argv כמערך. ואני לא ממש יודע כמה זמן זה הולך להיות, כך למטרות של היום dot dot dot. זה יכול להגיע לכמה אורך. אבל אני כבר כאן בתמונה לפחות ארבעה מלבנים. אז argv נתח של זיכרון שחנויות מחרוזת מחרוזת dot dot dot, וargc הוא רק חתיכה אחת זיכרון למספר שלם. אז עכשיו, בואו נהיה קצת יותר מדויק. אם, כאשר יש לי מיתרים במערך זה, הנקרא argv, אני רוצה לקבל עליהם בנפרד, בדיוק כמו בשבוע שעבר, אנחנו הולכים להשתמש בסימון כמו סוגר argv 0 כדי לקבל את הדבר הראשון מערך. סוגר argv 1 כדי לקבל את דבר שני, וכן הלאה. המפתח כאן להיות אנחנו עדיין 0 indexed-- אנחנו עדיין סופרים מ0. אז עכשיו בואו למעשה לשים משהו בזה. אם הייתי לקמפל תכנית בשם שלום מקובץ שנקרא שלום הנקודה ג, ואז אני רץ תכנית ש עם נקודה לקצץ שלום, מה עושה המחשב, המחשב הנייד שלי שלי, נראה כמו מתחת למכסת המנוע הרגע אני רץ נקודה לקצץ שלום וקש Enter? ובכן, זה אולי מה שאנחנו יכולים לתאר כתוכן של המחשב שלך של זיכרון, או זיכרון RAM-- גישה אקראית. במילים אחרות, המחשב, איכשהו בשבילך באורח פלא, מכניס argc המספר 1, argcount AKA, וזה מכניס את המחרוזת, פשוטו כמשמעו, ./hello בסוגר argv 0. אין לי מושג, בכנות, מה בסוגר argv 1 או 2 או 3, כי אם למשתמש יש לא הקלדה כל דבר חוץ מזה ./hello, אנחנו הולכים להניח כי אלה הם ערכי אשפה הסביר ביותר, אם אפשר לומר כך. נתחים אלה של זיכרון קיימות, אבל זה לא תלוי בנו להסתכל עליהם, משום ש argcount הוא רק אחד. עכשיו, בינתיים, אם אני לכתוב להפעיל תכנית אחרת, cd, שהוא יותר כמו שצריך הפקודה, בחלל cd prompt-- המהבהב שלך Dropbox-- כאשר אני מפעיל את זה, בצורה יעילה, כאשר תכנית cd מנוהלת, argc, בתוך הזיכרון של המחשב שלי, הוא ל רוב קצרצר שני המספר 2. ולאחר מכן argv o הסוגר יש cd, סוגר argv 1 יש Dropbox, ואז כמובן את הפקודה משלים, ולכן כל הזיכרון הזה בעצם נעלמת ו משמש למשהו אחר. ובגלל זה אני אומר רק שבריר שני. בינתיים, אם אנחנו עושים pset2 mkdir, התמונה נראית כמעט אותו הדבר, אבל עם מחרוזות שונות בתוך argv. אם אני עושה את מקף צלצול שלום שלום הנקודה ג, אותו רעיון. יותר דברים מלאים ל argv, וargc, כמובן, הוא 4. אז במילים אחרות, למרות שמערך זה יכול להיות נקודה נקודת נקודה, של כמה אורך משתנה, אם אפשר לומר כך, אתה תמיד יודע איפה הסוף של זה הוא, כי argc הולך לספר לכם באיזה שלב אתה חייב להפסיק מסתכל על אלמנטים בargv. אתה יכול רק להסתכל על ארבעה בסך הכל במקרה הזה. אז בואו עכשיו נסתכל ב, אולי, תכנית פשוטה. אחד שרק אומר שלום למישהו כמו Zamyla. אז אני טוען שאני הולך לכתוב תכנית ברגע שדרכו אני יכול לעשות ./hello החלל Zamyla, ולאחר מכן אני רוצה התכנית שלי להדפיס משהו סופר פשוט כמו "שלום, Zamyla." עכשיו בעבר השתמשתי getstring. אז בעבר, גם אם אתה חדש בתכנות, רוב הסיכויים הם שאתה יכול להלהיב תכנית שמשתמשת בgetstring ולאחר מכן משתמש printf להגיד שלום לZamyla. אבל בואו לא להשתמש getstring הפעם. תן לי במקום ללכת לAppliant וכן כולל h נקודה אני O הסטנדרטי. תן לי גם כולל h נקודת CS50. עכשיו int ראשי, ועכשיו אני לא הולך לעשות את החלל היום. במקום זאת, אני הולך לעשות תכנית + int סוגר קרוב סוגר פתוח argv המחרוזת, לא מפרט מספר. ועכשיו כאן הוא שלי מה שנקרא לעשות. מה שאני הולך לעשות עכשיו הוא, אני הולך לעשות קצת קפיצה של אמונה, אני הולך להניח שהמשתמש של הולך להשתמש בתכנית זו בצורה נכונה, ואני פשוט הולך ל לעשות printf שלום, sn%. כך ששום דבר חדש שם. אבל אני רוצה עכשיו לשים את מה שמילה משתמש מקליד אחרי השם של התכנית. אז אם אני עושה ./hello חלל Zamyla, אני רוצה איכשהו תיכנותי גישה במירכאות, "Zamyla." אז אני יכול להיכנס לוקטור הטיעון שלי, המערך שלי של מחרוזות, ואם הפקודה, שוב, היה ./hello חלל Zamyla, מה מספר אני רוצה לשים בargv כאן? קהל: 1. DAVID Malan: 1, משום ש סוגר 0 מתברר הולך להיות שם של התכנית, כפי שראינו. אז סוגר 1 היא המילה הראשונה כי אני, המשתמש, הקליד. אני הולך קדימה ולשמור את זה. אני הולך להיכנס לתיקייה שלי שבו אני מיקמתי בקובץ זה. אני הולך לעשות לעשות שלום 3. אישור של Comp IO. ./hello Zamyla הזן. מה עשה לא בסדר? תפסו אותי בהפתעה את עצמי לרגע שיש. מה עשה לא בסדר? קהל: שם. DAVID Malan: הקובץ של נקרא למעשה hello3.c. ואני עשיתי את זה רק בשביל עקביות, כי יש לנו hello.c של היה ב העבר בקוד באינטרנט. אז בואו לתקן ./hello זה סוגר מקף 3 Zamyla. הזן. ועכשיו יש לנו שלום, Zamyla. בינתיים, אני יכול לשנות את זה ל להיות רוב, או בעצם כל מילה אחרת. אבל הבה נבחן מקרה פינה. מה שהיה אפשר לצפות שיקרה אם אני לא מקליד את שמו של מישהו בכלל? קהל: שגיאה. DAVID Malan: שגיאה של איזה, אולי. בואו נראה. הזן. Null. אז printf הוא למעשה להיות קצת הגנה שלנו כאן, והדפסה, פשוטו כמשמעו, פארן פתוח null, אבל דברים אפילו יותר גרועים יכולים לקרות. ורק כדי להוכיח משהו שאתה בהחלט לא צריך לעשות, בואו נלך ב כאן ולהתחיל לחטט. נכון? אם אני יודע שהתמונה ב זיכרון הוא למעשה זה, יש סוגר argv 1 Zamyla, argv סוגר 0 יש ./hello, או ./hello-3. מה הוא בסוגר 2? אז אני יכול לענות על זה תשאל את עצמי, נכון? אני יכול רק לשנות את 1 עד 2. עכשיו אני יכול להדר מחדש שלום 3, ./hello3 בואו להתקרב וקש Enter. אופס. אין סימן ציטוט. מעניין. אז זה סוג של מגניב לראות מה עוד יש כאן. אז מה עוד הוא בתוך המחשב הנייד שלי? בואו להציל בסוגר 3. הפוך hello3, ./hello-3. סקרן. ועכשיו בואו לקבל 50 באמת bold--. אז זה באמת צלילה עמוקה לזיכרון של המחשב שלי. 50 מדדים ב. אז להפוך את שלום 3 ./hello-3. סקרן. בסדר, עכשיו אני פשוט הולך לקבל פזיז. בואו נלך ל5,000. בסדר. אז תן לי הידור מחדש. הפוך hello3, ./hello-3. אישור. עכשיו חלק מכם, יש אולי להיות הנורה נוסעת. כמה מן יש לך ראה הודעה על זה קודם? אישור. אז, למה? סיכויי are-- ויש שונה דברים שיכולים לגרום לזה, וברור שאתה בטוב company-- יש לנו באופן ברור נגרם מה שנקרא אשמת פילוח. וסיפור ארוך קצר להיום, אני נגע קטע של זיכרון שאני לא צריך. איפה קטע רק אומר נתח זיכרון שלא הייתי צריך. עכשיו המחשב מבטיח שאם אני לרוץ ./helloZamyla שאני יכול לגעת בי argv להיות סוגר 0 וargv סוגר 1. אבל argc הוא ערך 2, זה אומר שאני רק allowed-- זה סוג של הכבוד system-- לגעת סוגר 0 וסוגר 1. אם אני הולך הלאה, יש הולך בהחלט להיות זיכרון יש. זיכרון RAM שלי קיים מבחינה פיזית במחשב. אבל מי יודע מה יש שם? ואכן, אני מפעיל מספר רב של תוכניות בו זמנית. אולי יש לי seen-- אם אני לא היה עושה את זה על Appliant אבל על Mac שלי או PC-- אולי יש לי ראה את התוכן של דואר אלקטרוני. אני יכול לראות מיידי הודעה ששלחתי לאחרונה. כל דבר שעלול להיות להשתהות בזיכרון היה יכול להיות נצפה בדרך של סימון זה שרירותי מרובע סוגר. או, גרוע מכך, אולי יש לך מצא אחד את סיסמאות שלי שהייתי מוקלד בזמן האחרון, ש תכנית שמאוחסנת בזיכרון באופן ש כדי לאמת אותי, ו אז פשוט סוג של השאיר אותו בזכרון RAM עד שעזבתי את תכנית ש. ואכן, זו אחת סכנה ואחד הכוחות של שימוש בשפה כמו ג יש לך גישה לא מוגבלת לכל התוכן הזיכרון של תכנית, ומה החבר 'ה רע יכול אפילו לעשות בcases-- אלה במיוחד כאשר אנו להגיע לתכנות אינטרנט לקראת סוף הסמסטר, אנחנו לבקר topic-- זה לחטט, פוטנציאל, של מישהו המחשב של זיכרון ולמצוא דברים מוזרים כאלה כפי שראינו שם. או אפילו גרוע מכך, סיסמאות שהוא או אז היא יכולה להשתמש בו כדי לעשות דברים רעים. אז ברור שאני לא הייתי צריך לעשות את זה, בגלל דברים מוזרים מתחילים לקרות. ואכן, זו היא מתרסקת תכנית. זה יהיה שווה הערך של מערכת הפעלה Mac או בWindows חלון תכנית רק הולך ונעלם. שגיאה בלתי צפויה. בסביבת שורת הפקודה אנו רואים משהו כזה. אבל בגלל זה, הוא שאני פשוט לגעת זיכרון שלא שייך לי. אז בואו להתגונן מפני זה קצת בצורה שונה על ידי התבוננות בתכנית זו כאן. אז, שוב, השלד שראינו earlier-- ואני כבר הדגיש int זמן זה. ויש לו את כל הזמן הזה עיקרי אכן חזר ערך. למרות שברוב ההרצאה שלנו דוגמאות שמעולם לא שימשו בעבר לחזור כל דבר בעיקרי. אנחנו פשוט לכתוב קרובים printf סד מתולתל וזהו. אבל בחינם, מה מהדר כבר עושה בשבילך, ביעילות, חוזר 0 בשבילך. מסתבר out-- וזה קצת counterintuitive-- ש0 הוא טוב. זה לא אומר ששקר כשלעצמו. 0 הוא טובים, וכל מי שאינם 0 ערך, העולם החליט, יכול לסמן שגיאה. אז אם אי פעם פישל משהו במחשב שלך, או תכנית פשוט מתה עליך ו אתה כבר קיבלת כמה חלון שגוי על המסך שלך, שגיאה אומרת שלילי 49 או שגיאה 23-- כמה value-- לכאורה שרירותי זה כי מתכנת יש בקידוד קשיח ערך כמו שלילי 49 או חיובי 23 לייצג כל מספר, מעז לומר, של 4 מליארד דברים אפשריים שעלול להשתבש בתכנית. אז איך אני יכול לקחת יתרון של זה בעצמי? ובכן, הרשה לי לפתוח את תכנית שכתבתי מראש, ולחטט מקוון בשם שלום 4. וזה כמעט זהה, פרט לכך ש שלה קיבל קצת בדיקת שגיאות. במקרה זה, אני כבר הכריז שוב עיקרי כמו לקחת שני טיעונים, אבל הפעם, על קו 17, הודעה אני עושה קצת מבדיקת שפיות. אני מוודא ש argc שווה שווה 2. כי אם כן, ש משמעות הדבר היא בצורה בטוחה שאני יכול לגעת לא רק סוגר 0, אבל סוגר 1. ואני הולך קדימה ולהדפיס את, במקרה זה, Zamyla או רוב או מה מילה שאני הדפסתי. ועכשיו רק כדי לקבל קצת נכון יותר, אני הולך לחזור באופן מפורש 0 כדי לסמן הכל טוב. שום דבר לא קרה רע. אבל על ידי אמנה, אני הולך לחזור 1, או בכנות כל-0 אינו ערך, אם משהו ישתבש. עכשיו המשתמש לא הולך באמת שם לב מה קורה. ואכן, אם אני נכנסתי לספרייה זו, אנו להתקרב ועושים שלום 4, ./hello-4 Zamyla מתנהג כמו שאני מצפה. אבל אם אני במקום אל תקליד שום דבר שום דבר לא נראה, צריך לקרות, אבל זה לא לקרוס. ואם אני במקום לעשות משהו כמו רוב הוא משגיח בשיתוף Thayer-- מידע שרירותי. אבל שים לב, argv 1, 2, 3, 4, ו 5 צריכים עכשיו קיימים בזיכרון. גם את זה, זה לא מה ש התכנית שלי מצפה, כי אני כבר בדקתי אם argc שווה שווה 2 או לא. אז עכשיו אני מתגונן מפני זה. עכשיו, במאמר מוסגר, אנחנו programmer-- או לייתר דיוק אנו users-- אף פעם לא רואה ש0 או 1, אך באמצעות כלי שנקרא Debugger, או כלים אחרים, כפי שנראה לפני ארוך, אתה מתכנת יכול ממש לראות מה יכול להיות השתבש בתוך התכנית שלך. אז, על כל שאלות argc? כן. קהל: אני ראיתי בו הם לא היה לי האופי, [לא ברור] רק אמר ד כוכב המחרוזת, כמו פסיק כוכבית אופי. האם הם שווי ערך לכאן? DAVID Malan: הם. אז השאלה היא, יש לך תוכניות מדי פעם ראו כזה שלא אומר סוגר argv המחרוזת אבל במקום להגיד משהו כמו סוגר argv כוכב char. ויש אפילו אחר גרסאות שאתה עשוי לראות. הם אכן שווי ערך. לעת עתה, יש לנו אלה סוג של גלגלי עזר על בצורה של מחרוזת בCS50 ספרייה, אבל במרחק של קצת יותר בשבוע או אז אנחנו הולכים כדי להסיר ש חסימה לגמרי ולמעשה להסתכל על מה char והכוכב הם, וכיצד אלה קשורים לזיכרון ייצוג באופן כללי יותר. אז אנחנו נחזור לזה. שאלות אחרות על argv או argc שלנו? כן. קהל: מדוע זה לחזור שגיאה [לא ברור]? DAVID Malan: למה עשה את זה תחזיר שגיאה only-- הו! במקרה הקודם, כאשר אנו היו לשפץ מסביב עם זיכרון, למה זה רק יחזיר שגיאה כאשר אני באמת הקלדת מספר גדול? תשובה קצרה היא, פשוט הייתה לנו מזל. באופן כללי, מחשב מקצה זיכרון בגושים, וזה נתן לי מספיק נתח גדול ש יש לי משם, בלי לשים לב, של סוגר נוגע ללב 2, סוגר 3, סוגר 50, אבל ברגע שאני דחפתי את המזל שלי, הלכתי מעבר גבולות של הנתח של זיכרון מערכת ההפעלה שנתנה לי. ואז זה הידקתי למטה ואמר, לא. שגיאת פילוח. כן. קהל: איך עושה את המחשב יודע את הערך של תכנית +? DAVID Malan: איך עושה מחשב יודע את הערך של תכנית +? כאשר אתה מפעיל את תכנית, תכנית ש, על ידי הטבע של הפקודה המהבהבת, הוא מסר את המערך של מילות שקליד גולשות בשורת הפקודה, שהיה הקליד בשורת הפקודה. וכך הוא ההפעלה שלך מערכת שבעצם מאכלס את טיעוניו של עיקרי בשבילך. אז זה אחד מהשירותים שאתה מקבל, סוג של בסתר מתחת למכסה המנוע של מערכת הפעלה. שאלות אחרות? כן. קהל: מה מזבלה ליבה זה אומרת? DAVID Malan: מה מזבלה ליבה זה אומרת? כך שזו שאלה טובה. ותן לי לחזור אל במדריך זה כאן. ותשים לב ש יש לי קובץ חדש שם. זה נקרא אכן ליבה, וזה למעשה בדרך כלל קובץ בגודל סביר. שהוא למעשה תמונת מצב של התוכן של זיכרון התכנית שלי או RAM כאשר הוא התרסק. וזה יהיה שימושי, פוטנציאל, אבחנה, ברגע שאנחנו מדברים בהרצאה עתיד וסעיף על ניפוי שגיאות, בגלל שאתה באמת יכול לעשות מקבילה של נתיחה שלאחר המוות דיגיטלי בקובץ שכדי לעזור להבין מה עשית לא בסדר בתכנית שלך. כן. קהל: האם argc פקודה ב עצמו, או יכול אתה שם את זה שום דבר? DAVID Malan: שאלה טובה. האם argc פקודה בעצמו, או שאתה יכול לנקוב בשמו משהו? זה בהחלט לא הפקודה. זה פשוט משתנה של שם או שם של ויכוח, וכך באופן מוחלט אנחנו אפשר לקרוא לזה foo, אנחנו יכולים לקרוא לזה בר, אשר נוטה להיות ללכת למילות שמחשב מדען הולך. אבל על ידי אמנה, אנו משתמשים argc וargv. אבל זה רק אנושי אמנה, לא יותר. בסדר. אז מתברר, שהייתי אומר לי קצת lie-- לבן ולמען אמת, בעתיד, אתה תראה אנחנו כבר לספר שקרים לבנים אחרים. אבל לעת עתה, אנחנו הולכים לקלף בחזרה אחד מאלה. במקרה זה כאן כשאני בעבר רץ תכנית כמו ./hello-3 ./hello או Zamyla, היה לנו את התוכן שלי הזיכרון של המחשב מחפש בערך כמו זה. אבל זוכר מה היא מחרוזת. מה אמרתי לפני שבוע מה מחרוזת בעצם היא מתחת למכסת המנוע? קהל: מערך של תווים. DAVID Malan: זה מערך של תווים, נכון? אז אולי יש לנו מערך של מחרוזות, אבל, בתורו, מחרוזת הוא מערך של תווים. אז אם אני באמת רוצה להיות אנאלי כשאני מצייר את התמונה הזאת, אני באמת צריך להיות ציור זה קצת יותר כמו זה, לפיה בכל אחד מאלה אינדקסים של מערך argv שלי, שם היא בעצמו כל מחרוזת כי הוא עצמו במערך. ועכשיו השקר הלבן אנחנו אומרים לי היום הוא שהתמונה לא נראה בדיוק כמו זה. למעשה, הריבועים הקטנים הם בדרך כלל מחוץ למלבנים הגדולים יש. אבל אנחנו נחזור לזה לפני זמן רב. אבל זה ./hello קו נטוי 0, כי להיות התו המיוחד ש תוחם את קצה חוט, ויש לנו עוד אחד לאחר שמו של Zamyla. אז מה זה אומר? ובכן, תן לי ללכת קדימה ו לפתוח את שתי דוגמאות אחרות כי הם זמינים באופן מקוון. אחד מהם נקרא argv1.c והשני הוא argv2. מדוברים בתכנית סופר פשוט ש שונה מתוכניות העבר בכי עכשיו אני משתמש argv עד argc וכאן. ועכשיו אני שילוב עם ללולאה בשורה 18, מi = 0 בעד argc. ומה שאני הולך לעשות עם הקו הזה של קוד כאן? באנגלית. זה כמובן מדגים שימוש בargc. אבל באנגלית, מה עושה זה לעשות אם אני מפעיל את תכנית זו? כן? קהל: זה הולך להדפיס שלך מסך פעמים רבות ככל שאתה רוצה. DAVID Malan: בדיוק. אז מה מילות ש הקלד בשורת הפקודה, זה הולך להקיא שלהם עליי אחד בכל שורה. אז בואו נלך קדימה ולעשות את זה. תן לי ללכת לספרייה שלי ולעשות לעשות ./argv1 argv1. ועכשיו, בואו לשמור את זה פשוט. בואו לעשות כלום בהתחלה. זה עשה להדפיס את הדבר אחד, ו זה אכן השם של התכנית, כי זה במסגרת 0. אם אני עכשיו אומר foo, זה הולך לעשות שני אלה, ואם אני אומר בר foo, זה הולך לומר שלושה הדברים האלה. עכשיו זה מעניין במידה מסוימת, אולי. אבל זוכר argv ש הוא מערך של מחרוזות, אבל מחרוזת היא מערך של תווים, כדי שנוכל לקחת את הדברים צעד אחד קדימה ולהחיל שבסיסי היגיון ולהפוך את הקוד ש נראה קצת יותר ברורים מאליהם, יש להודות. אבל על ידי בעל מקונן לולאה, משהו דומה למה שאתם אולי זוכרים ממריו, למשל, אם עשית את זה בדרך זו. אז עכשיו שם לב על קו 19, אני iterating שוב על הטיעונים שלי, מ0 בעד argc. ועכשיו בשורה 21-- אני השאלת טריק מweek-- האחרונה אני בודק מה הוא אורכו של סוגר argv i. אני אחסון תשובה שבn. ואז אני משלב מj על עד n, כאשר j מאותחל ל -0. אז, כנס לספירה. לאחר שהשתמשת בi, אם יש לך לולאה מקוננת, לא תוכל להשתמש בi שוב, אחרת אתה מחטיף, שעלול להיות, הערך מחוץ ללולאה הפנימית. אז אני משתמש בj על ידי אמנה. אנו עשויים להשתמש k. אם יש לך יותר מ k, אתה כנראה יש יותר מדי קינון, בדרך כלל. אבל עכשיו, שם לב printf שלי הקו הוא מעט שונה. אני לא מדפיס% s, אני הדפסת% ג, אשר, כמובן, הוא מציין מיקום עבור char. ועכשיו שם לב תחביר זה. חדש. אנחנו לא ראינו את זה לפני. אבל באופן הגיוני, זה רק אומר ש לקבל את מחרוזת ith בargv ולקבל את JTH מה? קהל: תווים. DAVID Malan: תווים במחרוזת ש. זאת על ידי שימוש בסוגריים מרובעים ואחריו בסוגריים מרובעים, זו היא הצלילה ראשונה למחרוזות של argv, ולאחר מכן השני סוגריים מרובעים עם j הוא צלילה לתוך הדמויות של מחרוזת מסוימת שבargv. ואז, רק למען סדר טוב, אני מדפיס קו חדש כאן. אז עכשיו תן לי ללכת קדימה ולפתוח עד חלון מעט יותר גדול כדי שנוכל לראות את זה בפעולה. תן לי להיכנס לתיקייה ש. ועכשיו לעשות לעשות argv-2-- whoops-- לעשות argv-2, ./argv 2. הזן. וזה קצת קשה לקרוא בצורה אנכית, אבל זה אכן שמו של תכנית, ואחריו שורה ריקה. עכשיו תנו לי ללכת ולעשות foo. בדומה לכך קשה לקריאה, אבל זה אכן הדפסת תו אחד בכל שורה. ואם אני עושה את הבר, זה עכשיו הדפסה אלה שורה אחרת השורה. אז ממסעדה כאן היא לא כל כך הרבה כי, וואו, תסתכל על טריק חדש מסודר זה שבו אתה יכול לקבל בתוכן של דמויות הספציפיות של מערך, אלא איך אנחנו לוקחים בסיסיים אלה רעיונות כמו אינדקס למערך, ולאחר מכן לאינדקס ל מערך שהיה במערך ש, ורק יישום אותם הרעיונות ל דוגמאות מעט יותר מתוחכמות. אבל את היסודות באמת יש לא השתנה, אפילו מאז שבוע שעבר. עכשיו זה סוג של הזמן, שב, זוכר, בשבוע אפס שיחקנו עם ספר טלפונים כמו זה. ולמרות שזה ברור ש חתיכות פיזיות של נייר, סוג של שאתה יכול לחשוב ספר טלפונים כמערך. אין ספק, אם היית reimplement זה חתיכות פיסות נייר הללו במחשב, כנראה היית משתמש במשהו כמו מערך כדי לאחסן את כל אלה שמות ומספרים מכל הדרך באמצעות Z. אז זה נחמד, כי היא מאפשרת לנו הזדמנות, אולי, לשקול כיצד תוכל למעשה ליישם משהו כזה. כמו בסדרה של דלתות כאן. אז אם אני could-- אנחנו צריכים אחד להתנדב לבוא בעד. בואו נראה. פנים לא מוכרים אולי, פנים לא מוכרים אולי. מה דעתך על בכתום? כאן. חולצה כתומה, באה על עד. בואו נלך קדימה עכשיו ומהלך דלתות אלה לצד, להעביר אלה את הדרך לרגע. מה שמך? אג'יי: DAVID Malan: אג'יי. דוד. נחמד לפגוש אותך. בסדר. אז יש לנו מאחורי שישה אלה דלתות דיגיטלית על screen-- או, לייתר דיוק, שבע דלתות על screen-- חבורה של מספרים שלמות. ואמרתי לך שום דבר בadvance-- הסכים? אג'יי: שום דבר מראש. DAVID Malan: כל מה שאני רוצה שתעשה עכשיו הוא למצוא עבורי, ועבורנו, באמת, המספר 50, צעד אחד בכל פעם. אג'יי: מספר 50? DAVID Malan: המספר 50. ואתה יכול לחשוף מה מאחורי כל אחת מהדלתות האלה פשוט על ידי נגיעה בו עם אצבע. לעזאזל. [שחוק] [מחיאות כפות] מאוד יפה מאוד. אישור. יש לנו מתנה יפה הפרס לך כאן. הבחירה שלך של סרטים ש דן בשבוע שעבר. אג'יי: אה, גבר. אה, אף פעם לא ראיתי Spaceballs. DAVID Malan: Spaceballs. בסדר. אז תחזיק מעמד רק רגע אחד. How-- בואו נעשה את זה moment-- למייד איך אתה הולך על מציאת המספר 50? אג'יי: אני בחרתי באופן אקראי. DAVID Malan: אז אתה בחרת באופן אקראי ויש לי מזל. אג'יי: כן. DAVID Malan: אישור. מצוין. אז עכשיו, שיש לך לא קיבל מזל, מה עוד אולי קרה מאחורי הדלתות האלה? אז אם אני הולך קדימה ו לחשוף את המספרים האלה כאן, הם בעצם בסדר אקראיים. יש לך את הטוב ביותר ויכול נעשה, בכנות, הוא על ידי, סופו של דבר, במקרה הגרוע ביותר, לבדוק את כולם. אז יש לך סופר בר מזל, ש זה לא מה שהיינו מכנה אלגוריתם. כן, מזל טוב. אבל עכשיו let's-- הומורי, אם אתה יכול. בואו נלך לכרטיסייה זו כאן. והנה המספרים באופן ברור מה שנראה בסדר אקראי, והם היו. אבל עכשיו אם אני במקום תביעה כי מאחורי דלתות אלה הם מספרים שמסודרים. המטרה עכשיו היא גם תמצא אותנו המספר 50. אבל לעשות את זה אלגוריתמי, ו לספר לנו איך אתה הולך על זה. ואם אתה מוצא את זה, אתה שומר את הסרט. אתה לא מוצא את זה, אתה נותן לו בחזרה. אג'יי: אז אני הולך לבדוק את הקצוות הראשון, כדי לקבוע אם there's-- [שחוק ומחיאות כפות] DAVID Malan: הנה לך. בואו נסתכל על אחד קודמיו של אג'יי, שון, שלא היה די בר מזל. אוקיי, אז המשימה שלך כאן, שון, הוא הבא. יש לי חבוי מאחורי אלה דלתות המספר שבע, אבל חבוי בחלק מהדלתות האלה כמו גם מספרים שאינם שליליים אחרים. והמטרה שלך היא לחשוב על זה שורה העליונה של מספרים כפשוט מערך. אנחנו רק רצף של חתיכות נייר עם מספרים שמאחוריהם. והמטרה שלך היא, רק באמצעות העליון מערך כאן, תמצא לי את המספר שבע. ואז נהיה לנו הולכים לביקורת איך אתה הולך על עושה את זה. מצא אותנו המספר שבע, בבקשה. מס ' 5, 19, 13. זה לא שאלה מכשילה. 1. בשלב זה הציון שלך הוא לא מאוד טוב, אז אתה יכול גם להמשיך. 3. ללכת על. למען האמת, אני לא יכול שלא לתהות מה גם אתה חושב על. שון: אני יכול לקחת מהשורה העליונה בלבד. DAVID Malan: רק השורה העליונה. אז יש לך שלושה שמאל. אז תמצא אותי 7. [קהל צועק SUGGESTIONS] אז את שני אלה היו מדהימים מסיבות שונות מאוד. אז זה המקום שבנו נפסק לפני רגע, ותובנה המפתח כאן הייתה היו דלתות אלה מספרים מאחוריהם שמוינו, אידיאלי אוכל מוכן עבורו הוא שאתה יכול לעשות ביסודו טוב יותר ב example-- השני ואכן, זה היה שון של ניסיון ראשון עם מספרים אקראיים רק before-- כאבל ברגע מספרים אלה מסודרים, ממש כמו בספר טלפונים, מה שאתה יכול כמובן לעשות? או איך אתה יכול למנף את הידע הזה? כן. קהל: אתה הולך באמצע הדרך [לא ברור]. DAVID Malan: כן. בדיוק. אז האינסטינקט הראשוני של אג'יי היה כדי לבדוק את הקצוות, ככל הזכור לי, ואז אנחנו סוג של מוגמר הדוגמא במהירות. אבל אם התחלנו לעשות את זה יותר באופן שיטתי לאורך שורות אלה, אך החל אולי ב אמצע, בגלל שהם מסודרים, ברגע שאנו חושפים מספר 16, ולכן אנו יודע-- ובואו נעשה בדיוק that-- לכן יודע ש50, במקרה של היום, חייב להיות לצד ימין. אז בדיוק כמו בשבוע שאפס כאשר קרענו את ספר טלפונים במחצית וזרקתי את מחצית בעיה משם, אותו הרעיון כאן. אנחנו יכולים לזרוק המחצית של הבעיה משם. וכנראה מה שאתה אולי לעשות אלגוריתמי, ברגע שאתה יודע ש50 חייבים להיות בצד הימין, אם זה בכל מקום, הוא לנסות שם, באמצע של הדלתות שנותרו. כמובן, 50 הוא גבוהים יותר מ 42, כדי שנוכל לזרוק זה שנותר רבע מהבעיה משם, ולבסוף, לזהות משהו כמו 50. אבל בדיוק כמו עם ספר טלפונים, מספרים אלה ניתנו לנו כבר ב בסדר ממוין, מה שמשאיר אותנו עם השאלה, איך אתה לקבל את הדברים בצו מסודרים? ולמען אמת, באיזה מחיר? זה דבר אחד להיות מסר את ספר טלפונים ואז להרשים את החברים שלך על ידי מציאת מספר טלפון ממש מהר, נכון? קורע את 32 דפים כדי למצוא אדם מתוך 4 מליארד דפים, אמרנו הייתה דוגמא אחת קיצונית. אבל כמה זמן זה לקח Verizon כדי למיין שספר טלפונים? כמה זמן לקח לנו כדי למיין שבעת המספרים האלה? זו שאלה שיש לנו כך התעלם רחוק לחלוטין. אז בואו לענות על שאלה זו כעת. ואנחנו כולנו מסרטים עכשיו, אבל יש לנו כמה כדורי לחץ. אם, לומר, שמונה מתנדב לא אכפת שהצטרף אלינו לכאן? בואו נלך קדימה ולעשות, מה דעתך על ארבעה מכם, שלוש מכם כאן? קבל כמה פרצופים חדשים. וארבעה שלך שם? וnow-- בואו לא ההטיה here-- ו מספר שמונה לכאן בסופו של הדבר. בואו למעלה. בסדר. אז מה יש לנו כאן ל כל אחד מכם הוא מספר. אם אתה רוצה ללכת קדימה, לקחת את המספר הזה. מה שמך? ארטי: ארטי. DAVID Malan: ארטי, בסדר. אתה מספר 1. אמין: אמין. DAVID Malan: אמין. דוד. אתה מספר 2. וללכת קדימה, כפי שאני מושיט אתה הגיליונות של נייר, בשורה עצמכם מול המוזיקה עומד באותו סדר כמו שם למעלה. אנדי: היי, אנדי. DAVID Malan: אנדי, זה נחמד לראות אותך. מספר 3. יעקב: יעקב. DAVID Malan: יעקב, מספר 4. ברוכים הבאים על סיפון. גרנט: גרנט. DAVID Malan: גרנט. מספר 5. Alanna: Alanna. DAVID Malan: Alanna, מספר 6. פרנסס: פרנסס. DAVID Malan: פרנסס, מספר 7. ו? רחל: רחל. DAVID Malan: רחל, מספר 8. בסדר. קדימה, לקבל את עצמך בצו זה. תן לי לשים אחד שנותר מוסיקה לעמוד במקום. איפה אתה צריך לעמוד? אישור. קדימה, פשוט לשים את המספרים שלך שבו הקהל יכול לראות אותם על, המוזיקה עומדת כלפי חוץ. ואני מקווה, הראשון שלנו שפיות בדיקת here-- 4, 2, 6. הו, הו. חכה רגע. אין לנו 8. אני צריך לפינוי לך מ הדוגמא איכשהו. מס ' לא, זה בסדר. בואו נראה. אנחנו יכולים לעשות את זה. Stand by. הנה אנחנו מתחילים. נכון. בסדר. אז, עכשיו יש לנו 8, 1, 3 7, 5. אישור. מצוין. אז השאלה שעל הפרק היא, ב מה עלות, ובאמצעות מה שיטה, אנחנו יכולים למעשה למיין את המספרים האלה כאן כך שאנו סוג של יכולים לעבוד לאחור, סופו של דבר, וdecide-- האם זה באמת מרשים, האם זה באמת יעיל, שאני יכול להתחלק ו לכבוש ספר טלפונים? האם זה באמת יעיל, כי אני יכול להפריד ולמשול חתיכות דיגיטליות אלה נייר על הלוח, אם אולי זה הולך לעלות לנו מזל בזמן או מחזורי אנרגיה או CPU כדי לקבל למעשה הנתונים שלנו לקצת סדר ממוין? אז בואו לשאול את השאלה הזאת. את כל כך ראשונה, מספרים אלה הם בפחות או יותר בסדר אקראיים, ואני הולך להציע אלגוריתם אחד, או תהליך באמצעותו אנו יכולים למיין את האנשים האלה. אני הולך להתקרב זה די בתמימות. ואני הולך להכיר שזה סוג של הרבה בשבילי לעטוף את דעתי סביב כל הנתונים שנקבעו בפעם אחת. אבל אתה יודע מה? אני הולך לעשות כמה תיקונים שוליים מאוד פשוטים. 4 ו -2 מקולקלים, אם מטרה היא ללכת מ1 בעד 8. אז אתה יודע מה? אני הולך יש לך חבר 'ה להחליף, אם תעבור מבחינה פיזית עמדות ו החתיכות שלך נייר. עכשיו 4 ו -6, אלה הם בסדר. אני הולך לעזוב להיות אלה. 6 ו -8, אלה הם בסדר. הולך להשאיר אותם להיות. 8 and1, מקולקל. אם שני לא הייתי מתנגד להחליף. עכשיו 8 ו -3, אם אתם יכולים להחליף. 8 ו -7, אם אתם יכולים להחליף. ו8 ו -5, אם אתם יכולים להחליף. עכשיו, אני עושה? לא, ברור שלא. אבל אני עשיתי מצב טוב יותר, נכון? מה השם שלך שוב, מספר 8? רחל: רחל. DAVID Malan: אז יש רחל יעילות בעבע די רחוק, כל הדרך עד לסוף המערך של מספרים שלי כאן. וכך הבעיה שנפתרת סוג של. עכשיו, באופן ברור, 2 עדיין צריכה להזיז קצת, ו4 ו -6 ו1. אבל נדמה לי שקבלתי קצת יותר קרוב לפתרון. אז בואו ניישם את זה באותו היוריסטי נאיבי שוב. 2 ו -4, על אישור. 4 ו -6, על אישור. 6 ו 1, מ"מ מ"מ. בואו החלפה. 6 ו -3, מ"מ מ"מ. בואו החלפה. 6 ו -7 הוא על אישור. 7 ו -5, nope. בואו החלפה. ועכשיו 7 ו -8. ואיך קוראים לך שוב? פרנסס: פרנסס. DAVID Malan: פרנסס. אז עכשיו פרנסס הוא באפילו טוב יותר עמדה, כי עכשיו 7 ו -8 כהלכה מבעבעים עד לקצה. אז 2 ו -4, על אישור. 4 ו1, ההחלפה בואו. 4 ו 3, ההחלפה בואו. 4 ו -6, אתה בסדר. 6 ו -5, ההחלפה בואו. ועכשיו החבר 'ה האלה הם טובים. אנחנו כמעט שם. 2 ו -1, מקולקל, כך להחליף. ועכשיו תן לי לעשות בדיקת שפיות. 2 ו -3, 3 ו -4, 4 ו 5, 5 ו -6, 6 ו -7, 8. אוקיי, אז אנחנו נעשה. אבל באיזה מחיר עשה לי למיין את המספרים האלה כאן? ובכן, כמה צעדים עשה לי פוטנציאל לקחת בעת מיון האנשים האלה? ובכן, אנחנו נחזור לשאלה זו. אבל, בכנות, אם יש לך קצת משועמם, זה סוג של חשיפה בכי זה לא היה אולי האלגוריתם יעיל ביותר. ואכן, בכנות, אני מזיע כל עוד הליכה הלוך ושוב. זה לא מרגיש יעיל במיוחד. אז בואו ננסה משהו אחר. אם אתם יכולים לאפס את עצמכם לשמונה ערכים אלה. עבודה טובה. בואו נסתכל באופן דיגיטלי, רק רגע לפני שאנחנו מנסים משהו אחר, על מה בדיוק קרה. עד כאן, אתה עומד לראות ויזואליזציה של שמונת בני אדם אלה לפי כחול ואדום ברים מייצגים מספרים. הגבוה על הבר, גדול יותר במספר. קצר על הבר, קטן המספר. ומה שאתה הולך לראות הוא ב בסדר אקראי יותר משמונה מהם. אתה הולך לראות את הברים אלה מקבל מסודרים על ידי אותו אלגוריתם, או סט של הוראות, אשר אנחנו קוראים לכאן ואילך מיון בועות. אז שם לב, בכל שנייה או כך, שני ברים מאירים את באדום, מתבצעים השוואה על ידי המחשב. ואז אם בר והגדול בר קטן מקולקל, הם נמצאים בהחליפו לי. עכשיו זה משעמם להפליא כדי לצפות בזה, ללא ספק, במשך זמן רב מאוד, אבל שמתי לב takeaway-- ברים גדולים נעו ימינה, ברים קטנים נעים שמאלה. בואו להפיל את התהליך הזה ולזרז את זה להיות הרבה יותר מהר, כדי שנוכל לקבל תחושה של מה ברמה גבוהה, אכן, מיון בועות הוא עושה. ואכן, זה מבעבע עד בצד ימין של הרשימה, או המערך, הברים גדולים יותר. ולהפך, בארים הקטנים הם מבעבע את דרכם למטה מהשמאל, אם כי בקצב מהיר יותר ממה שעשינו בעבר. אז, קשה יותר לראות עם בני אדם, אבל מבחינה ויזואלית זה אכן מה ש קורה. אבל בואו ננסה ביסוד גישה שונה עכשיו. בואו ננסה שונה אלגוריתם לפיו אנחנו צריכים אותך חבר 'ה תתחיל באלה מקוריים עמדות, שהיה צו זה כאן. ובואו נלך קדימה עכשיו. ואני הולך לעשות משהו אפילו פשוט יותר, נכון? במבט לאחור, החלפת pairwise שוב ושוב, כמעט קטן וחכם. בואו נעשה עוד יותר בתמימות דברים, שבו אם אני רוצה למיין את האנשים האלה, תן לי רק להמשיך לחפש לאלמנט הקטן ביותר. אז עכשיו, 4 הוא המספר הקטן ביותר שראיתי. אני הולך לזכור את זה. לא, 2 הוא טובים יותר, וזוכרים את זה. 1 הוא קטן עוד יותר. 3, 7, 5. אישור. One-- מה השם שלך שוב? ארטי: ארטי. DAVID Malan: ארטי. אז, ארטי, קדימה. אני הולך להוציא אותך מהקו. אם הייתי יכול לחזור לכאן. ואני צריך לפנות לו מקום. יש לנו נקודת החלטה כאן. איך ייתכן שאנחנו עושים מקום לארטי כאן בתחילת שבו מספר 1 שייך? קהל: Shift. DAVID Malan: בסדר, אנחנו יכול להעביר את כולם. אבל מציע ייעול. זה מרגיש קצת מעצבן בשבילי לשאול את ארבעה אנשים להעביר את כל הדרך למטה. מה עוד אני יכול לעשות? קהל: לעבור אותם. DAVID Malan: לעבור אותם. ואיך קוראים לך שוב? יעקב: יעקב. DAVID Malan: יעקב, לעבור. הרבה יותר יעיל, רק כדי להיות החלפת מקומות יעקב עם ארטי, בניגוד למכריח כל ארבעת האנשים האלה, תודה רבה לך, ל המיקום הנכון שלהם. מה שיפה ארטי עכשיו, הוא במיקום הנכון שלו. בואו נעשה את זה שוב. 2, זה המספר הקטן ביותר שראיתי. 3, 7, 5. אישור. 2 הוא בהחלט הקטנים ביותר. לא צריך לעשות את כל עבודה. בואו נעשה את זה שוב. 6. הקטן ביותר? 8. לא ולא. 4? אוו. תן לי לזכור 4. 3. תן לי לזכור 3. 7, 5. המספר הקטן ביותר יש לי ראינו במעבר זה הוא 3. אם הייתי בא והלאה. לאן אנחנו הולכים לשים לך? ואיך קוראים לך? Alanna: Alanna. DAVID Malan: Alanna, אנחנו אצטרך לפנות אותך. אבל זה יעיל יותר, רק כדי להחליף שני אנשים, מאשר יש מספר רב של אנשים למעשה לעקוף מעל. עכשיו בואו נעשה את זה שוב. אני הולך כדי לבחור 4, כך צא החוצה. ומי הולך לעבור? מספר 8, כמובן. אם אני עכשיו למצוא מספר 5, צא החוצה. מספר 8 הולך לקבל פונתה שוב. עכשיו אני הולך למצוא את המספר 6 במקום. 7 במקום. 8 במקום. מה בדיוק עשינו כרגע הוא משהו שנקרא מיון בחירה, ואם אנחנו לדמיין את זה, זה הולך להרגיש קצת שונה. בואו נלך קדימה ומזה תפריט כאן, visualization-- זה בואו לשנות את זה to-- בחייך, פיירפוקס. בואו לשנות את זה למיון בחירה. ובואו לזרז אותו כמו קודם, ולהתחיל להדמיה עכשיו. ויש לו אלגוריתם זה תחושה שונה אליה. בכל איטרציה, בכנות, זה אפילו יותר פשוט. אני רק בחירת האלמנט הקטן ביותר. עכשיו, בכנות, יש לי קצת מזל ש זמן, בכך שהוא מסודרים על סופר מהיר. האלמנטים היו אקראיים. זה לא, כפי שבסוף לראות, ביסודו מהר יותר. אבל בואו נראה שלישי ואחרון מתקרב כאן על מה שקורה. אז בואו נלך קדימה ולאפס אתכם פעם האחרונה להיות בצו זה כאן. ועכשיו, אני הולך להיות קצת יותר חכם, רק כדי להשלים את האלגוריתמים שלנו. אני הולך לעשות את זה. אני הולך לא ללכת הלוך ושוב כל כך הרבה. למען האמת, נמאס לי אני כל חוצים זה. אני רק הולך לקחת את מה שאני ניתנו בתחילת הרשימה, ואני הולך כדי למיין כי אז ושם. אז הנה אנחנו. מספר 4. אני הולך להכניס מספר 4 לרשימה ממוינת. עשה. אני טוען עכשיו, ורק כדי להפוך את זה יותר ברור, חלק זה של הרשימה שלי הוא מסודר. זה סוג של טענה מטופשת, אבל אכן 4 מיון ברשימה של גודל אחד. עכשיו, אני הולך לקחת על מספר 2. מספר 2 אני עכשיו הולך להכניס לתוך המקום הנכון. אז איפה 2 שייכים? ברור, לכאן. אז קדימה ולחזור אחורה, אם אתה יכול. ולמה אין לך חבר 'ה פשוט לקחת המוזיקה שלך עומדת זה זמן איתך. ובואו בכוח להכניס אותך לתחילתה של הרשימה. עבודה יותר כך קטנה. הייתי צריך להזיז יעקב סביב, ואיך קוראים לך? אמין: אמין. DAVID Malan: אמין. אבל לפחות אני לא הולך הלוך ושוב. אני רק לוקח את הדברים כמו שאני הולך. אני רק מכניס אותם במקום הנכון. 6, זה בעצם די קל. בואו נכניס אותך לשם, אם אתה רק רציתי לעבור מעט. מספר 8, גם די קל. הנה, ממש שם. לעזאזל. מספר 1 אנחנו פשוט לא יכולים להחליף עם אמין כאן, כי זה הולך לבלגן את הסדר. אז אנחנו צריכים להיות קצת יותר חכמים. אז, ארטי, אם אתה יכול לגבות לרגע. בואו נלך קדימה ולהעביר עכשיו, בניגוד לאלגוריתמים הקודמים שלנו, כדי לפנות מקום לארטי ממש כאן בתחילת. אז בסופו של היום, אני סוג של עושה את מה שרציתי להימנע לפני. וכך האלגוריתם שלי הוא סוג של התהפך, מהבחינה האינטלקטואלית, ממה שהוא היה במקור. אני פשוט עושה הסטה בנקודה שונה. עכשיו אני ב3. אה, לעזאזל. אנחנו צריכים לעשות עבודה יותר שוב. אז בואו לדחוף אותך החוצה. בואו נעבור 8, 6, 4-- הו oh-- ו 3 הוא הולכים ממש שם. אז בחיסכון קל לפחות הפעם. 7, לא יותר מדי עבודה שצריך לעשות. אז אם אתה רוצה לקפוץ בחזרה, בואו נכניס אותך. ולבסוף, 5, אם אתה רוצה לקפוץ אחורה, אנחנו צריך לשנות לך, לך, אתה, עד חמש נמצא במקום. אז עכשיו לראות את זה ב ברמה גבוהה באופן גרפי, בואו נעשה את האלגוריתם הזה הדמיה פעם אחת נוספת. אז אנחנו זה יקראו סוג הכנסה. אנו נפעיל אותו בדיוק כפי ש מהר, ולהתחיל אותו כאן. וזה, יותר מדי, יש לו תחושה שונה. זה סוג של משתפר ו , אבל עדיף לא מושלם עד שאני הולך ובחלק בפערים אלה. כי, שוב, אני לוקח רק את מה ש אני שניתנו משמאל לימין. אז לא אקבל כל כך בר מזל כל מה שהיה מושלם. זו הסיבה שהייתה לנו קטן האלה mispositions שקבוע לאורך זמן. אז כל האלגוריתמים האלה נראים לרוץ בצעדים שונים במקצת. למעשה, מה שאתה אומר הוא הכי טוב או המהיר ביותר עד כה? מיון בועות, הראשון? מיון בחירה, השני? סוג ההכנסה, השלישי? אני שומע כמה מיני בחירה. מחשבות אחרות? אז מתברר ש כל אלגוריתמים אלה ביסודם רק יעיל כמו כל other-- או, לחלופין, בדיוק כפי ש לא יעיל כמו כל אחד אחר, בגלל שאנחנו יכולים לעשות ביסוד יותר טוב מכל שלוש אלגוריתמים אלה. וזה קצת שקר לבן, מדי. כשאני אומר יעיל כ או כבלתי יעיל, זה לפחות עבור ערכי סופר גדולים של n. כאשר יש לנו רק שמונה אנשים כאן, או אולי 50 או כך ברים על המסך, אתה בהחלט תוכל להבחין הבדלים בין שלושת אלגוריתמים אלה. אבל כמו n, מספר האנשים, או מספר המספרים, או מספר האנשים בטלפון ספר, או מספר דפי האינטרנט במסד הנתונים של גוגל מקבל יותר ויותר גדול, אנחנו תראו שכל שלושת האלה אלגוריתמים הם למעשה עלובים למדי. ואנחנו יכולים לעשות ביסוד יותר טוב מזה. בואו נסתכל, סוף סוף, מה עשויים אלגוריתמים אלה נשמע כמו ב הקשר של כמה אחר כמו גם בדרך של זה הדמיה כאן שיציג לנו מספר האלגוריתמים. בואו נלך קדימה ולברך המשתתפים שלנו כאן, שכולם מסודרים על עצמם טובים מאוד. אם ברצונך לקחת את מתנת פרידה. אתה יכול לשמור על המספרים שלך גם כן. ומה שתראה, או לייתר דיוק לשמוע, עכשיו, הוא שככל שאנחנו שמים את הצלילים לכל אחד מברים אלה ולשייך אותו לתוכנה, תדר שונה של צליל, אתה יכול לעטוף audioly יותר את דעתך סביב מה כל אחד מהדברים האלה נראה כמו. הראשון שבם הוא סוג ההכנסה [TONES] זה מיון בועות. [TONES] מיון בחירה. [TONES] משהו שנקרא סוג מיזוג. [TONES] סוג Gnome. [TONES] זהו זה לCS50. אנחנו אראה אותך ביום רביעי. קריין: ועכשיו, "עמוק מחשבות, "על ידי ךייבן Farnham. למה זה ללולאה? למה לא לעשות את זה טוב יותר? הייתי עושה חמש לולאה. [שחוק]