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