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