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