چنل پایتون | جنگو | برنامه نویسی وب سایت
421 subscribers
292 photos
141 videos
40 files
208 links
ارتباط با مدیر:

@Amir_123_ka
Download Telegram
Python for Algorithmic Trading.pdf
2.9 MB
📎 Python for Algorithmic Trading: From Idea to Cloud Deployment (2021)

@pybooks1
100 python tips.pdf
1008.7 KB
📎 100 Python Tips with Code

صد تمرین و ترفند به زبان کاملا ساده و توضیحات کامل در ژوپیتر، به همراه معرفی کتابخانه

@pybooks1
یادگیری عمیق.pdf
6.7 MB
📎 کتاب یادگیری عمیق
(Deep Learning)
نویسنده: میلاد وزان

@pybooks1
کتاب ها و جزوه های پایتون 😍
آموزش درخت قرمز-سیاه با پایتون 🌳🐍

در این آموزش، نحوه پیاده‌سازی درخت قرمز-سیاه (Red-Black Tree) را در پایتون به شما آموزش می‌دهیم. 😊

درخت قرمز-سیاه چیست؟ 🤔

درخت قرمز-سیاه یک درخت جستجوی دودویی است که به دلیل ویژگی‌های خاص خود، همواره متعادل باقی می‌ماند. این ویژگی‌ها عبارتند از:
1. هر گره یا قرمز است یا سیاه.
2. ریشه درخت همیشه سیاه است.
3. تمام برگ‌های نهایی (NIL) سیاه هستند.
4. هر گره قرمز باید دو فرزند سیاه داشته باشد.
5. هر مسیری از ریشه به یک برگ نهایی، تعداد یکسانی گره سیاه دارد.

پیاده‌سازی در پایتون 🐍

مرحله 1: تعریف ساختارهای داده

ابتدا ساختارهای داده‌ای برای یک گره درخت قرمز-سیاه و کلاس درخت را تعریف می‌کنیم.

class Node:
def init(self, key, color='red'):
self.key = key
self.color = color
self.left = self.right = self.parent = None

class RedBlackTree:
def init(self):
self.TNULL = Node(0, 'black')
self.root = self.TNULL

def left_rotate(self, x):
y = x.right
x.right = y.left
if y.left != self.TNULL:
y.left.parent = x
y.parent = x.parent
if x.parent is None:
self.root = y
elif x == x.parent.left:
x.parent.left = y
else:
x.parent.right = y
y.left = x
x.parent = y

def right_rotate(self, x):
y = x.left
x.left = y.right
if y.right != self.TNULL:
y.right.parent = x
y.parent = x.parent
if x.parent is None:
self.root = y
elif x == x.parent.right:
x.parent.right = y
else:
x.parent.left = y
y.right = x
x.parent = y

def insert_fix(self, k):
while k.parent.color == 'red':
if k.parent == k.parent.parent.right:
u = k.parent.parent.left
if u.color == 'red':
u.color = 'black'
k.parent.color = 'black'
k.parent.parent.color = 'red'
k = k.parent.parent
else:
if k == k.parent.left:
k = k.parent
self.right_rotate(k)
k.parent.color = 'black'
k.parent.parent.color = 'red'
self.left_rotate(k.parent.parent)
else:
u = k.parent.parent.right

if u.color == 'red':
u.color = 'black'
k.parent.color = 'black'
k.parent.parent.color = 'red'
k = k.parent.parent
else:
if k == k.parent.right:
k = k.parent
self.left_rotate(k)
k.parent.color = 'black'
k.parent.parent.color = 'red'
self.right_rotate(k.parent.parent)
if k == self.root:
break
self.root.color = 'black'

def insert(self, key):
node = Node(key)
node.left = self.TNULL
node.right = self.TNULL
parent = None
current = self.root

while current != self.TNULL:
parent = current
if node.key < current.key:
current = current.left
else:
current = current.right

node.parent = parent
if parent is None:
self.root = node
elif node.key < parent.key:
parent.left = node
else:
parent.right = node

if node.parent is None:
node.color = 'black'
return

if node.parent.parent is None:
return

self.insert_fix(node)

def inorder_helper(self, node):
if node != self.TNULL:
self.inorder_helper(node.left)
print(node.key, end=" ")
self.inorder_helper(node.right)

def print_tree(self):
self.inorder_helper(self.root)
print()