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