Menu
CoddyTech

Matrix Chain Multiplication

שרשרת של מטריצות מתוארת באמצעות dims: למטריצה i יש dims[i] שורות ו-dims[i+1] עמודות, כך שכל מטריצה מתאימה לזו שאחריה. הכפלת מטריצת p × q במטריצת q × r דורשת p × q × r כפלות סקלריות ומפיקה מטריצת p × r. כל דרך להציב את הסוגריים נותנת את אותה מכפלה סופית, אך לא באותה עלות. החזר את המספר הקטן ביותר של כפלות סקלריות הדרושות להכפלת השרשרת כולה.

פונקציה

matrixChainOrder(dims: integer-array) → integer
dimsinteger-array
הגדלים לאורך השרשרת: מטריצה i היא dims[i] × dims[i+1]
מחזירהinteger
מספר הכפלות הסקלריות הקטן ביותר הדרוש להכפלת כל השרשרת

אילוצים

  • 2 ≤ dims.length ≤ 100, כך שהשרשרת מכילה בין 1 ל־99 מטריצות.
  • 1 ≤ dims[i] ≤ 100
  • התשובה היא לכל היותר 98 × 106, הרבה מתחת לגבול של מספר שלם signed בן 32 סיביות.

דוגמאות

קלט
dims = [4, 10, 3, 12]
פלט
264
הסבר
הכפלת שני הגורמים הראשונים עולה 4 × 10 × 3 = 120 ומשאירה מטריצה בגודל 4 × 3, שכאשר מכפילים אותה במטריצה בגודל 3 × 12, מתווספת עלות של 144: בסך הכול 264. הסדר האחר עולה 360 + 480 = 840.
challenge icon

שאלת המשך

האם תוכל גם לספור כמה סוגריים שונים משיגים את העלות המינימלית?

איפוס הקוד
def matrixChainOrder(dims):
    # כתבו כאן קוד

בדיקה #1

בדיקה #2

בדיקה #3

ארגומנט

dims = [4, 10, 3, 12]

הפלט הצפוי

264