שיטת "הכפל היפני"
באינטרנט מסתובב לו לאחרונה להיט חדש: שיטת כפל שלכאורה נלמדת על ידי היפנים בבית הספר היסודי - מעכשיו אכנה אותה “כפל יפני”, למרות שאין לי שום מושג (וזה גם לא ממש מעניין אותי) אם אכן השיטה נלמדת ביפן או לא. איך זה עובד? בואו נתחיל עם תמונה:
והנה גם סרטון שמסביר את השיטה:
http://www.youtube.com/watch?v=85Vd0NpL32k
אנסה להסביר בקיצור בעצמי מה הולך כאן. הרעיון הוא לקחת את אחד המספרים שאנחנו כופלים ולכתוב את ספרותיו בתור קבוצות (עם רווחים ביניהן) של קווים אלכסוניים (נאמר, שפונים לכיוון למטה-שמאלה). כך למשל את \( 324 \) מייצגים בתור קבוצה של 3 קווים, רווח, קבוצה של שני קווים, רווח, קבוצה של 4 קווים. עכשיו לוקחים את המספר השני שאותו כופלים ועושים לו אותו דבר, רק עם אלכסונים בכיוון ההפוך (למעלה-שמאלה). בשני המקרים ככל שהקבוצה שמאלית יותר כך היא מייצגת ספרה “גבוהה” יותר.
אם ציירנו את הקבוצות בצורה מדויקת מספיק, אפשר לזהות נקודות מובחנות של חיתוכים בין שתי קבוצות של קווים שהן בערך באותו קו רוחב. הרעיון הוא כעת כזה: כמות נקודות החיתוך בקבוצה הימנית ביותר היא ספרת האחדות בתוצאה; כמות נקודות החיתוך בקבוצות בקו הרוחב הבא היא ספרת העשרות, וכן הלאה. אם קיבלנו שיש, נאמר, 24 נקודות חיתוך עבור קו רוחב מסויים אנחנו כותבים את הספרה 4 ומחברים את 2 לתוצאה של הספירה עבור קו הרוחב הבא. בסופו של דבר אנחנו מקבלים את תוצאת הכפל הנכונה.
כל זה מאוד מסורבל להסבר מילולי, אבל כשרואים את זה מתבצע בפועל (אני ממליץ על הסרטון) חיש קל ברור מה הרעיון, ואני בטוח שגם ילדים יכולים להשתלט עליו מהר.
התגובות לשיטה הזו ברחבי האינטרנט משתפכות למדי - הביטוי “Mind blown’’ מופרח פה ושם, ובאתר 9GAG אפשר למצוא המחשה נאה (ומטופשת למדי) לאופן שבו מתייחסים בחלק מהמקומות לדבר הזה:
עכשיו, אני לא רוצה לקלקל לאף אחד את המסיבה, ואני עצמי חושב ששיטת הכפל היפני הזו היא חמודה למדי ובהחלט לא יזיק להראות אותה לתלמידים או סתם להכיר אותה לידע כללי, אבל אני חושב שיש לא מעט אירוניה בכך שהשיטה הזו זוכה להתלהבות גדולה וקריאות Mind blown בזמן שהשיטה ה”רגילה” לכפל, שהיא מדהימה הרבה יותר, נתפסת אצלנו בתור מובן מאליו. זה כמובן בלתי נמנע; אנשים לומדים את שיטת הכפל ה”רגילה” בגיל צעיר מאוד ולא עוצרים אף פעם להעריך עד כמה היא גאונית, או עד כמה העובדה שאנחנו עובדים בשיטת ספירה על בסיס מיקום היא גאונית - אנחנו מקבלים כמובן מאליו את זה שכבר בכיתות הנמוכות של בית הספר היסודי אנחנו משתמשים במה שמבחינה טכנולוגית היה מהפכה אדירה.
אם כן, בפוסט הזה ארצה להסביר למה הכפל היפני עובד, אבל גם להזכיר איך הכפל ה”רגיל” עובד, ולהשוות את היתרונות והחסרונות של השיטות הללו.
בואו נתחיל בהבנה של הבסיס שעליו שתי השיטות בנויות - ייצוג עשרוני. המספר “ארבע מאות ושבע-עשרה” מסומן בשיטה העשרונית בתור 417. הסימון הזה הוא קיצור לביטוי הבא: \( 4\times100+1\times10+7\times1 \), כלומר ארבע כפול מאה, ועוד אחד כפול עשר, ועוד שבע כפול 1. באופן כללי, מספר בייצוג עשרוני מייצג סכום של חזקות של 10, כאשר כל חזקה כזו מוכפלת בספרה שנמצאת במקום המתאים במספר. גם התוצאה נרשמת בצורה דומה - סכום של חזקות של 10.
עכשיו בואו ניקח דוגמת צעצוע ונראה מה עולה בגורלה - המכפלה של המספר \( a_{1}a_{0} \) (שהוא הדרך לכתוב בבסיס עשרוני את \( a_{1}\cdot10^{1}+a_{0}\cdot10^{0} \)) במספר \( b_{1}b_{0} \). אנחנו הולכים לפתוח את הסוגריים במכפלה באמצעות חוג הפילוג (“דיסטריביוטיביות”):
\( \left(a_{1}\cdot10^{1}+a_{0}\cdot10^{0}\right)\left(b_{1}\cdot10^{1}+b_{0}\cdot10^{0}\right)= \)
\( =a_{1}b_{1}\cdot10^{2}+a_{1}b_{0}\cdot10^{1}+a_{0}b_{1}\cdot10^{1}+a_{0}b_{0}\cdot10^{0} \)
קיבלנו סכום של ארבע מכפלות. כל אחת מהן היא מכפלה של ספרה מכל אחד מהמספרים, כפול חזקה כלשהי של 10. איזו חזקה? ובכן, הסכום של החזקות שכל אחת מהספרות הוכפלו בהן מלכתחילה: זה נובע מהתכונה הידועה של חזקות, שמתקיים \( 10^{n}\cdot10^{k}=10^{n+k} \).
באופן כללי, אם יש לנו שני מספרים \( a_{n}\cdots a_{1}a_{0} \) ו-\( b_{n}\cdots b_{1}b_{0} \) שאניח לצורך פשטות שהם מאותו אורך (תמיד אפשר להוסיף ספרות 0 בסוף המספר הקצר יותר), אם מכפילים אותם מקבלים את הדבר הבא (אני משתמש כאן בסימן הסכימה - \( \Sigma \) - לא להיבהל, הוא אומר בדיוק את מה שאתם חושבים שהוא אומר):
\( \left(\sum_{i=0}^{n}a_{i}10^{i}\right)\left(\sum_{j=0}^{n}b_{j}10^{j}\right)=\sum_{i,j=0}^{n}a_{i}b_{j}10^{i+j} \)
כלומר, המכפלה נותנת לנו סכום של \( \left(n+1\right)^{2} \) מחוברים מהצורה \( a_{i}b_{j}10^{i+j} \) כאשר \( i,j \) הם מספרים כלשהם בין 0 ו-\( n \) (יש \( n+1 \) מספרים שכאלו - מכאן הגיע הפלוס 1).
עכשיו, בכפל “רגיל” מבצעים קיבוץ איברים בצורה הבאה:
\( \sum_{i,j=0}^{n}a_{i}b_{j}10^{i+j}=\sum_{j=0}^{n}b_{j}\left(\sum_{i=0}^{n}a_{i}10^{i}\right)\cdot10^{j} \)
כלומר, אנחנו מקבלים \( n+1 \) מספרים, שכל אחד מהם הוא התוצאה של הכפלת \( b_{j} \) (מספר בין 0 ל-9) ב-\( a_{n}\cdots a_{1}a_{0} \) (המספר הראשון כולו), כשאת התוצאה הזו כופלים ב-\( 10^{j} \), כלומר “מזיזים \( j \) מקומות שמאלה”.
השלב המאתגר כאן הוא לכפול את \( a_{n}\cdots a_{1}a_{0} \) במספר \( b_{j} \). התוצאה היא פשוט \( \sum_{i=0}^{n}a_{i}b_{j}10^{i} \), אבל כשרוצים לכתוב את זה בתור מספר עשרוני צריך להיזהר כי \( a_{i}b_{j} \) עשוי להיות גדול יותר מ-9, ולכן כבר לא ספרה לכשעצמו. מה כן אפשר לומר עליו בודאות? מכיוון ש-\( a_{i}\le9 \) וגם \( b_{j}\le9 \) הרי ש-\( a_{i}b_{j}\le81 \) ולכן המכפלה של שני המספרים הללו היא לכל היותר בת 2 ספרות. לכן אפשר לפצל אותה לשניים: ספרת האחדות היא מה שייכתב בפועל, ואילו ספרת האחדות הופכת ל”נשא” (Carry) שיחובר אל האיבר הבא בתור, \( a_{i+1}b_{j} \) (ואם \( i=n \), אז הוא פשוט ייכתב משמאל לספרה הנוכחית). שימו לב שגם אם מחברים ל-\( a_{i}b_{j} \) נשא של 9 אנחנו לא יכולים להגיע ל-100 אלא לכל היותר לספרת עשרות של 9, ולכן השיטה עובדת.
כל מה שנותר הוא להסביר איך אנחנו יודעים לחשב את מכפלת שתי ספרות, \( a_{i}b_{j} \). התשובה היא שאין כאן פתרונות קסם. מה שעושים בדרך כלל הוא לשנן בעל פה את המכפלה של כל המספרים מ-1 עד 9 אלו באלו. זה מה שנקרא “לוח הכפל”. זה אחד מהדברים הבודדים במתמטיקה שלדעתי אכן הכרחי לשנן. יש כמה תעלולים שמקלים על הזכרון עבור חלק מהמקרים (למשל, הכפולות של 9 הן מהצורה \( ab \) כך ש-\( a+b=9 \) וזה בהחלט מקל על השינון) אבל בשורה התחתונה - כאן אכן צריך לשנן.
אגב, שאלה שאינה קשורה לנושא הפוסט הזה אבל בהחלט מתעוררת בשלב הזה היא למה לא לעבוד עם בסיס ספירה שונה מ-10. בפרט, אם נעבוד עם פחות ספרות, לוח הכפל יהיה קל יותר לשינון. זה אמנם נכון, אבל ככל שיש לנו פחות ספרות בבסיס הספירה, כך האורך של מספרים הולך וגדל. מן העבר השני אפשר היה לעבוד עם בסיס ספירה גדול יותר מ-10 וזה היה מקצר את האורך של מספרים, אבל מצריך מאיתנו שינון של לוח כפל גדול יותר. האם זה אומר ש-10 נבחר כי הוא איזון טוב בין שני הכוחות הסותרים הללו? ודאי שלא. קרוב לודאי ש-10 נבחר כי יש לנו 10 אצבעות שבהן האדם השתמש לספירה. במהלך ההיסטוריה עמים שונים עבדו עם בסיסים שונים והעובדה ש-10 השתרש לבסוף מעידה - כך אני מנחש - על כך שהוא הרגיש יותר “טבעי” למרבית האנשים (אבל ייתכן שסתם היה לו מזל ועכשיו לכו ותשנו את זה).
בואו ונעבור כעת לשיטת הכפל היפני. כזכור, כפל של שני מספרים מניב את המכפלה
\( \sum_{i,j=0}^{n}a_{i}b_{j}10^{i+j} \)
ושיטת הכפל ה”רגילה” התבססה על דרך אחת לקבץ את הסכום הזה לאיברים. הכפל היפני מתבסס על שיטת קיבוץ אחרת לגמרי:
\( \sum_{i,j=0}^{n}a_{i}b_{j}10^{i+j}=\sum_{k=0}^{n}\left(\sum_{i=0}^{k}a_{i}b_{k-i}\right)10^{k} \)
וכדי שלא יהיה יותר מדי מבלבל, בואו נראה דוגמה קונקרטית למקרה של המספרים \( a_{1}a_{0},b_{1}b_{0} \):
\( a_{0}b_{0}\cdot10^{0}+\left(a_{1}b_{0}+a_{1}b_{0}\right)\cdot10^{1}+a_{1}b_{1}\cdot10^{2} \)
כאן \( a_{0}b_{0} \) הוא מספר החיתוכים של שתי קבוצות הקווים בקו הרוחב הימני ביותר, \( a_{1}b_{0}+a_{1}b_{0} \) הוא מספר החיתוכים של קבוצות הקווים בקו הרוחב ה”אמצעי” (שכולל, כפי שאפשר לראות בתמונה, שתי קבוצות מובחנות שונות של חיתוכים) ו-\( a_{1}b_{1} \) מתאים לקו הרוחב השמאלי. החזקות של 10 שמוכפלות באיברים הללו מצדיקות את הטענה המקורית שלי שהקבוצה הימנית ביותר מתאימה לספרת האחדות, זו שאחריה לספרת העשרות וכן הלאה.
אם יש לנו שתי סדרות, \( a_{0},a_{1},\dots,a_{n} \) ו-\( b_{0},b_{1},\dots,b_{n} \) אז ביטוי מהצורה \( \sum_{i=0}^{k}a_{i}b_{k-i} \) נקרא קונבולוציה של שתי הסדרות - הקונבולוציה ה-\( k \)-ית. דרך ציורית חזקה מאוד להדגמת הרעיון בקונבולוציה היא זו: ראשית כתבו את הסדרה הראשונה. כעת כתבו מתחתיה את הסדרה השניה כשהיא הפוכה ומוזזת כך שהאיבר ה-\( k \) בה נמצא בדיוק מתחת לאיבר \( a_{0} \) של הסדרה הראשונה. כעת כפלו כל זוג איברים של הסדרות שנמצאים האחד מעל השני, וסכמו. כל הקונבולוציות האפשריות של שתי הסדרות מתקבלים כשלוקחים את הסדרה התחתונה ובכל שלב מזיזים אותה צעד אחד שמאלה, ומחשבים את הקונבולציה שהתקבלה הפעם.
לקונבולוציות חשיבות אדירה במתמטיקה. בעזרת משהו שנקרא התמרת פורייה המהירה אפשר לבצע קונבולוציות מסויימיות ביעילות חישובית גבוהה, מה שמוביל לשיטות כפל מהירות. זה נושא לפוסטים מרתקים ויהיו כאלו אחרי שאתחיל לדבר על התמרת פורייה; כרגע זה לחלוטין לא רלוונטי ולכן נעזוב את זה. אנשים רגילים לא מבצעים התמרות פורייה.
מכל מקום, ההצגה של הכפל באמצעות קונבולוציה מבהירה לנו, אני מקווה, למה השיטה עובדת. אין כאן שום Mind blown לדעתי, אם כי המושג של קונבולוציה הוא יפה למדי, וממבט ראשון הוא עשוי גם להיראות מוזר. רק בשל העובדה שהשיטה הזו דוחפת לנו את מושג הקונבולוציה לפרצוף (אנחנו נצטרך להתמודד איתו ולו באופן מובלע, כדי לדעת אילו קבוצות של הצטלבויות שייכות לאותה ספרה) אני חושב שהיא מעניינת ושווה הצגה; קצת חבל לי שבהצגה הסטנדרטית שלה לא מתארים את מושג הקונבולוציה במפורש.
אבל, וכעת אנחנו מגיעים לחלק הוכחני של הפוסט - מי מבין השיטות טובה יותר? האם השיטה היפנית עדיפה על השיטה הרגילה או לא?
נתחיל מהתשובה הלמלמית (לא מועילה, לא מזיקה) המתבקשת - שכל אחד יחליט מה השיטה שיותר טובה לו וישתמש בה. מתמטיקה היא לא מדע מדויק ולכל אחד יש את הגישה שלו לביצוע חישובים מתמטיים. חשוב גם לזכור שביצוע של חישובים זו לא מתמטיקה; זה בסך הכל חישוב וזה לא מעניין. החלק ה”מתמטי” בשיטות הללו הוא להבין למה הן עובדות, ועל זה דיברנו. ביצוע פעולות של כפל הוא לא משהו שאנחנו עושים בדרך כלל בחיי היום יום עם נייר ועט; מי שצריך לבצע חישובים על בסיס סדיר לרוב מצויד במחשבון. זה לא אומר שלא צריך לדעת שיטה לכפל - לדעתי תמיד כדאי לדעת לבצע משהו לא מסובך בעצמך גם אם לרוב אפשר להסתמך על כלי כלשהו שיעשה את זה עבורך - אבל שאין שום דבר קריטי בלהעדיף שיטה אחת על השניה.
ועדיין, זה בוודאי לא מספיק לומר את זה. הרי מישהו צריך להחליט על איזו שיטה לתת דגש בבית הספר. האם להעביר את הדגש לשיטה היפנית? ובכן, צריך להבדיל בין שני דברים - כמה קשה ללמוד את השיטה, וכמה קשה להשתמש בה בפועל. אני חושב ששאלת ה”כמה קשה ללמוד את השיטה” היא דווקא השאלה הפחות חשובה מבין השתיים, כי אף שיטה אינה כה קשה עד כי נדרש מאמץ יוצא דופן כדי ללמד אותן. עיקר מה שצריך לעשות הוא לתרגל את השיטות ולהתרגל אליהן. לכן יותר מעניין אותי, בטווח הארוך, עד כמה השיטות יעילות להפעלה. לצורך כך אחשוב עליהן בתור אלגוריתמים - כי זה בעצם מה שהן - ואעשה מעין “ניתוח סיבוכיות” לא מדויק שלהן, כשהמטרה שלי היא בכלל להבין אילו פעולות אני מבצע בכל אחת מהשיטות, כמה מהן יש, והאם אפשר להשוות ביניהן בצורה ברורה.
נתחיל בכפל רגיל. נניח שאנחנו כופלים שני מספרים, בני \( n \) ו-\( k \) ספרות, כך ש-\( k<n \). ראשית אנחנו כותבים את שני המספרים כשהגדול מעל הקטן - זה דורש \( n+k \) צעדי כתיבה. עכשיו, לכל אחת מהספרות של המספר הקטן אנחנו כופלים אותה בכל אחת מספרות המספר הגדול ואולי גם מוסיפים את הנשא מהכפל עם הספרה הקודמת של המספר הגדול. סך הכל \( n\cdot k \) פעולות כפל ו(בערך) \( n\cdot k \) פעולות חיבור. כעת קיבלנו \( k \) מספרים שיש לחבר (המספרים שמתקבלים מכפל כל ספרה במספר הקטן במספר הגדול). האורך של כל אחד מהם הוא (בערך) \( n \) ולכן אנחנו מבצעים (בערך) \( n\cdot k \) פעולות חיבור בסיסיות. הפלט עצמו כולל (בערך) \( n+k \) ספרות והיו לנו (בערך) \( n\cdot k \) ספרות ביניים שכתבנו, כך שסך הכל ביצענו \( 2\left(n+k\right)+nk \) צעדי כתיבה, \( 2n\cdot k \) צעדי חיבור ו-\( n\cdot k \) צעדי כפל. החלק ה”כבד” ביותר כאן הוא ביצוע פעולות הכפל; אנחנו מניחים שמי שמבצע את האלגוריתם זוכר בעל פה את לוח הכפל ולכן הצעדים הללו קלים לו יחסית - לא יותר קשים מאשר צעדי החיבור.
בכפל יפני הסיפור שונה כי הפעולות שאנחנו מבצעים הן בעיקרן שונות. ראשית כל אנחנו צריכים לצייר קווים. כמה קווים? ובכן, \( n+k \) קבוצות של קווים, אבל מספר הקווים בקבוצה הוא בין 1 ל-9, כתלות בספרות של המספרים שאנחנו כופלים. זו תכונה שלא קיימת בשיטה הרגילה - בהינתן שאנחנו זוכרים את לוח הכפל בעל פה, לא ממש משנה לנו מה הספרות שיש במספרים שכופלים, בעוד שבשיטה היפנית ספרות גדולות דורשות יותר עבודה (וזה לא ממש מפתיע שבדוגמאות שיש בתמונות ובסרטונים רוב הספרות קטנות).
שימו לב שלא מספיק לצייר את הקווים - צריך גם לעשות את זה טוב, כלומר באופן כזה שקבוצות החיתוכים השונות (בעלות “קו רוחב” שונה) יהיו מובחנות זו מזו בקלות. יש שמגדילים וצובעים קבוצות קווים שמתאימות לספרות שונות בצבעים שונים. בקיצור, סיפור. אני משער שהשרטוט הזה גוזל זמן רב יותר מאשר נדרש לכתוב את שני המספרים שכופלים זה מעל זה כמו בשיטה הרגילה.
כעת מגיע האקשן - ההכפלה. יש לנו \( n\cdot k \) איזורי חיתוך שונים בין קבוצות הישרים, ואנחנו צריכים לספור את כולם. בכל אחד כזה צריך לספור את נקודות החיתוך - והמספר שלהן תלוי לגמרי בגודל הקבוצות שנחתכות, כלומר בגודל הספרות שמכפילים. אם כופלים את 2 ב-2 יהיו לנו רק 4 נקודות חיתוך; אם כופלים את 7 ב-9 יהיו לנו 63 נקודות חיתוך. האם זה סביר לספור את כולן “בעיניים”? לא נראה לי. די בבירור יש כאן מקום לאופטימיזציה כלשהי, אבל על כך נדבר בהמשך.
אחרי שמסכמים את כל הנקודות בקו רוחב מסויים כותבים את הסכום. גם כאן יכול להיות נשא, ויהיה צורך לזכור אותו היכן שהוא כי אחר כך מתחילים לסכום קבוצה חדשה ומי יכול לזכור את הנשא לכל אורך המניה הזה (זכרו - אלגוריתמים מבוצעים על ידי אנשים כמוני, שהם ממש גרועים בחישוב; איש הגשם לא צריך את השטויות הללו, כנראה). כדאי לשים לב שכאן הנשא יכול בהחלט להיות בן כמה ספרות - אם למשל בקו הרוחב יש 5 איזורי חיתוך ובכל אחד יש בערך 50 חיתוכים קיבלנו כבר סכום של 250, ולכן נשא של 25. בקיצור - יש \( n+k \) קווי רוחב שונים (בערך) ולכן נכתוב (בערך) \( n+k \) ספרות ונבצע \( n+k \) פעולות חיבור. סך הכל ביצענו \( n+k \) פעולות של כתיבת ספרות ו-\( n+k \) פעולות של חיבור, אבל גם \( n+k \)פעולות של שרטוט קבוצות קווים ו-\( n\cdot k \) פעולות של מניית חיתוכים.
המסקנה העיקרית והלא מפתיעה היא שלא ממש ברור איך אפשר להשוות את שני האלגוריתמים, הרי הפעולות הבסיסיות שלהם הן שונות לגמרי. אז מה לעשות? אני יכול להריץ את שני האלגוריתמים על אותם קלטים ולמדוד לעצמי זמן, אבל מה תהיה המסקנה מזה? הרי אני מיומן בשיטה הרגילה הרבה יותר מאשר בשיטה היפנית. אם כן, השוואה אבסולוטית לא תהיה לנו. אינטואיטיבית השיטה היפנית נראית לי נחותה יותר בשל מה שהוא גם ה”יתרון” שלה - הצורך לספור חיתוכים בעיניים. נראה לי שזה פשוט לוקח יותר מדי זמן כשיש יותר מדי חיתוכים, לעומת המקבילה של לזכור את לוח הכפל.
בואו ננסה לרגע להבין האם אפשר לשפר את עניין ספירת החיתוכים. אפשר, למשל, לא לצייר קבוצות של קווים, אלא פשוט לצייר קו עם מספר לידו שאומר כמה קווים “אמורים” להיות בקבוצה. כל מה שנותר הוא לזהות נקודות חיתוך ולחשב בראש את הסכום עבור כל קו רוחב. בשיטה הראשונה אנחנו ממש סופרים את הנקודות שמהוות את הקונבולוציה \( \sum_{i=0}^{k}a_{i}b_{k-i} \), ואילו בשיטה השניה אנחנו רואים את הזוגות \( a_{i},b_{k-i} \) בעיניים ומחשבים את המכפלות-וסכומים שלהם בראש. לדעתי זה מאתגר קצת יותר מאשר ביצוע הכפל-וחיבור-נשא של השיטה הרגילה, ובכל מקרה זה מצריך לזכור את לוח הכפל. אנחנו רואים שאין מנוס מכך - אם לא רוצים לספור חיתוכים פיזית, צריך לזכור את לוח הכפל.
חסרון אחד שאפשר אולי לציין לשיטה היפנית הוא שלא ברור מה עושים עם אפס, אבל זה לא באמת חסרון - פשוט לא מציירים את הקו שלו. אפשר גם לצייר קו מקוקו או קו שכתוב לידו אפס אם לא רוצים להתבלבל - כאשר הסכנה לבלבול היא בהחלטה על אילו קבוצות חיתוכים שייכות לאילו קווי רוחב. עדיין, בכפל רגיל אפס מבלבל עוד פחות - פשוט כותבים אפס בתור אחד מהמספרים שנכנסים לסכום.
עוד חסרון שהוא כנראה די ברור הוא שלא כללתי במדדי הסיבוכיות שלי את סיבוכיות המקום על הדף שנדרשת כדי לצייר את הציור של הכפל היפני. ככל שיש יותר ספרות שכופלים כך הציור יצטרך להיות יותר גדול על מנת שלא יהיה מבלבל. כפל רגיל נראה לי קומפקטי יותר. האם זה חסרון אמיתי? כנראה שהוא לא נורא במיוחד.
אם כן, האם לדעתי לא ניתן להכריע בין השיטות? לא. לדעתי השיטה הרגילה עדיפה בהרבה, אבל מסיבה שעד כה לא כללתי במערך השיקולים אבל היא תמיד חשובה כשמתכננים אלגוריתם - רובסטיות, או ליתר דיוק - יכולת התמודדות עם שגיאות. השיטה היפנית, כמו כל דבר שבו מונים כמות גדולה של פריטים או מבצעים חישוב ארוך בראש (חישוב הקונבולוציה) מסתמכת על כך שהאדם שמבצע את החישוב יצליח לכלול בראש כמות “גדולה” (יחסית לכפל רגיל) של אינפורמציה מבלי שהמידע הזה ישתבש. כולנו יודעים איך זה משתבש - כמה מאיתנו לא באו אל אדם שעוסק באמצע חישוב בראש או ספירה והתחיל לומר לו “שבע-עשרה, חמישים, עשרים ושתיים, שמונים!” כדי לשגע אותו? בסופו של דבר, המטרה של שיטות הכפל הללו היא לאפשר לאדם - שהוא לא מכונה - לבצע חישוב ארוך ומסובך עם הרבה פרטים בלי להתבלבל. שיטות שפותחות פתח לבלבול הן לטעמי פחות טובות, ועשויות לגרום לתסכול לא קטן למי שמשתמש בהן.
אם כן, לסיכום: שיטת הכפל היפני היא ללא ספק מגניבה, אבל כפל ארוך רגיל הוא גם כן דבר מגניב מאין כמותו ולא ברור אם צריך להחליף אותו במשהו. רק בגלל שלמדתם משהו בבית הספר היסודי לא אומר שצריך לקחת אותו כמובן מאליו או שהוא לא דבר מתוחכם!
נהניתם? התעניינתם? אם תרצו, אתם מוזמנים לתת טיפ: