Forwarded from کتابخانه پایتون و حومه
object_oriented_python_tutorial.pdf
3.3 MB
Forwarded from کتابخانه پایتون و حومه
py3 in one pic.png
3.5 MB
Forwarded from کتابخانه پایتون و حومه
High-Performance-Python.pdf
8.3 MB
Forwarded from کتابخانه پایتون و حومه
mpff (1).pdf
5 MB
Forwarded from کتابخانه پایتون و حومه
python-web-frameworks.pdf
2.5 MB
Forwarded from کتابخانه پایتون و حومه
Python for Algorithmic Trading.pdf
2.9 MB
Forwarded from کتابخانه پایتون و حومه
100 python tips.pdf
1008.7 KB
📎 100 Python Tips with Code
صد تمرین و ترفند به زبان کاملا ساده و توضیحات کامل در ژوپیتر، به همراه معرفی کتابخانه
@pybooks1
صد تمرین و ترفند به زبان کاملا ساده و توضیحات کامل در ژوپیتر، به همراه معرفی کتابخانه
@pybooks1
Forwarded from کتابخانه پایتون و حومه
Numpy_Python_Cheat_Sheet.pdf
649.4 KB
Forwarded from کتابخانه پایتون و حومه
Python-Projects.pdf
10.1 MB
Forwarded from کتابخانه پایتون و حومه
یادگیری عمیق.pdf
6.7 MB
آموزش درخت قرمز-سیاه با پایتون 🌳🐍
در این آموزش، نحوه پیادهسازی درخت قرمز-سیاه (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()
در این آموزش، نحوه پیادهسازی درخت قرمز-سیاه (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()