در این مطلب، ویدئو جمع هدف – برنامه نویسی پویا – Leetcode 494 – Python با زیرنویس فارسی را برای دانلود قرار داده ام. شما میتوانید با پرداخت 15 هزار تومان ، این ویدیو به علاوه تمامی فیلم های سایت را دانلود کنید.اکثر فیلم های سایت به زبان انگلیسی می باشند. این ویدئو دارای زیرنویس فارسی ترجمه شده توسط هوش مصنوعی می باشد که میتوانید نمونه ای از آن را در قسمت پایانی این مطلب مشاهده کنید.
مدت زمان فیلم: 00:13:00
تصاویر این ویدئو:
قسمتی از زیرنویس این فیلم:
00:00:00,080 –> 00:00:02,879
به کد آموزشی dot io
2
00:00:02,879 –> 00:00:05,359
مراجعه کنید تا 10 عدد در اشتراک خود صرفه جویی کنید.
3
00:00:05,359 –> 00:00:07,600
4
00:00:07,600 –> 00:00:09,440
5
00:00:09,440 –> 00:00:11,519
6
00:00:11,519 –> 00:00:14,160
7
00:00:14,160 –> 00:00:16,239
و
8
00:00:16,239 –> 00:00:19,279
همچنین یک عدد صحیح به نام target به ما داده می شود و
9
00:00:19,279 –> 00:00:22,240
اساساً برای هر عدد منفرد در اعداد
10
00:00:22,240 –> 00:00:25,119
آرایه می توانیم انتخاب کنیم
11
00:00:25,119 –> 00:00:28,480
که آن عدد را جمع کنیم یا آن عدد را کم کنیم و
12
00:00:28,480 –> 00:00:30,640
باید این کار را برای هر عدد
13
00:00:30,640 –> 00:00:32,320
انجام دهیم که باید آن را اضافه کنیم. یا
14
00:00:32,320 –> 00:00:34,880
آن را کم کنید و سپس با استفاده از آن
15
00:00:34,880 –> 00:00:36,160
16
00:00:36,160 –> 00:00:39,600
مقداری مجموع یا مقداری در انتهای
17
00:00:39,600 –> 00:00:42,640
محاسبات خود خواهیم داشت و اساساً می
18
00:00:42,640 –> 00:00:44,480
خواهیم بدانیم آیا این محاسبه که
19
00:00:44,480 –> 00:00:47,039
مجموع آن کل داریم برابر
20
00:00:47,039 –> 00:00:49,920
با مقدار هدفی است که ما بودیم.
21
00:00:49,920 –> 00:00:52,879
در ابتدا درست داده شده است و نه تنها این،
22
00:00:52,879 –> 00:00:55,920
بلکه میخواهیم تعداد راههایی را بشماریم
23
00:00:55,920 –> 00:00:58,559
که میتوانیم از اعداد این آرایه مجموعی بدست آوریم
24
00:00:58,559 –> 00:01:02,160
که برابر با این مقدار هدف است
25
00:01:02,160 –> 00:01:04,400
و سپس میخواهیم به چند روش
26
00:01:04,400 –> 00:01:07,520
که توانستیم این کار را انجام دهیم، برگردانیم. t بنابراین در این
27
00:01:07,520 –> 00:01:09,760
مثال می توانید ببینید که به ما یک
28
00:01:09,760 –> 00:01:13,119
عدد آرایه از پنج عدد متوالی و یک
29
00:01:13,119 –> 00:01:16,240
مقدار هدف 3 داده شده است و شما می توانید
30
00:01:16,240 –> 00:01:18,400
تمام روش های مختلف را مشاهده کنید که ما می توانیم
31
00:01:18,400 –> 00:01:20,640
آن مقدار کل سه را جمع
32
00:01:20,640 –> 00:01:23,520
کنیم، پنج روش مختلف برای این کار را درست انجام دهید،
33
00:01:23,520 –> 00:01:25,280
می توانید اولین مورد را کم کنید، اگر اولی را کم کنیم
34
00:01:25,280 –> 00:01:28,080
، بعدی را اضافه کنیم،
35
00:01:28,080 –> 00:01:30,720
بعدی را اضافه کنیم و بعدی را اضافه
36
00:01:30,720 –> 00:01:33,119
کنیم، می توانیم به سه
37
00:01:33,119 –> 00:01:35,840
سمت راست برسیم که اساساً چهار مثبت و یک
38
00:01:35,840 –> 00:01:37,680
منفی است. ما با مجموع
39
00:01:37,680 –> 00:01:40,240
سه می توانید ببینید که
40
00:01:40,240 –> 00:01:42,000
مثال بعدی به روش بعدی که ما توانستیم انجام دهیم
41
00:01:42,000 –> 00:01:44,640
که اساساً ما دومی را کم کردیم
42
00:01:44,640 –> 00:01:46,479
اولی را اضافه کردیم و سپس سه بعدی را اضافه
43
00:01:46,479 –> 00:01:49,200
44
00:01:49,200 –> 00:01:52,079
کردیم. اینها
45
00:01:52,079 –> 00:01:54,479
اهمیت دارند، بنابراین اگر بتوانیم ترتیب
46
00:01:54,479 –> 00:01:56,719
نمادهای مثبت و منفی را تغییر دهیم، میدانید که
47
00:01:56,719 –> 00:01:58,960
به عنوان روشی متفاوت به حساب میآید که ما
48
00:01:58,960 –> 00:02:01,600
توانستیم به درستی هدف را جمع کنیم، بنابراین
49
00:02:01,600 –> 00:02:03,119
اساساً ما
50
00:02:03,119 –> 00:02:05,520
جایگشتها را میشماریم، بنابراین این میتواند یک
51
00:02:05,520 –> 00:02:07,520
مشکل پیچیده اگر آشنا نیستید با آن،
52
00:02:07,520 –> 00:02:09,440
پس بیایید با راه حل brute force شروع
53
00:02:09,440 –> 00:02:11,120
کنیم که 2 به
54
00:02:11,120 –> 00:02:13,040
توان n خواهد بود و سپس بیایید ببینیم چگونه می توانیم
55
00:02:13,040 –> 00:02:15,360
در واقع آن را به یک
56
00:02:15,360 –> 00:02:17,760
راه حل کارآمدتر بهینه کنیم، بنابراین فرض کنید
57
00:02:17,760 –> 00:02:19,520
همان مثالی را به ما داده شود که همین الان صحبت کردیم.
58
00:02:19,520 –> 00:02:22,400
در مورد هدف 3 و 5 یک
59
00:02:22,400 –> 00:02:25,120
در ورودی به خاطر داشته باشید برای هر
60
00:02:25,120 –> 00:02:26,879
یک از مقادیری که ما حق انتخاب
61
00:02:26,879 –> 00:02:29,280
داریم، میتوانیم آن را به درستی اضافه یا کم
62
00:02:29,280 –> 00:02:31,280
کنیم و بهترین راه برای تجسم این موضوع
63
00:02:31,280 –> 00:02:33,680
برای من همیشه استفاده از درخت تصمیم
64
00:02:33,680 –> 00:02:35,760
درست است، بنابراین اگر ما میخواهیم همه
65
00:02:35,760 –> 00:02:38,239
راههای ممکن را بدانیم.
66
00:02:38,239 –> 00:02:40,080
67
00:02:40,080 –> 00:02:42,800
68
00:02:42,800 –> 00:02:44,879
69
00:02:44,879 –> 00:02:47,680
70
00:02:47,680 –> 00:02:49,120
71
00:02:49,120 –> 00:02:50,239
در ابتدا ما در
72
00:02:50,239 –> 00:02:52,400
شاخص صفر خواهیم بود و به حرکت خود
73
00:02:52,400 –> 00:02:54,400
ادامه می دهیم و همانطور که درست
74
00:02:54,400 –> 00:02:56,720
به دومین سومین شاخص چهارم انتخاب می کنیم تا زمانی
75
00:02:56,720 –> 00:02:59,360
که البته به انتهای آرایه
76
00:02:59,360 –> 00:03:00,560
برسیم چیز دیگری که قرار است باشیم ادامه دهیم.
77
00:03:00,560 –> 00:03:02,959
پیگیری آنچه شما هستید r total تا اینجای
78
00:03:02,959 –> 00:03:04,400
کار، البته ما میخواهیم بدانیم مجموع ما
79
00:03:04,400 –> 00:03:06,080
تا کنون چقدر است، زیرا زمانی که
80
00:03:06,080 –> 00:03:08,159
به انتهای آرایه میرسیم، میخواهیم بدانیم
81
00:03:08,159 –> 00:03:10,720
مجموع ما با مقدار هدف برابر است یا
82
00:03:10,720 –> 00:03:13,360
نه با استفاده از این جفت مقادیر
83
00:03:13,360 –> 00:03:14,959
پارامتر تابع بازگشتی
84
00:03:14,959 –> 00:03:16,959
ما یک درخت تصمیم دریافت می
85
00:03:16,959 –> 00:03:18,480
کنیم که چیزی شبیه به این است.
86
00:03:18,480 –> 00:03:21,840
87
00:03:21,840 –> 00:03:24,080
88
00:03:24,080 –> 00:03:25,760
89
00:03:25,760 –> 00:03:28,080
در اینجا درست در بالا سمت چپ،
90
00:03:28,080 –> 00:03:30,560
میتوانیم انتخاب کنیم که یک
91
00:03:30,560 –> 00:03:32,720
راست به علاوه یک یا
92
00:03:32,720 –> 00:03:36,400
منهای یک اضافه کنیم، اگر یکی را اضافه کنیم،
93
00:03:36,400 –> 00:03:38,159
شاخص ما یک خواهد بود، زیرا
94
00:03:38,159 –> 00:03:39,680
به موقعیت بعدی سمت
95
00:03:39,680 –> 00:03:40,959
راست میرویم. اکنون در این موقعیت قرار خواهیم گرفت
96
00:03:40,959 –> 00:03:43,360
که در شاخص یک است و
97
00:03:43,360 –> 00:03:44,720
مقدار دومی که در حال
98
00:03:44,720 –> 00:03:46,319
پیگیری آن هستیم نیز یک خواهد بود، زیرا
99
00:03:46,319 –> 00:03:48,799
اگر
100
00:03:48,799 –> 00:03:51,040
گزینه مخالف را انجام می دادیم، اکنون یک عدد اضافه کرده ایم، همچنان در نهایت در نهایت به آن می رسیم.
101
00:03:51,040 –> 00:03:53,040
شاخص یک اما مجموع ما
102
00:03:53,040 –> 00:03:55,040
منفی یک راست خواهد بود که مقدار دوم ما
103
00:03:55,040 –> 00:03:57,519
روی h است پیش از این و این درخت تصمیم
104
00:03:57,519 –> 00:03:58,720
در واقع برای ما بسیار ساده خواهد بود،
105
00:03:58,720 –> 00:04:00,400
زیرا همه مقادیر موجود در
106
00:04:00,400 –> 00:04:02,799
ورودی یکی هستند، بنابراین اساساً هر
107
00:04:02,799 –> 00:04:04,239
تصمیم دقیقاً شبیه
108
00:04:04,239 –> 00:04:06,239
این است. اجازه دهید من به سرعت
109
00:04:06,239 –> 00:04:08,959
آن را ترسیم کنم تا به شما یک ایده خوب است، بنابراین
110
00:04:08,959 –> 00:04:10,879
ما به نوعی از اتاق خارج شدیم، بنابراین من
111
00:04:10,879 –> 00:04:12,799
کل درخت را نمی کشم، اما فقط برای نشان دادن
112
00:04:12,799 –> 00:04:15,360
یک مسیر به شما یک مسیر واحد که
113
00:04:15,360 –> 00:04:17,759
ما را به هدف می رساند، بنابراین ابتدا
114
00:04:17,759 –> 00:04:20,560
از اولین نقطه شروع می کنیم و اولین نقطه را اضافه می کنیم.
115
00:04:20,560 –> 00:04:22,720
یک راست پس این یک راست مثبت است
116
00:04:22,720 –> 00:04:25,440
که ما تا اینجا در یک هستیم سپس
117
00:04:25,440 –> 00:04:27,680
این مسیر را پایین میرویم که در آن گفتیم منهای
118
00:04:27,680 –> 00:04:30,000
یک راست سپس کل ما صفر است بنابراین
119
00:04:30,000 –> 00:04:32,880
منهای یک و سپس دوباره یک را اضافه میکنیم و دوباره در
120
00:04:32,880 –> 00:04:35,440
شاخص سه هستیم. یک
121
00:04:35,440 –> 00:04:38,639
تا به علاوه یک در اینجا، سپس یکی دیگر را اضافه می
122
00:04:38,639 –> 00:04:42,160
کنیم که در شاخص چهار مجموع دو هستیم و
123
00:04:42,160 –> 00:04:44,800
سپس آخرین مورد را درست پنجمی
124
00:04:44,800 –> 00:04:47,199
اضافه می کنیم و این را نیز اضافه می کنیم که
125
00:04:47,199 –> 00:04:50,400
مجموع ما دقیقاً روی سه باقی می ماند که خوب است و
126
00:04:50,400 –> 00:04:54,160
ما را در این قرار می دهد. شاخص پنج چاه شاخص
127
00:04:54,160 –> 00:04:56,880
صفر اینجا یک اینجا دو اینجا سه چهار پن
128
00:04:56,880 –> 00:05:00,000
دقیقاً خارج از بو است بنابراین، به
129
00:05:00,000 –> 00:05:02,160
محض اینکه از محدوده خارج شدیم، کار را درست انجام
130
00:05:02,160 –> 00:05:04,240
دادیم، اکنون به حالت اولیه خود رسیده ایم، اکنون می خواهیم
131
00:05:04,240 –> 00:05:06,560
بدانیم که مجموع ما تا کنون است که در حال حاضر
132
00:05:06,560 –> 00:05:08,720
سه است، آیا برابر با
133
00:05:08,720 –> 00:05:11,120
هدف است بله دقیقاً برابر است با
134
00:05:11,120 –> 00:05:13,759
هدف، بنابراین اکنون کار ما تمام شده است، ما یک
135
00:05:13,759 –> 00:05:16,000
راه واحد پیدا کردیم که بتوانیم درست به
136
00:05:16,000 –> 00:05:17,440
مقدار هدف برسیم، البته
137
00:05:17,440 –> 00:05:20,000
مسیرهای دیگری نیز در درخت تصمیم ما وجود خواهد داشت
138
00:05:20,000 –> 00:05:21,680
که به نتیجه نیز منجر می شود،
139
00:05:21,680 –> 00:05:23,440
اما مسیرهایی نیز وجود دارد
140
00:05:23,440 –> 00:05:25,360
که ممکن است
141
00:05:25,360 –> 00:05:28,320
اگر دو تا از
142
00:05:28,320 –> 00:05:30,000
آنها را کم کنیم و سپس سه تای آنها را اضافه کنیم
143
00:05:30,000 –> 00:05:32,000
که با هدف ما برابری نمی کند، احتمالاً یکی را درست می دانی.
144
00:05:32,000 –> 00:05:34,000
145
00:05:34,000 –> 00:05:36,320
146
00:05:36,320 –> 00:05:37,840
میخواهیم شمارش کنیم که چند مسیر
147
00:05:37,840 –> 00:05:39,759
مختلف توانستهاند ما را به آن مقدار هدف هدایت
148
00:05:39,759 –> 00:05:42,080
کنند، اکنون این نیروی بیرحم است،
149
00:05:42,080 –> 00:05:44,160
البته این درخت میتواند ارتفاعی برابر با
150
00:05:44,160 –> 00:05:46,800
n داشته باشد و بدیهی است که ما هر بار دو شاخه داریم و
151
00:05:46,800 –> 00:05:48,160
152
00:05:48,160 –> 00:05:50,400
برای هر گره، دو مسیر متفاوت داریم.
153
00:05:50,400 –> 00:05:51,919
به طوری که پیچیدگی زمانی
154
00:05:51,919 –> 00:05:54,479
را 2 تا p قرار می دهد بر اساس n چگونه
155
00:05:54,479 –> 00:05:57,840
می توانیم این خوب را بهینه کنیم، این ترفند
156
00:05:57,840 –> 00:06:00,000
در پارامترهایی است که
157
00:06:00,000 –> 00:06:02,160
به تابع بازگشتی خود منتقل می کنیم،
158
00:06:02,160 –> 00:06:04,000
درست همان شاخصی که حفظ می کنیم
159
00:06:04,000 –> 00:06:06,960
و مجموع کل ما نیز
160
00:06:06,960 –> 00:06:08,960
با استفاده از آنها می توانیم در واقع بهینه سازی کنیم.
161
00:06:08,960 –> 00:06:12,639
این راه حل بنابراین ما می توانیم از ایده
162
00:06:12,639 –> 00:06:16,080
ذخیره سازی برای بهینه سازی این مشکل مانند
163
00:06:16,080 –> 00:06:18,720
اکثر مسائل برنامه نویسی پویا استفاده کنیم،
164
00:06:18,720 –> 00:06:20,880
بنابراین به پارامترهایی
165
00:06:20,880 –> 00:06:23,600
که شاخصی را داریم که در حال ارسال آن هستیم و
166
00:06:23,600 –> 00:06:25,759
مجموع تعداد مقادیر ممکن را
167
00:06:25,759 –> 00:06:29,360
که می توانیم برای آن ارسال کنیم نگاهی بیندازیم. مقدار شاخص البته
168
00:06:29,360 –> 00:06:32,319
شما اندازه اعداد را درست میدانید،
169
00:06:32,319 –> 00:06:34,720
بنابراین تعداد n تعداد
170
00:06:34,720 –> 00:06:36,720
احتمالات ممکن برای این
171
00:06:36,720 –> 00: