رزرو مشاوره تلفنی تک جلسه‌ای با استاد رضوی
رزرو مشاوره تلفنی
کنکور کامپیوتر
0
نظرات
اشتراک
بالا
اشتراک
 

درخت B

درخت B یا B-tree یک ساختمان داده درخت جستجوی باینری است که برای عملیات جستجو و حذف سریع بهینه شده است. در پایگاه‌های داده، سیستم‌های فایل و سایر برنامه‌ها که در آن داده‌های گسترده باید به طور مؤثر جستجو شوند، استفاده می‌شود. B-treeها می‌توانند کلیدها و مقادیر زیادی را در یک فضای فشرده ذخیره کنند و از عملیات‌های درج و حذف سریع پشتیبانی کنند. در این مقاله به بررسی این نوع درختان می‌پردازیم.

ویژگی‌های درخت B

درخت B از مرتبه n شامل تمام ویژگی‌های درخت است، علاوه بر این شامل خواص زیر نیز می‌باشد:

عملیات‌های درخت B

عملیات جستجو در درخت B

جستجو در درختان B شبیه به جستجوی درخت جستجوی باینری است؛ به عنوان مثال، اگر عنصر 49 را در B Tree زیر جستجو کنیم، روند چیزی شبیه به زیر خواهد بود:

نمونه ای از درخت B

  1. عنصر 49 را با گره ریشه 78 مقایسه کنید. چون 49 < 78 است، به زیر درخت سمت چپ آن بروید.
  2. از آنجایی که 40 < 49 < 56، از زیر درخت 40 به سمت راست عبور کنید.
  3. 49 > 45، به سمت راست حرکت کنید. عنصر 49 را با 49 مقایسه کنید.
  4. عنصر مورد نظر پیدا شد، آن را برمی‌گردانیم.

عملیات درج در درخت B

درج در سطح گره برگ انجام می‌شود. برای درج یک آیتم در B Tree باید الگوریتم زیر را دنبال کنید:

برای مثال فرض کنید می‌خواهید عنصر 8 را در درخت B با مرتبه 5 زیر درج کنید:

نمونه ای از درخت B

8 در سمت راست 5 درج می شود، بنابراین 8 را درج کنید.

درج عدد 8 در سمت راست 5 در درخت B

گره جدید، اکنون حاوی 5 کلید است که بزرگتر از حد مجاز است (5 - 1 = 4) است بنابراین گره را از عنصر میانی یعنی 8 جدا کنید و آن را به سمت گره والد خود که به شکل زیر نشان داده شده است، منتقل کنید:

درخت B نهایی به همین شکل خواهد بود.

عملیات حذف از درخت B

حذف نیز در گره‌های برگ انجام می‌شود. گره‌ای که باید حذف شود می‌تواند یک گره برگ یا یک گره داخلی باشد. برای حذف یک گره از درخت B، الگوریتم زیر باید دنبال شود:

  1. محل گره برگ را پیدا کنید.
  2. اگر بیش از m/2 کلید در گره برگ وجود دارد، کلید مورد نظر را از گره حذف کنید.
  3. اگر گره برگ کمتر از m/2 کلید دارد ، با گرفتن عنصر از سمت راست یا چپ، کلیدها را تکمیل کنید.
    • اگر گره سمت چپ حاوی بیش از m/2 عناصر است، بزرگترین عنصر آن را به سمت والدش منتقل کنید و عنصر وسط را به سمت پایین به سمت گره‌ای که کلیدش حذف شده است، ببرید.
    • اگر گره سمت راست حاوی بیش از m/2 عناصر است، کوچکترین عنصر آن را به سمت والد منتقل کنید و عنصر وسط را به سمت پایین به سمت گره‌ای که کلیدش حذف شده است ببرید.
  4. اگر هیچ یک از گره‌های کناری بیش از m/2 عنصر ندارند، با پیوند دادن دو گره برگ و عنصر میانی گره والد، یک گره برگ جدید ایجاد کنید.
  5. اگر گره‌های والد کمتر از m/2 است، فرآیند بالا را برای والد نیز اعمال کنید.

اگر گره‌ای که باید حذف شود، یک گره داخلی است، آن را با گره قبلی یا بعدی اش در پیمایش Inorder، جایگزین کنید. از آنجایی که گره قبلی یا بعدی همیشه در گره برگ خواهد بود، فرآیند مشابه با حذف گره از گره برگ خواهد بود.

برای مثال فرض کنید می‌خواهید گره 10 را از درخت B مرتبه 5 که در شکل زیر نشان داده شده است حذف کنید:

 نمونه ای از درخت B

10 در فرزند سمت راست عنصر 8 وجود دارد، آن را حذف کنید.

حذف عنصر 10 از درخت B

در حال حاضر، 23 تنها عنصر باقی مانده در گره است، و از حداقل تعداد عناصری که باید در درخت B درجه 5 وجود داشته باشد، یعنی 2 کمتر است. عناصر موجود در زیردرخت چپ و راست آن نیز کافی نیستند بنابراین آن را با گره‌های چپ و راست و عنصر میانی والد، یعنی 8 ادغام کنید.

درخت B نهایی به صورت زیر است:

 درخت B نهایی پس از حذف عنصر 10 از آن

پیچیدگی زمانی عملیات‌های درخت B

پیچیدگی زمانی درخت B برای عملیات‌های جستجو، درج و حذف از مرتبه Θ(log n) است.

پیاده‌سازی درخت B

در ادامه به پیاده سازی درخت B در زبان های برنامه نویسی پایتون و سی پلاس پلاس می‌پردازیم:

Python

# Searching a key on a B-tree in Python

# Create a node
class BTreeNode:
    def __init__(self, leaf=False):
        self.leaf = leaf
        self.keys = []
        self.child = []

# Tree
class BTree:
    def __init__(self, t):
        self.root = BTreeNode(True)
        self.t = t

        # Insert node

    def insert(self, k):
        root = self.root
        if len(root.keys) == (2 * self.t) - 1:
            temp = BTreeNode()
            self.root = temp
            temp.child.insert(0, root)
            self.split_child(temp, 0)
            self.insert_non_full(temp, k)
        else:
            self.insert_non_full(root, k)

        # Insert nonfull

    def insert_non_full(self, x, k):
        i = len(x.keys) - 1
        if x.leaf:
            x.keys.append((None, None))
            while i >= 0 and k[0] < x.keys[i][0]:
                x.keys[i + 1] = x.keys[i]
                i -= 1
            x.keys[i + 1] = k
        else:
            while i >= 0 and k[0] < x.keys[i][0]:
                i -= 1
            i += 1
            if len(x.child[i].keys) == (2 * self.t) - 1:
                self.split_child(x, i)
                if k[0] > x.keys[i][0]:
                    i += 1
            self.insert_non_full(x.child[i], k)

        # Split the child

    def split_child(self, x, i):
        t = self.t
        y = x.child[i]
        z = BTreeNode(y.leaf)
        x.child.insert(i + 1, z)
        x.keys.insert(i, y.keys[t - 1])
        z.keys = y.keys[t : (2 * t) - 1]
        y.keys = y.keys[0 : t - 1]
        if not y.leaf:
            z.child = y.child[t : 2 * t]
            y.child = y.child[0 : t - 1]

    # Print the tree
    def print_tree(self, x, l=0):
        print("Level ", l, " ", len(x.keys), end=":")
        for i in x.keys:
            print(i, end=" ")
        print()
        l += 1
        if len(x.child) > 0:
            for i in x.child:
                self.print_tree(i, l)

    # Search key in the tree
    def search_key(self, k, x=None):
        if x is not None:
            i = 0
            while i < len(x.keys) and k > x.keys[i][0]:
                i += 1
            if i < len(x.keys) and k == x.keys[i][0]:
                return (x, i)
            elif x.leaf:
                return None
            else:
                return self.search_key(k, x.child[i])

        else:
            return self.search_key(k, self.root)

def main():
    B = BTree(3)

    for i in range(10):
        B.insert((i, 2 * i))

    B.print_tree(B.root)

    if B.search_key(8) is not None:
        print("\nFound")
    else:
        print("\nNot Found")

if __name__ == "__main__":
    main()

C++

// Searching a key on a B-tree in C++

#include <iostream>
using namespace std;

class TreeNode
{
    int *keys;
    int t;
    TreeNode **C;
    int n;
    bool leaf;

public:
    TreeNode(int temp, bool bool_leaf);

    void insertNonFull(int k);
    void splitChild(int i, TreeNode *y);
    void traverse();

    TreeNode *search(int k);

    friend class BTree;
};

class BTree
{
    TreeNode *root;
    int t;

public:
    BTree(int temp)
    {
        root = NULL;
        t = temp;
    }

    void traverse()
    {
        if (root != NULL)
            root->traverse();
    }

    TreeNode *search(int k)
    {
        return (root == NULL) ? NULL : root->search(k);
    }

    void insert(int k);
};

TreeNode::TreeNode(int t1, bool leaf1)
{
    t = t1;
    leaf = leaf1;

    keys = new int[2 * t - 1];
    C = new TreeNode *[2 * t];

    n = 0;
}

void TreeNode::traverse()
{
    int i;
    for (i = 0; i < n; i++)
    {
        if (leaf == false)
            C[i]->traverse();
        cout << " " << keys[i];
    }

    if (leaf == false)
        C[i]->traverse();
}

TreeNode *TreeNode::search(int k)
{
    int i = 0;
    while (i < n && k > keys[i])
        i++;

    if (keys[i] == k)
        return this;

    if (leaf == true)
        return NULL;

    return C[i]->search(k);
}

void BTree::insert(int k)
{
    if (root == NULL)
    {
        root = new TreeNode(t, true);
        root->keys[0] = k;
        root->n = 1;
    }
    else
    {
        if (root->n == 2 * t - 1)
        {
            TreeNode *s = new TreeNode(t, false);

            s->C[0] = root;

            s->splitChild(0, root);

            int i = 0;
            if (s->keys[0] < k)
                i++;
            s->C[i]->insertNonFull(k);

            root = s;
        }
        else
            root->insertNonFull(k);
    }
}

void TreeNode::insertNonFull(int k)
{
    int i = n - 1;

    if (leaf == true)
    {
        while (i >= 0 && keys[i] > k)
        {
            keys[i + 1] = keys[i];
            i--;
        }

        keys[i + 1] = k;
        n = n + 1;
    }
    else
    {
        while (i >= 0 && keys[i] > k)
            i--;

        if (C[i + 1]->n == 2 * t - 1)
        {
            splitChild(i + 1, C[i + 1]);

            if (keys[i + 1] < k)
                i++;
        }
        C[i + 1]->insertNonFull(k);
    }
}

void TreeNode::splitChild(int i, TreeNode *y)
{
    TreeNode *z = new TreeNode(y->t, y->leaf);
    z->n = t - 1;

    for (int j = 0; j < t - 1; j++)
        z->keys[j] = y->keys[j + t];

    if (y->leaf == false)
    {
        for (int j = 0; j < t; j++)
            z->C[j] = y->C[j + t];
    }

    y->n = t - 1;
    for (int j = n; j >= i + 1; j--)
        C[j + 1] = C[j];

    C[i + 1] = z;

    for (int j = n - 1; j >= i; j--)
        keys[j + 1] = keys[j];

    keys[i] = y->keys[t - 1];
    n = n + 1;
}

int main()
{
    BTree t(3);
    t.insert(8);
    t.insert(9);
    t.insert(10);
    t.insert(11);
    t.insert(15);
    t.insert(16);
    t.insert(17);
    t.insert(18);
    t.insert(20);
    t.insert(23);

    cout << "The B-tree is: ";
    t.traverse();

    int k = 10;
    (t.search(k) != NULL) ? cout << endl
                                 << k << " is found"
                          : cout << endl
                                 << k << " is not Found";

    k = 2;
    (t.search(k) != NULL) ? cout << endl
                                 << k << " is found"
                          : cout << endl
                                 << k << " is not Found\n";
}

مقایسه با درخت B+

برجسته‌ترین نقاط مقایسه بین B-tree و B+tree شامل موارد زیر است:

کاربردهای درخت B

از کاربردهای درخت B می‌توان به موارد زیر اشاره کرد:

جمع‌بندی

B-tree یک درخت جستجوی خود متعادل کننده است که در آن هر گره می‌تواند بیش از یک کلید داشته باشد و بیش از دو فرزند داشته باشد. این درخت، یک شکل تعمیم یافته از درخت جستجوی دودویی است. در این مقاله به شرح این نوع درخت پرداختیم و همچنین عملیات‌های اساسی آن را بررسی کردیم و با کاربردها و پیاده‌سازی آن آشنا شدیم.

درخت B چیست؟

درخت B داده‌ها را به گونه‌ای ذخیره می‌کند که هر گره حاوی کلیدها به ترتیب صعودی باشد. هر یک از این کلیدها دو مرجع به دو گره فرزند دیگر دارند. کلیدهای گره فرزند سمت چپ کمتر از کلید فعلی هستند و کلیدهای گره فرزند سمت راست بیشتر از کلید فعلی هستند.

مزیت اصلی استفاده از B-Trees چیست؟

مزیت استفاده از این نوع درخت شامل موارد زیر است:
کلیدها را به ترتیب مرتب شده برای پیمایش متوالی نگه می‌دارد.
از یک شاخص سلسله مراتبی برای به حداقل رساندن تعداد خواندن دیسک استفاده می‌کند.
از بلوک‌های نیمه کامل برای سرعت بخشیدن به درج و حذف استفاده می‌کند.
شاخص را با یک الگوریتم بازگشتی متعادل نگه می‌دارد.

پیچیدگی زمانی B-tree چقدر است؟

اگر n را تعداد کل عناصر یک درخت B در نظر بگیریم، پیچیدگی زمانی برای هر عملیات رایج، یعنی جستجو، درج و حذف، O(log n) خواهد بود.

درخت B بهتر است یا درخت B+؟

در B-tree، جستجو ناکارآمد است زیرا رکوردها در برگ یا گره‌های داخلی ذخیره می‌شوند. در درخت B+، جستجو بسیار کارآمد یا سریعتر است زیرا تمام رکوردها در گره‌های برگ ذخیره می‌شوند.

مزیت B-tree نسبت به درخت AVL چیست؟

AVL خود متعادل کننده است و تضمین می‌کند که همه عملیات‌ها در حالت متوسط و بدترین حالت O(log n) هستند. علاوه بر این، B-tree با اطمینان از پر بودن گره های داخلی حداقل ضایعات را به حداقل می‌رساند. یک B-tree می‌تواند تعداد دلخواه درج و حذف را مدیریت کند.







درخت B+

درخت B+ شکل پیشرفته‌ای از درخت خود متعادل کننده است که در آن تمام مقادیر در سطح برگ قرار دارند. در این مقاله به بررسی این نوع درخت می‌پردازیم.

ویژگی‌های درخت B+

یک مفهوم مهم که باید قبل از یادگیری درخت B+ درک شود، شاخص‌سازی چندسطحی است. در شاخص‌سازی چندسطحی، شاخص‌ها مانند شکل زیر ایجاد می‌شوند. این کار، دسترسی به داده‌ها را آسان‌تر و سریع‌تر می‌کند.

نمونه ای از درخت B+

ویژگی‌های درخت B+ شامل موارد زیر است:

عملیات‌های درخت B+

عملیات درج

مراحل عملیات درج در درخت B+ به‌صورت زیر است:

فرض کنید می‌خواهیم مقدار 195 را در درخت B+ از مرتبه 5 که در شکل زیر نشان داده شده است وارد کنیم.

نمونه ای از درخت B+

195 بعد از 190 در زیر درخت سمت راست 120 درج می شود. آن را در این مکان درج می‌کنیم.

درج کردن گره 195 در درخت B+

گره سمت راست 120 حاوی بیش از حداکثر تعداد عناصر یعنی 4، است. آن را تقسیم می‌کنیم و گره میانی یعنی 190 را والد قرار می‌دهیم.

گره ریشه شامل 6 فرزند و 5 کلید است که ویژگی درخت B+ را نقض می کند.

اکنون، گره ریشه شامل 6 فرزند و 5 کلید است که ویژگی درخت B+ را نقض می‌کند بنابراین باید آن را تقسیم کنیم که به صورت زیر نشان داده شده است.

تقسیم گره ریشه برای حفظ تعادل در درخت B+

عملیات حذف

مراحل عملیات حذف در درخت B+ به‌صورت زیر است:

برای مثال فرض کنید می‌خواهید کلید 200 را از درخت B+ که در شکل زیر نشان داده شده است حذف کنید.

نمونه ای از درخت B+

200 در زیر درخت سمت راست 190 بعد از 190 قرار دارد، آن را حذف کنید.

حذف کلید 200 از درخت B+

دو گره را با استفاده از 195، 190، 154 و 129 ادغام کنید.

ادغام دو گره با استفاده از 195، 190، 154 و 129

اکنون، عنصر 120 تنها عنصر موجود در گره است که خصوصیات درخت B+ را نقض می‌کند بنابراین، باید آن را با استفاده از 60، 78، 108 و 120 ادغام کنیم.

ادغام 120 با استفاده از 60، 78، 108 و 120

اکنون ارتفاع درخت 1 واحد کاهش یافت.

عملیات جستجو

مراحل زیر برای جستجوی داده‌ها در درخت B+ از مرتبه m دنبال می‌شود. فرض کنید داده مورد جستجو k باشد.

مثال زیر را در نظر بگیرید. فرض کنید به دنبال گره 129 در این درخت B+ هستیم:

مثالی از درخت B+ که در آن به دنبال گره 129 هستیم

ابتدا 129 را با 108 مقایسه می‌کنیم. چون 108 < 129 پس به زیر درخت سمت راست می‌رویم.

مقایسه گره 129 با 108

مقایسه گره 120 با 129

چون 120 < 129 پس به زیر درخت سمت راست می‌رویم.

گره 129 یافت شد

گره مورد نظر را پیدا کردیم.

پیچیدگی عملیات‌های درخت B+

عملیات درج

پیچیدگی زمانی عملیات درج درخت B+ از مرتبه Θ(t.logt n) است.

عملیات حذف

پیچیدگی زمانی عملیات حذف از درخت B+ از مرتبه Θ(logn) است.

عملیات جستجو

اگر جستجوی خطی در داخل یک گره اجرا شود، پیچیدگی کل Θ(logt n) است (Θ(t) پیچیدگی زمانی جستجوی خطی است).

اگر از جستجوی دودویی استفاده شود، پیچیدگی کل Θ(log2t.logt n) است.

پیاده سازی درخت B+

در ادامه به پیاده سازی درخت B+ در زبان های برنامه نویسی پایتون و سی پلاس پلاس می‌پردازیم:

Python

# B+ tee in python

import math

# Node creation
class Node:
    def __init__(self, order):
        self.order = order
        self.values = []
        self.keys = []
        self.nextKey = None
        self.parent = None
        self.check_leaf = False

    # Insert at the leaf
    def insert_at_leaf(self, leaf, value, key):
        if (self.values):
            temp1 = self.values
            for i in range(len(temp1)):
                if (value == temp1[i]):
                    self.keys[i].append(key)
                    break
                elif (value < temp1[i]):
                    self.values = self.values[:i] + [value] + self.values[i:]
                    self.keys = self.keys[:i] + [[key]] + self.keys[i:]
                    break
                elif (i + 1 == len(temp1)):
                    self.values.append(value)
                    self.keys.append([key])
                    break
        else:
            self.values = [value]
            self.keys = [[key]]

# B plus tree
class BplusTree:
    def __init__(self, order):
        self.root = Node(order)
        self.root.check_leaf = True

    # Insert operation
    def insert(self, value, key):
        value = str(value)
        old_node = self.search(value)
        old_node.insert_at_leaf(old_node, value, key)

        if (len(old_node.values) == old_node.order):
            node1 = Node(old_node.order)
            node1.check_leaf = True
            node1.parent = old_node.parent
            mid = int(math.ceil(old_node.order / 2)) - 1
            node1.values = old_node.values[mid + 1:]
            node1.keys = old_node.keys[mid + 1:]
            node1.nextKey = old_node.nextKey
            old_node.values = old_node.values[:mid + 1]
            old_node.keys = old_node.keys[:mid + 1]
            old_node.nextKey = node1
            self.insert_in_parent(old_node, node1.values[0], node1)

    # Search operation for different operations
    def search(self, value):
        current_node = self.root
        while(current_node.check_leaf == False):
            temp2 = current_node.values
            for i in range(len(temp2)):
                if (value == temp2[i]):
                    current_node = current_node.keys[i + 1]
                    break
                elif (value < temp2[i]):
                    current_node = current_node.keys[i]
                    break
                elif (i + 1 == len(current_node.values)):
                    current_node = current_node.keys[i + 1]
                    break
        return current_node

    # Find the node
    def find(self, value, key):
        l = self.search(value)
        for i, item in enumerate(l.values):
            if item == value:
                if key in l.keys[i]:
                    return True
                else:
                    return False
        return False

    # Inserting at the parent
    def insert_in_parent(self, n, value, ndash):
        if (self.root == n):
            rootNode = Node(n.order)
            rootNode.values = [value]
            rootNode.keys = [n, ndash]
            self.root = rootNode
            n.parent = rootNode
            ndash.parent = rootNode
            return

        parentNode = n.parent
        temp3 = parentNode.keys
        for i in range(len(temp3)):
            if (temp3[i] == n):
                parentNode.values = parentNode.values[:i] + \
                    [value] + parentNode.values[i:]
                parentNode.keys = parentNode.keys[:i +
                                                  1] + [ndash] + parentNode.keys[i + 1:]
                if (len(parentNode.keys) > parentNode.order):
                    parentdash = Node(parentNode.order)
                    parentdash.parent = parentNode.parent
                    mid = int(math.ceil(parentNode.order / 2)) - 1
                    parentdash.values = parentNode.values[mid + 1:]
                    parentdash.keys = parentNode.keys[mid + 1:]
                    value_ = parentNode.values[mid]
                    if (mid == 0):
                        parentNode.values = parentNode.values[:mid + 1]
                    else:
                        parentNode.values = parentNode.values[:mid]
                    parentNode.keys = parentNode.keys[:mid + 1]
                    for j in parentNode.keys:
                        j.parent = parentNode
                    for j in parentdash.keys:
                        j.parent = parentdash
                    self.insert_in_parent(parentNode, value_, parentdash)

    # Delete a node
    def delete(self, value, key):
        node_ = self.search(value)

        temp = 0
        for i, item in enumerate(node_.values):
            if item == value:
                temp = 1

                if key in node_.keys[i]:
                    if len(node_.keys[i]) > 1:
                        node_.keys[i].pop(node_.keys[i].index(key))
                    elif node_ == self.root:
                        node_.values.pop(i)
                        node_.keys.pop(i)
                    else:
                        node_.keys[i].pop(node_.keys[i].index(key))
                        del node_.keys[i]
                        node_.values.pop(node_.values.index(value))
                        self.deleteEntry(node_, value, key)
                else:
                    print("Value not in Key")
                    return
        if temp == 0:
            print("Value not in Tree")
            return

    # Delete an entry
    def deleteEntry(self, node_, value, key):

        if not node_.check_leaf:
            for i, item in enumerate(node_.keys):
                if item == key:
                    node_.keys.pop(i)
                    break
            for i, item in enumerate(node_.values):
                if item == value:
                    node_.values.pop(i)
                    break

        if self.root == node_ and len(node_.keys) == 1:
            self.root = node_.keys[0]
            node_.keys[0].parent = None
            del node_
            return
        elif (len(node_.keys) < int(math.ceil(node_.order / 2)) and node_.check_leaf == False) or (len(node_.values) < int(math.ceil((node_.order - 1) / 2)) and node_.check_leaf == True):

            is_predecessor = 0
            parentNode = node_.parent
            PrevNode = -1
            NextNode = -1
            PrevK = -1
            PostK = -1
            for i, item in enumerate(parentNode.keys):

                if item == node_:
                    if i > 0:
                        PrevNode = parentNode.keys[i - 1]
                        PrevK = parentNode.values[i - 1]

                    if i < len(parentNode.keys) - 1:
                        NextNode = parentNode.keys[i + 1]
                        PostK = parentNode.values[i]

            if PrevNode == -1:
                ndash = NextNode
                value_ = PostK
            elif NextNode == -1:
                is_predecessor = 1
                ndash = PrevNode
                value_ = PrevK
            else:
                if len(node_.values) + len(NextNode.values) < node_.order:
                    ndash = NextNode
                    value_ = PostK
                else:
                    is_predecessor = 1
                    ndash = PrevNode
                    value_ = PrevK

            if len(node_.values) + len(ndash.values) < node_.order:
                if is_predecessor == 0:
                    node_, ndash = ndash, node_
                ndash.keys += node_.keys
                if not node_.check_leaf:
                    ndash.values.append(value_)
                else:
                    ndash.nextKey = node_.nextKey
                ndash.values += node_.values

                if not ndash.check_leaf:
                    for j in ndash.keys:
                        j.parent = ndash

                self.deleteEntry(node_.parent, value_, node_)
                del node_
            else:
                if is_predecessor == 1:
                    if not node_.check_leaf:
                        ndashpm = ndash.keys.pop(-1)
                        ndashkm_1 = ndash.values.pop(-1)
                        node_.keys = [ndashpm] + node_.keys
                        node_.values = [value_] + node_.values
                        parentNode = node_.parent
                        for i, item in enumerate(parentNode.values):
                            if item == value_:
                                p.values[i] = ndashkm_1
                                break
                    else:
                        ndashpm = ndash.keys.pop(-1)
                        ndashkm = ndash.values.pop(-1)
                        node_.keys = [ndashpm] + node_.keys
                        node_.values = [ndashkm] + node_.values
                        parentNode = node_.parent
                        for i, item in enumerate(p.values):
                            if item == value_:
                                parentNode.values[i] = ndashkm
                                break
                else:
                    if not node_.check_leaf:
                        ndashp0 = ndash.keys.pop(0)
                        ndashk0 = ndash.values.pop(0)
                        node_.keys = node_.keys + [ndashp0]
                        node_.values = node_.values + [value_]
                        parentNode = node_.parent
                        for i, item in enumerate(parentNode.values):
                            if item == value_:
                                parentNode.values[i] = ndashk0
                                break
                    else:
                        ndashp0 = ndash.keys.pop(0)
                        ndashk0 = ndash.values.pop(0)
                        node_.keys = node_.keys + [ndashp0]
                        node_.values = node_.values + [ndashk0]
                        parentNode = node_.parent
                        for i, item in enumerate(parentNode.values):
                            if item == value_:
                                parentNode.values[i] = ndash.values[0]
                                break

                if not ndash.check_leaf:
                    for j in ndash.keys:
                        j.parent = ndash
                if not node_.check_leaf:
                    for j in node_.keys:
                        j.parent = node_
                if not parentNode.check_leaf:
                    for j in parentNode.keys:
                        j.parent = parentNode

# Print the tree
def printTree(tree):
    lst = [tree.root]
    level = [0]
    leaf = None
    flag = 0
    lev_leaf = 0

    node1 = Node(str(level[0]) + str(tree.root.values))

    while (len(lst) != 0):
        x = lst.pop(0)
        lev = level.pop(0)
        if (x.check_leaf == False):
            for i, item in enumerate(x.keys):
                print(item.values)
        else:
            for i, item in enumerate(x.keys):
                print(item.values)
            if (flag == 0):
                lev_leaf = lev
                leaf = x
                flag = 1

record_len = 3
bplustree = BplusTree(record_len)
bplustree.insert('5', '33')
bplustree.insert('15', '21')
bplustree.insert('25', '31')
bplustree.insert('35', '41')
bplustree.insert('45', '10')

printTree(bplustree)

if(bplustree.find('5', '34')):
    print("Found")
else:
    print("Not found")

C++

// Searching on a B+ tree in C++

#include <climits>
#include <fstream>
#include <iostream>
#include <sstream>
using namespace std;
int MAX = 3;

// BP node
class Node
{
    bool IS_LEAF;
    int *key, size;
    Node **ptr;
    friend class BPTree;

public:
    Node();
};

// BP tree
class BPTree
{
    Node *root;
    void insertInternal(int, Node *, Node *);
    Node *findParent(Node *, Node *);

public:
    BPTree();
    void search(int);
    void insert(int);
    void display(Node *);
    Node *getRoot();
};

Node::Node()
{
    key = new int[MAX];
    ptr = new Node *[MAX + 1];
}

BPTree::BPTree()
{
    root = NULL;
}

// Search operation
void BPTree::search(int x)
{
    if (root == NULL)
    {
        cout << "Tree is empty\n";
    }
    else
    {
        Node *cursor = root;
        while (cursor->IS_LEAF == false)
        {
            for (int i = 0; i < cursor->size; i++)
            {
                if (x < cursor->key[i])
                {
                    cursor = cursor->ptr[i];
                    break;
                }
                if (i == cursor->size - 1)
                {
                    cursor = cursor->ptr[i + 1];
                    break;
                }
            }
        }
        for (int i = 0; i < cursor->size; i++)
        {
            if (cursor->key[i] == x)
            {
                cout << "Found\n";
                return;
            }
        }
        cout << "Not found\n";
    }
}

// Insert Operation
void BPTree::insert(int x)
{
    if (root == NULL)
    {
        root = new Node;
        root->key[0] = x;
        root->IS_LEAF = true;
        root->size = 1;
    }
    else
    {
        Node *cursor = root;
        Node *parent;
        while (cursor->IS_LEAF == false)
        {
            parent = cursor;
            for (int i = 0; i < cursor->size; i++)
            {
                if (x < cursor->key[i])
                {
                    cursor = cursor->ptr[i];
                    break;
                }
                if (i == cursor->size - 1)
                {
                    cursor = cursor->ptr[i + 1];
                    break;
                }
            }
        }
        if (cursor->size < MAX)
        {
            int i = 0;
            while (x > cursor->key[i] && i < cursor->size)
                i++;
            for (int j = cursor->size; j > i; j--)
            {
                cursor->key[j] = cursor->key[j - 1];
            }
            cursor->key[i] = x;
            cursor->size++;
            cursor->ptr[cursor->size] = cursor->ptr[cursor->size - 1];
            cursor->ptr[cursor->size - 1] = NULL;
        }
        else
        {
            Node *newLeaf = new Node;
            int virtualNode[MAX + 1];
            for (int i = 0; i < MAX; i++)
            {
                virtualNode[i] = cursor->key[i];
            }
            int i = 0, j;
            while (x > virtualNode[i] && i < MAX)
                i++;
            for (int j = MAX + 1; j > i; j--)
            {
                virtualNode[j] = virtualNode[j - 1];
            }
            virtualNode[i] = x;
            newLeaf->IS_LEAF = true;
            cursor->size = (MAX + 1) / 2;
            newLeaf->size = MAX + 1 - (MAX + 1) / 2;
            cursor->ptr[cursor->size] = newLeaf;
            newLeaf->ptr[newLeaf->size] = cursor->ptr[MAX];
            cursor->ptr[MAX] = NULL;
            for (i = 0; i < cursor->size; i++)
            {
                cursor->key[i] = virtualNode[i];
            }
            for (i = 0, j = cursor->size; i < newLeaf->size; i++, j++)
            {
                newLeaf->key[i] = virtualNode[j];
            }
            if (cursor == root)
            {
                Node *newRoot = new Node;
                newRoot->key[0] = newLeaf->key[0];
                newRoot->ptr[0] = cursor;
                newRoot->ptr[1] = newLeaf;
                newRoot->IS_LEAF = false;
                newRoot->size = 1;
                root = newRoot;
            }
            else
            {
                insertInternal(newLeaf->key[0], parent, newLeaf);
            }
        }
    }
}

// Insert Operation
void BPTree::insertInternal(int x, Node *cursor, Node *child)
{
    if (cursor->size < MAX)
    {
        int i = 0;
        while (x > cursor->key[i] && i < cursor->size)
            i++;
        for (int j = cursor->size; j > i; j--)
        {
            cursor->key[j] = cursor->key[j - 1];
        }
        for (int j = cursor->size + 1; j > i + 1; j--)
        {
            cursor->ptr[j] = cursor->ptr[j - 1];
        }
        cursor->key[i] = x;
        cursor->size++;
        cursor->ptr[i + 1] = child;
    }
    else
    {
        Node *newInternal = new Node;
        int virtualKey[MAX + 1];
        Node *virtualPtr[MAX + 2];
        for (int i = 0; i < MAX; i++)
        {
            virtualKey[i] = cursor->key[i];
        }
        for (int i = 0; i < MAX + 1; i++)
        {
            virtualPtr[i] = cursor->ptr[i];
        }
        int i = 0, j;
        while (x > virtualKey[i] && i < MAX)
            i++;
        for (int j = MAX + 1; j > i; j--)
        {
            virtualKey[j] = virtualKey[j - 1];
        }
        virtualKey[i] = x;
        for (int j = MAX + 2; j > i + 1; j--)
        {
            virtualPtr[j] = virtualPtr[j - 1];
        }
        virtualPtr[i + 1] = child;
        newInternal->IS_LEAF = false;
        cursor->size = (MAX + 1) / 2;
        newInternal->size = MAX - (MAX + 1) / 2;
        for (i = 0, j = cursor->size + 1; i < newInternal->size; i++, j++)
        {
            newInternal->key[i] = virtualKey[j];
        }
        for (i = 0, j = cursor->size + 1; i < newInternal->size + 1; i++, j++)
        {
            newInternal->ptr[i] = virtualPtr[j];
        }
        if (cursor == root)
        {
            Node *newRoot = new Node;
            newRoot->key[0] = cursor->key[cursor->size];
            newRoot->ptr[0] = cursor;
            newRoot->ptr[1] = newInternal;
            newRoot->IS_LEAF = false;
            newRoot->size = 1;
            root = newRoot;
        }
        else
        {
            insertInternal(cursor->key[cursor->size], findParent(root, cursor), newInternal);
        }
    }
}

// Find the parent
Node *BPTree::findParent(Node *cursor, Node *child)
{
    Node *parent;
    if (cursor->IS_LEAF || (cursor->ptr[0])->IS_LEAF)
    {
        return NULL;
    }
    for (int i = 0; i < cursor->size + 1; i++)
    {
        if (cursor->ptr[i] == child)
        {
            parent = cursor;
            return parent;
        }
        else
        {
            parent = findParent(cursor->ptr[i], child);
            if (parent != NULL)
                return parent;
        }
    }
    return parent;
}

// Print the tree
void BPTree::display(Node *cursor)
{
    if (cursor != NULL)
    {
        for (int i = 0; i < cursor->size; i++)
        {
            cout << cursor->key[i] << " ";
        }
        cout << "\n";
        if (cursor->IS_LEAF != true)
        {
            for (int i = 0; i < cursor->size + 1; i++)
            {
                display(cursor->ptr[i]);
            }
        }
    }
}

// Get the root
Node *BPTree::getRoot()
{
    return root;
}

int main()
{
    BPTree node;
    node.insert(5);
    node.insert(15);
    node.insert(25);
    node.insert(35);
    node.insert(45);
    node.insert(55);
    node.insert(40);
    node.insert(30);
    node.insert(20);
    node.display(node.getRoot());

    node.search(15);
}

کاربردهای درخت B+

از کاربردهای درخت B+ می‌توان به موارد زیر اشاره کرد:

مقایسه درخت B+ و درخت B

برجسته‌ترین نقاط مقایسه بین B-tree و B+tree شامل موارد زیر است:

جمع‌بندی

B+ Tree توسعه‌ای از B Tree است که امکان درج، حذف و عملیات جستجو را فراهم می‌کند. در B Tree، کلیدها و رکوردها را می‌توان در گره های داخلی و برگ ذخیره کرد. در درخت B+، رکوردها (داده‌ها) فقط روی گره‌های برگ نگهداری می‌شوند، در حالی که گره‌های داخلی فقط می‌توانند مقادیر کلیدی را ذخیره کنند. در این مقاله، درخت B+ را از نزدیک بررسی کردیم. ما یاد گرفتیم که آنها چگونه ساخته می‌شوند و یاد گرفتیم که چگونه می‌توانیم یک مقدار خاص را جستجو، درج یا حذف کنیم؛ همچنین پیاده‌سازی‌هایی از این نوع درخت را دیدیم و با برخی کاربردها و تفاوت آن با درخت B آشنا شدیم.

درخت B+ چیست؟

درخت B+ از ریشه، گره های داخلی و برگ تشکیل شده است. ریشه ممکن است یک برگ یا یک گره با دو یا چند فرزند باشد. درخت B+ را می‌توان به عنوان یک درخت B مشاهده کرد که در آن هر گره فقط حاوی کلیدها است (نه جفت‌های کلید-مقدار) و یک سطح در پایین با برگ‌های مرتبط اضافه می کند.

درخت B+ چگونه در پایگاه داده استفاده می‌شود؟

پایگاه‌های داده SQL از درخت‌های B+ برای ذخیره کارآمد داده‌ها و انجام عملیات‌هایی مانند درج، به‌روزرسانی، یافتن و حذف با پیچیدگی زمانی O(log n) استفاده می‌کنند. این امر مدیریت و ذخیره حجم زیادی از داده ها را قابل مدیریت و کارآمدتر می کند.

چرا درخت B+ سریعتر از B-tree است؟

جستجو در درخت B ناکارآمد است زیرا رکوردها در گره های برگ یا درونی ذخیره می شوند. از آنجا که تمام رکوردها در گره های برگ درخت B+ ذخیره می‌شوند، جستجو بسیار کارآمد یا سریع‌تر است. در مقابل عملیات درج بیشتر طول می‌کشد و گاهی اوقات غیرقابل پیش‌بینی است.

درس هوش مصنوعی

هوش مصنوعی در جهان با نام آلن تورینگ گره خورده است. اولین بار در سال 1950 آلن تورینگ آزمایشی تعریف کرد که آزمایش تورینگ نام گرفت. قبل از ساخته شدن این آزمایش، آلن تورینگ ابتدا مقاله‌ای را ارائه داد که در آن مقاله از بازی‌ای با نام Imitation یا تقلید نام برده بود. هدف از طراحی این آزمایش، پاسخ دادن به سوال "آیا ماشین‌ها می‌توانند فکر کنند؟" بود. به عقیده آلن تورینگ، ماشینی هوشمند است که وقتی افراد با آن ارتباط برقرار می‌کنند، نتوانند تشخص دهند که فردی که در تعامل با آن هست یک ماشین است یا یک انسان. بعد از گذشت بیش از 70 سال از این آزمایش، هنوز هم آزمایش تورینگ از آزمایش‌هایی است که در تمامی دروس و مباحث هوش مصنوعی یاد می‌شود.

امروزه هوش مصنوعی به یکی از مباحث جدایی‌ناپذیر از روزمرگی ما انسان‌ها تبدیل شده است. از دوربین‌های مدار بسته در خیابان‌ها گرفته تا سایت‌های فروشگاهی، ماشین‌ها، ابزارآلات کارخانه‌جات و... همگی به نحوی با هوش مصنوعی در ارتباط هستند. درس هوش مصنوعی یکی از دروش چالشی در دوره کارشناسی می‌باشد که عمدتا شامل مباحث جستجو و منطق است. از آنجا که این درس در کنکور ضریب بالایی دارد، یادگیری دقیق و اصولی این درس از اهمیت بالایی برخوردار است.

هوش مصنوعی چیست و کجا مورد استفاده قرار می‌گیرد؟

هوش مصنوعی یا Artificial Intelligence از دو کلمه "هوش" و "مصنوعی" تشکیل شده است و به چیزی اطلاق می‌شود که واقعی نیست (مصنوعی است) اما باهوش هم هست و قادر است تفکر کند و تجربه کسب کند و همچنین بر اساس این تجربیات یاد بگیرد و تصمیم‌گیری‌های بهتری انجام دهد. اکثر مردم وقتی کلمه هوش مصنوعی را می‌شنوند به یاد ربات‌های نابودکننده و ابزارهای ابرانسانی فیلم‌های هالیوودی می‌افتد که هیچ هدفی جز نابود کردن نسل انسان‌ها ندارند!! درحالی که ربات‌ها تنها بخش کوچکی از هوش مصنوعی هستند و اهدافی غیر از نابود کردن هم دارند. آنالیز کردن داده‌ها، داده کاوی، یادگیری ماشین، یادگیری عمیق، شبکه های عصبی و خیلی از زمینه‌های دیگر هوش مصنوعی وجود دارند که کاملا درون کامپیوتر قرار گرفته‌اند و دارای هیچ ماهیت فیزیکی نمی‌باشند.

در این بخش، مشاغل و صنعت‌های جدیدی که از هوش مصنوعی استفاده می‌کنند را معرفی کرده و در مورد آنها بحث می‌کنیم:

درس هوش مصنوعی

درس هوش مصنوعی از جمله دروس تخصصی رشته‌های مهندسی کامپیوتر، مهندسی فناوری اطلاعات (IT) و علوم کامپیوتر است. این درس جزء دروس مهم رشته مهندسی کامپیوتر به حساب می‌آید، به‌ویژه برای دانشجویانی که قصد ادامه دادن این رشته در کارشناسی ارشد را دارند. این درس در دانشگاه‌های ایران با عنوان هوش مصنوعی و سیستم های خبره ارائه می‌شود و شامل مباحث مقدماتی و تئوری هوش مصنوعی است. دروس ساختمان داده و طراحی الگوریتم از دروس مهمی هستند که پیش از مطالعه این درس لازم به گذراندن آنها است؛ همچنین آشنایی با برخی از مباحث ریاضیات مثل جبر خطی و ریاضی گسسته، به یادگیری و درک بهتر درس هوش مصنوعی کمک شایانی می‌کند. این درس معمولا در نیمه دوم تحصیلی توسط دانشجویان اخذ می‌شود (ترم 4 تا ترم 6). درس هوش مصنوعی همچنین یکی از دروس مهم برای فارغ‌التحصیلان مقطع کارشناسی که قصد دارند در رشته هوش مصنوعی به ادامه تحصیل بپردازند به حساب می‌آید؛ چه از لحاظ یادگیری مبانی هوش مصنوعی و چه از لحاظ تست‌های کنکوری.

پیش نیازهای درس هوش مصنوعی

با توجه به الگوریتم‌های مختلف و بررسی پیچیدگی زمانی و فضا در الگوریتم‌های ارائه شده در درس هوش مصنوعی، پیش‌نیاز این درس در مقطع کارشناسی، دروس ساختمان داده و الگوریتم‌ها است؛ همچنین درس جبر خطی به عنوان هم نیاز درس هوش مصنوعی است اما از آنجایی که درس‌های پیش نیاز به نوبه خود پیش نیازهای دیگری دارند، باعث می‌شود سلسه مراتبی از دروس پیش نیاز به‌وجود آید.

  1. پیش نیاز درس هوش مصنوعی: ساختمان داده و الگوریتم‌ها
  2. پیش نیاز درس ساختمان داده و الگوریتم‌ها: دروس برنامه نویسی پیشرفته و ریاضیات گسسته
  3. پیش نیاز درس برنامه نویسی پیشرفته و ریاضیات گسسته: درس مبانی برنامه نویسی
  4. پیش نیاز درس جبر خطی: ریاضی عمومی 2
  5. پیش نیاز درس ریاضی عمومی 2: ریاضی عمومی 1

همچنین کارگاه مبانی کامپیوتر و گارگاه برنامه نویسی پیشرفته نیز هم‌نیاز درس مبانی پیشرفته و برنامه نویسی پیشرفته هستند.

پس به طور خلاصه برای اخذ درس هوش مصنوعی نیاز به قبولی در دروس زیر است:

منابع درس هوش مصنوعی در دانشگاه ها

منبع درس اصلی هوش مصنوعی، کتاب هوش مصنوعی با عنوان Artificial Intelligence: A Modern Approach که توسط استوارت راسل (Stuart Russell) و پیتر نورویگ (Peter Norvig) نوشته شده است، می‌باشد. در اکثر دانشگاه‌های ایران این کتاب تدریس می‌شود و مرجع سوالات کنکور نیز همین کتاب است. این کتاب با هدف شروع مبانی هوش مصنوعی و تدریس در دانشگاه‌ها منتشر شده است. کتاب هوش مصنوعی با رویکردی نوین، توسط مترجم‌های مختلفی به زبان فارسی ترجمه شده است. البته لازم به ذکر است که تنها 10 فصل ابتدایی این کتاب به عنوان منبع درس هوش مصنوعی دانشگاه توسط وزارت علوم انتخاب شده است؛ در حالی که این کتاب شامل 28 فصل می‌باشد.

سرفصل های کتاب هوش مصنوعی: رویکردی نوین

همانطور که گفته شد، کتاب هوش مصنوعی راسل شامل 28 فصل است و تنها 10 فصل آن در طول یک ترم به دانشجویان تدریس می‌گردد. در این قسمت این 10 فصل را یک مرور کوتاهی می‌کنیم تا با کلیات قضیه آشنا شوید:

دانلود کتاب هوش مصنوعی: رویکردی نوین

هم اکنون نسخه 4 کتاب هوش مصنوعی: رویکردی نوین آخرین نسخه چاپ شده این کتاب است که در سال 2020 به چاپ رسیده است. از طریق لینک زیر | با کلیک بر روی تصویر زیر می‌توانید این کتاب را دانلود کنید.

منابع درسی هوش مصنوعی به زبان فارسی

ترجمه‌های فارسی متفاوتی از کتاب هوش مصنوعی با رویکردی نوین راسل وجود دارد که در اینجا محبوب‌ترین آنها را معرفی می‌کنیم. این کتاب‌ها هم می‌توانند به عنوان منبع درسی هوش مصنوعی در دانشگاه‌ها مورد استفاده قرار گیرند و هم منبعی هستند برای تست‌های کنکور.

در لیست زیر 4 تا از محبوب‌ترین ترجمه‌ها را مشاهده می‌کنید:

شاخه های هوش مصنوعی

هوش مصنوعی که خود یک شاخه از علوم کامپیوتر است، دارای شاخه‌های متعددی می‌باشد که هر شاخه نیز به شاخه‌های دیگری نیز قابل تقسیم است. در این قسمت به برخی از مهم‌ترین این شاخه‌ها می‌پردازیم.

یادگیری ماشین

یکی از شاخه‌های مهمی که کاربردهای بسیار زیادی در صنعت دارد، یادگیری ماشین یا Machine Learning (به اختصار ML) است. در یادگیری ماشین، سیستم‌های هوشمند طوری طراحی و ساخته می‌شوند که با استفاده از اطلاعات دریافتی و بدون برنامه‌ریزی اولیه و تنها با الگوریتم‌های نوشته شده، عامل شروع به یادگیری و تحلیل کند تا بتواند بر اساس یادگیری‌های خود موارد خواسته شده را پیش‌بینی و یا محاسبه کند. فرض کنید هزاران داده آماری مربوط به روند تغییر قیمت سهام را در اختیار دارید، به وسیله یادگیری ماشین، عامل می‌‌تواند شروع به یادگیری از طریق این داده‌ها کند و بر اساس آنها و الگوی دریافت شده از آنها، قیمت سهام را در آینده پیش‌بینی کند. با توجه به اینکه در دنیای امروزی داده‌ها بسیار حجیم هستند، در نتیجه اهمیت کلان داده‌ها و آنالیز آنها به یک امری جدی برای بشر تبدیل شده است. استفاده از هوش مصنوعی و یادگیری ماشین، کمک شایانی به رسیدگی به امورات تجزیه و تحلیلی می‌کند. تعدادی از مواردی که یادگیری ماشین می‌تواند به آنها رسیدگی کند را در لیست زیر مشاهده می‌کنید:

یادگیری عمیق

یادگیری عمیق یا Deep Learning یکی از حوزه‌های هوش مصنوعی و در واقع زیر مجموعه‌ای از یادگیری ماشین است. در یادگیری عمیق، طراحی سیستم‌های کامپیوتری هوشمند به گونه‌ای طراحی و برنامه‌ریزی می‌شوند تا بتوانند همانند یک انسان در مورد مسائل مشخص شده یاد بگیرند و راه‌حل‌هایی ارائه کنند. مهندسان علم داده  از موارد مختلفی مانند آمار و مدل‌سازی برای پیاده سازی سیستم‌های یادگیری عمیق استفاده می‌کنند. به طور کلی استفاده از یادگیری عمیق، جمع‌آوری، آنالیز و تفسیر کلان داده‌ها را آسان‌تر و بسیار سریعتر می‌کند. ورودی الگوریتم‌هایی که برای یادگیری عمیق وجود دارند، داده‌های مختلفی است که از دنیای خارجی به آنها می‌رسد، مانند متون، صوت، تصاویر و موارد دیگر. این الگوریتم‌ها با در اختیار داشتن چنین اطلاعاتی، سعی می‌کنند الگوهایی را پیدا کنند تا بتوانند به وسیله آن پیش‌بینی خاصی را حول موضوع مشخص شده انجام دهند.

یادگیری تقویتی

در یادگیری تقویتی یا Reinforcement Learning، عامل محیط پیرامون را بررسی و تجزیه تحلیل می‌کند و بر اساس آن یک اقدامی انجام می‌دهد سپس نتیجه این اقدام را مشاهده کرده و مورد بررسی قرار می‌دهد بنابراین علاوه بر داده‌های اولیه، ماشین‌های هوشمند بر اساس تجربیات خودشان نیز دانش کسب می‌کنند و رفتار و عملکردشان را تغییر می‌دهند. این تجربیات و رفتارها آنقدر تغییر کرده و پیشرفت می‌کند تا عامل هوشمند به هدف خود برسد.

شبکه های عصبی

مغز انسان یکی از پیچیده‌ترین و شگرف‌ترین سیستمی است که به عقیده دانشمندان در کل جهان هستی وجود دارد. تمامی رفتارهایی که به صورت خودآگاه یا ناخودآگاه از انسان سر می‌زند، تحت کنترل مغز او هستند. سرعت و قدرت بالای مغز انسان به ارتباطات پیچیده‌ای بر می‌گردد که در میان سلول‌های زنده مغز انسان وجود دارد. به همین علت، عملکرد فوق‌العاده مغز انسان در بسیاری از موارد مختلف باعث شده تا شبیه سازی مغز انسان و ویژگی‌های آن، به یکی از الگوهای مهم برای مهندسین نرم افزار و سخت افزار تبدیل شود.

تحقیقات و ابداعاتی که در راستای شبیه‌سازی رفتار مغز انسان از جهت پردازش و محاسباتی انجام شده است، باعث به‌وجود آمدن علم جدیدی در هوش مصنوعی تحت عنوان شبکه های عصبی مصنوعی یا Artificial Neural Network شد. در این علم شبکه‌های عصبی، مدل‌های نرم افزاری و ریاضی گوناگونی با الهام گرفتن از عملکرد و ساختار مغز انسان پیشنهاد شده‌اند که برای حل مسائل کامپیوتری مختلفی مورد استفاده قرار می‌گیرند؛ به عنوان مثال در حوزه مسائل کاربردی و مهندسی، در مسائل علمی و...

در لیست زیر، تعدادی از کاربردهای مختلف شبکه‌های عصبی مصنوعی را آورده‌ایم:

رباتیک

شاید ملموس‌ترین کاربرد هوش مصنوعی برای عموم مردم، علم رباتیک (Robotics) باشد. ربات در واقع محصول مشترک علم مهندسی و فناوری است. ربات‌ها ماشین‌هایی هستند که رفتارهای انسان را تقلید کرده و می‌تواند در بسیاری از امورات مختلف جایگزین انسان‌ها شوند و یا دستیار انسان باشند. ربات‌ها محیط پیرامون را به وسیله سنسورها حس (Sense) می‌کنند و بر اساس آنها رفتارهایی از خود نشان می‌دهند که درخور محیط باشد.

ربات‌ها در انواع و اندازه‌های مختلفی ساخته می‌شوند تا بتوانند وظایف محول شده خاصی را انجام دهند. در اینجا انواع مهم ربات‌ها معرفی شده‌اند:

در لیست زیر موارد مختلفی که از ربات‌ها استفاده می‌شوند را مشاهده می‌کنید:

بینایی ماشین

از دیگر حوزه‌های هوش مصنوعی می‌توان به بینایی ماشین یا Machine Vision اشاره کرد. بینایی ماشین یک حوزه میان رشته‌ای است و علوم مختلفی را شامل می‌شود، از جمله این علوم می‌توان به صنایع، برق و الکترونیک، علوم رایانه و مکانیک اشاره کرد. در واقع بینایی ماشین از مبانی علوم رایانه، تکنیک‌های پردازش تصویر، مهندسی اپتیک و مهندسی مکانیک استفاده می‌کند و ارتباط نزدیکی با اتوماسین صنعتی دارد. این تکنولوژی بر اساس پردازش تصاویر دو بعدی کار می‌کند. به وسیله تجزیه و تحلیل پیرامون با دوربین‌های قدرتمندی که عامل‌های بینایی ماشین دارنده آنها هستند، می‌توان داده‌های تصویری یا همان Image Data را تولید و وارد کامپیوتر کرد. بینایی ماشین یکی از حوزه‌های رو به رشد حوزه هوش مصنوعی می‌باشد که کاربرد های مختلفی دارد.

کاربردهای بینایی ماشین

بینایی ماشین در صنایع مختلفی به طور مستقیم یا غیر مستقیم مورد استفاده قرار گرفته است که در اینجا به برخی از این صنعت‌ها می‌پردازیم:

دیگر حوزه های هوش مصنوعی

از دیگر شاخه‌های هوش مصنوعی می‌توان به موارد زیر اشاره کرد:

همچنین این حوزه‌ها می‌توانند با یکدیگر نیز ادغام شوند.

برنامه نویسی هوش مصنوعی

برنامه نویسی در زمینه هوش مصنوعی طیف گسترده‌ای از حوزه‌ها را در بر می‌گیرد. از ایجاد نرم‌افزارهایی برای اجرای عملیات تشخیص الگوها با استفاده از یادگیری ماشین و تحلیل داده‌ها گرفته تا برنامه نویسی سیستم‌های تعبیه شده در خودروهای خودران. همانند دیگر زمینه‌های مهندسی کامپیوتر (مثل برنامه نویسی وب، برنامه نویسی اندروید و یا بازی) برای برنامه نویسی هوش مصنوعی هم زبان های برنامه نویسی مختلف و متفاوت وجود دارد که هرکدام از آنها در موارد مختلف مورد استفاده قرار می‌گیرد و همچنین هرکدام دارای مزایا و معایب مختلفی هستند. در لیست زیر محبوب‌ترین زبان های برنامه نویسی هوش مصنوعی آورده شده است:

هوش مصنوعی با پایتون

زبان برنامه نویسی پایتون از دیرباز یکی از محبوب‌ترین زبان‌ها جهت برنامه نویسی هوش مصنوعی بوده است. به دلیل ساده بودن سینتکس‌ها، کم حجم بودن و راه‌اندازی سریع زبان و داشتن پکیج‌های بسیار زیاد و متنوع، هر روزه بر تعداد کاربران این زبان افزوده می‌شود. در این قسمت کتابخانه های پایتون معروف جهت کدنویسی برای هوش مصنوعی و تجزیه و تحلیل داده را مرور می‌کنیم. با استفاده از کتابخانه Scikit-Learn می‌توان الگوریتم های هوش مصنوعی مانند Classification و Regression را پیاده‌سازی کرد. کار کردن در زمینه Deep Learning یا یادگیری عمیق به وسیله کتابخانه‌های محبوب TensorFlow، Keras و Caffe قابل انجام است؛ همچنین با استفاده از کتابخانه هایی مانند NumPy، SciPy و Pandas می‌توان به ساخت و پردازش انواع آرایه‌ها، تجزیه و تحلیل داده‌ها و بسیاری از موارد دیگر پرداخت. اطلاعات آنالیز شده و یا نمودارها را نیز می‌توان به وسیله کتابخانه Matplotlib به حالت بصری درآورد. کتابخانه‌های دیگری هم وجود دارند که در زمینه هوش مصنوعی به برنامه نویسان کمک می‌کنند مانند SpaCy، NTLK، SimpleAI و...

هوش مصنوعی با زبان R

زبان برنامه نویسی R که مخصوص محاسبات و تحلیل‌های آماری ساخته شده است، یکی از زبان هایی است که در حوزه هوش مصنوعی کاربرد فراوانی دارد، به خصوص برای کاربردهای یادگیری ماشین. سینتکس‌های ساده و کوتاه شده، داشتن کتابخانه‌های فراوان برای ترسیم نمودارها و فرمول‌های آماری، پشتیبانی از کتابخانه‌های محبوب مانند TensorFlow، Keras و MXNet باعث شده است تا بسیاری از برنامه نویسان به سمت این زبان سوق پیدا کنند.

هوش مصنوعی با جاوا

وقتی هدف برنامه نویس هوش مصنوعی تحلیل و استخراج داده‌ها است و یا تنها می‌خواهد یک الگوریتم یادگیری را پیاده‌سازی کند، زبان‌هایی مثل پایتون و R بسیار مفید واقع می‌شوند اما ممکن است هدف از برنامه نویسی هوش مصنوعی، ایجاد یک برنامه و نرم افزار باشد که قرار است بارها توسط افراد مختلف (و مشتریان) اجرا شود. این نرم‌افزارها باید از عملکرد سریعی برخوردار باشند بنابراین استفاده از یک زبان کامپایلری مثل جاوا کار عاقلانه‌تری به نظر می‌رسد تا استفاده از یک زبان مفسری.

زبان جاوا دارای ویژگی‌های متعددی می‌باشد که مهم‌ترین آنها در لیست زیر آمده است:

همین ویژگی‌های مثبت زبان جاوا باعث شده تا برای توسعه بسیاری از کاربردهای هوش مصنوعی از این زبان استفاده شود. مانند تجزیه و تحلیل داده‌ها، یادگیری عمیق، یادگیری ماشین، پردازش زبان طبیعی و بسیاری از کاربردهای دیگر.

درس هوش مصنوعی در کنکور ارشد

در کنکور ارشد کامپیوتر 1401 تمامی گرایش‌ها، درس‌های یکسانی دارند اما با ضرایب متفاوت. کل دروس به 2 بخش عمومی و تخصصی تقسیم می‌شوند. بخشی عمومی شامل زبان با ضریب 1 و مجموعه ریاضیات یعنی ریاضی 1، ریاضی 2، آمار و ریاضیات گسسته با ضریب 2 است.

بخش تخصصی شامل 11 درس است که به 4 مجموعه درسی تقسیم شده است:

مجموعه درس دوم که شامل 3 درس ساختمان داده، الگوریتم و هوش مصنوعی است در گرایش‌های رایانش امن، شبکه‌های کامپیوتری، معماری کامپیوتر و علوم و فناوری شبکه، دارای ضریب 3 است و در گرایش هوش مصنوعی، نرم افزار، بیوانفورماتیک، علوم داده، الگوریتم و محاسبات و قرآن کاوی رایانشی دارای ضریب 4 می‌باشد. برای دیدن ضرایب بقیه درس‌ها و گرایش‌ها، به صفحه ی دروس مورد آزمون در کنکور ارشد کامپیوتر و ضرایب آن رجوع کنید. تعداد تست‌هایی که از درس هوش مصنوعی در آزمون کنکور مطرح می‌شود شامل 8 تست در کنکور مهندسی کامپیوتر و 6 تست در مهندسی فناوری اطلاعات می‌باشد. با توجه به تعداد سوالات و ضریب بالای این درس، می‌توان گفت یکی از دروس مهم کنکور کارشناسی ارشد به حساب می‌آید.

فیلم های آموزشی درس هوش مصنوعی

همانطور که قبل‌تر بیان شد، درس هوش مصنوعی اهمیت بالایی دارد بنابراین نیازمند یک آموزش کامل با بیان ساده و منسجم است تا دانشجویان بتوانند امتیاز بالایی از این درس در کنکور کسب کنند. به دلیل حجیم و البته چالش برانگیز بودن این درس، منابع کامل و کافی مناسبی برای این درس وجود ندارد، به خصوص اینکه در اکثر دانشگاه‌های ایران، با توجه به کمبود وقت، تمامی فصول هوش مصنوعی به طور کامل پوشش داده نمی‌شود بنابراین با توجه به نیازهای دانشجویان گرامی، مجموعه کاملی از ویدیوهای آموزشی برای درس هوش مصنوعی گردآوری شده تا هم نیازهای کنکور شما را برطرف سازد و هم اگر در آینده تمایل به ادامه این رشته پیدا کردید، این مجموعه آموزشی بتواند پایه‌های علم شما را مستحکم کند. ویدیو های آموزشی این مجموعه به صورت کاملا شیوا و صریح بیان شده است و از 0 تا 100 درس هوش مصنوعی را پوشش می‌دهد.

معرفی دوره درس و حل تست و سوالات هوش مصنوعی

در اینجا مشخصات پکیج قرار می‌گیرد.

بهترین منابع برای درس هوش مصنوعی در آزمون کنکور ارشد کدامند؟

با توجه به اهمیت بالای درس هوش مصنوعی در آزمون کنکور ارشد، تعداد کتاب‌های تالیف شده و آموزش‌های ویدیویی ساخته شده بسیار زیاد است و ممکن است داوطلبان کنکور را سردرگم کند. از آنجایی که مرجع درس هوش مصنوعی در دانشگاه و آزمون کنکور ارشد، کتاب Artificial Intelligence: A Modern Approach نوشته نورویگ و راسل است، در نتیجه کتب فارسی همگی ترجمه این کتاب می‌باشند و می‌توان گفت بیش از 90 درصد این کتب چه از نظر تدریس و چه از نظر تست‌ها شبیه به هم هستند. اما اگر بخواهیم با توجه به رضایتمندی داوطلبان، کتابی را انتخاب کنیم، کتاب هوش مصنوعی راسل ترجمه دکتر هشام فیلی می‌تواند گزینه مناسبی باشد. مشکلی که وجود دارد این است که تنها خواندن کتاب و یا تنها مشاهده ویدیو ممکن است کافی نباشد و بهتر است حتما در کنار کتاب درسی، ویدیوهای آموزشی نیز تهیه کنید. ویدیوهای درس هوش مصنوعی کنکور کامپیوتر با بیانی ساده و از 0 تا 100 درس هوش مصنوعی را به طور کامل پوشش داده است. بنابراین اگر قصد کسب رتبه برتر در آزمون کنکور ارشد را دارید، ویدیوهای این مجموعه به شما پیشنهاد می‌شود.

اهمیت درس هوش مصنوعی در کنکور ارشد چقدر است؟

درس هوش مصنوعی یکی از دروس مهم آزمون کنکور به حساب می‌آید. ضریب این درس در گرایش‌های مختلف متفاوت است. در گرایش‌های رایانش امن، شبکه‌های کامپیوتری، معماری کامپیوتر و علوم و فناوری شبکه، این درس دارای ضریب 3 است و در گرایش هوش مصنوعی، نرم‌افزار، بیوانفورماتیک، علوم داده، الگوریتم و محاسبات و قرآن کاوی رایانشی دارای ضریب 4 می‌باشد.

چند تست از درس هوش مصنوعی در آزمون کنکور ارشد مطرح می‌شود؟

با توجه به تغییراتی که در آزمون کنکور ایجاد می‌شود به طور دقیق نمی‌توان در این مورد نظر داد اما اگر بخواهیم آخرین آزمون کنکور را مدنظر قرار دهیم می‌توان گفت تعداد تست‌هایی که از درس هوش مصنوعی در آزمون کنکور مطرح می‌شود شامل 8 تست در کنکور مهندسی کامپیوتر و 6 تست در مهندسی فناوری اطلاعات می‌باشد.







کامپیوتر شریف

بیشتر دانش‌آموزانی که در رشته‌های نظری ریاضی فیزیک یا دانش‌آموزان فنی حرفه‌ای رشته کامپیوتر که در حال تحصیل هستند مایل‌اند برای تحصیلات تخصصی خود در یکی از بهترین رشته‌های مهندسی مانند مهندسی کامپیوتر ادامه تحصیل دهند؛ زیرا این رشته بازار کار فوق‌العاده‌ای در سراسر دنیا دارد و فارغ‌التحصیلان این رشته از دانشگاه‌های تاپ کشور در بهترین مناطق دنیا مشغول به کارند. یکی از بهترین دانشگاه‌های مطرح در ایران و سطح جهان دانشگاه صنعتی شریف یا به‌اختصار شریف است که با اساتید زبده و مدرک‌های معتبر آینده دانشجویان خود را تضمین می‌کند، در ادامه این نوشتار بیشتر به بحث مهندسی کامپیوتر شریف می‌پردازیم همچنین چند کارنامه قبولی مهندسی کامپیوتر 1401 در شریف را آنالیز می‌کنیم تا متقاضیان عزیز درک درست‌تری از نحوه انتخاب رشته و قبولی در این دانشگاه را داشته باشند، لذا با ما همراه باشید و مطالب جذاب ادامه را از دست ندهید.

دانشگاه شریف

دانشگاه صنعتی شریف یکی از بزرگ‌ترین دانشکده‌های مهندسی در جمهوری اسلامی ایران است. این دانشگاه در سال 1345 با نام دانشگاه صنعتی آریامهر تأسیس شد و در آن زمان 54 عضو هیئت‌علمی و در مجموع 412 دانشجو که با آزمون سراسری انتخاب شدند را داشت. در سال 1359 این دانشگاه به نام کنونی خود یعنی دانشگاه صنعتی شریف تغییر نام داد. اکنون در مجموع دارای 300 عضو هیئت‌علمی تمام‌وقت، تقریباً 430 عضو هیئت‌علمی پاره‌وقت و تعداد دانشجویان شریف در حدود 12000 نفر است.

ورودی دانشگاه صنعتی شریف

رتبه دانشگاه شریف

طبق آمار QS World University Rankings دانشگاه شریف یکی از برترین دانشگاه‌های جهان محسوب می‌شود و تا سال 2024 در رتبه‌بندی 334 دنیا قرار می‌گیرد.

نمودار رتبه دانشگاه صنعتی شریف

مهندسی کامپیوتر در دانشگاه شریف

رشته مهندسی کامپیوتر یکی از رشته‌های زیر مجموعه علوم ریاضی است که در بین رشته‌های پرمتقاضی در سراسر جهان شناخته می‌شود، قبولی در رشته مهندسی کامپیوتر فقط از یک طریق امکان‌پذیر است آن هم شرکت در کنکور سراسری ریاضی فیزیک و کسب حداقل درصدهای و حداقل رتبه قبولی است که در ادامه کارنامه آخرین نفرات قبول شده این دانشگاه آورده شده است و شما می‌توانید این کارنامه‌ها را بررسی کنید تا دید درست‌تری نسبت به قبولی دانشگاه شریف بیابید.

نکته لازم به ذکر دیگر این است که مهندسی کامپیوتر در دانشگاه شریف سه مقطع دارد که عبارت‌اند از:

لذا به علت نداشتن مقطع کارشناسی ناپیوسته مهندسی کامپیوتر در شریف ارائه نشده است؛ بنابراین دانش‌آموزان فنی حرفه‌ای و هنرستان‌ها نمی‌توانند در این دانشگاه پذیرش شوند. برای کسب اطلاعات بیشتر و آشنایی با دانشکده مهندسی کامپیوتر شریف می‌توانید به سایت دانشکده کامپیوتر دانشگاه شریف مراجعه کنید.

میانگین درصد و رتبه موردنیاز جهت قبولی در رشته مهندسی کامپیوتر در دانشگاه دولتی صنعتی شریف در سال‌های 1400 و 1401

در ادامه این نوشتار به میانگین درصدهای قبولی‌های دانشگاه شریف در دو سال متمادی 1400 و 1401 می‌پردازیم که باتوجه‌به جداول شاید فکر کنید اندکی قبولی 1401 نسبت به 1400 در دانشگاه شریف بهبودیافته اما این احتمال برای 1402 و 1403 خیلی کم است که همچنان رتبه‌های بالاتر بخواهند پذیرش شوند؛ زیرا هر ساله سطح متقاضیان نسبت به سال‌های قبل و بعد خود متفاوت است، حتی ممکن است ظرفیت دانشگاه برای رشته مهندسی کامپیوتر و سهمیه‌ها نیز در هر سال متفاوت باشد.

 

 

میانگین درصد و رتبه موردنیاز جهت قبولی مهندسی کامپیوتر دانشگاه دولتی صنعتی شریف سال 1401

میانگین رتبه و درصدهای لازم برای کنکور کامپیوتر دانشگاه شریف
نام درس میانگین درصد موردنیاز
ریاضی 60
فیزیک 90
شیمی 60
میانگین رتبه
منطقه 1 1-55
منطقه 2 1-31
منطقه 3 1-26

میانگین درصد و رتبه موردنیاز جهت قبولی مهندسی کامپیوتر دانشگاه دولتی صنعتی شریف سال 1400

میانگین رتبه و درصدهای لازم برای کنکور کامپیوتر دانشگاه شریف
نام درس میانگین درصد موردنیاز
ریاضی 60
فیزیک 90
شیمی 70
ادبیات 80
عربی 90
معرف 90
زبان انگلیسی 90
میانگین رتبه
منطقه 1 1-42
منطقه 2 1-18
منطقه 3 1-3

آخرین رتبه‌های قبولی رشته مهندسی کامپیوتر روزانه در دانشگاه صنعتی شریف در مناطق یک و دو و سه در سال 1401

در ادامه سه کارنامه که مربوط به آخرین نفرهای قبول شده دانشگاه شریف در رشته مهندسی کامپیوتر 1401 است آورده شده است، توجه داشته باشید که درصدهای کارنامه‌ها حدودی است و منظور از شهر، شهر متقاضی قبول شده است.

آخرین رتبه قبولی در رشته مهندسی کامپیوتر روزانه دانشگاه دولتی صنعتی شریف در منطقه 1

اولین کارنامه قبولی مهندسی کامپیوتر روزانه دانشگاه دولتی صنعتی شریف تهران منطقه 1
ادبیات شیمی معارف زبان عربی فیزیک ریاضی رتبه کشوری رتبه در منطقه 1 شهر
84 47 90 78 90 100 96 8 6 تهران
84 66 80 89 90 95 89 36 25 تهران
71 59 67 87 72 86 91 135 92 تهران

آخرین رتبه قبولی در رشته مهندسی کامپیوتر روزانه دانشگاه دولتی صنعتی شریف در منطقه 2

دومین کارنامه قبولی مهندسی کامپیوتر روزانه دانشگاه دولتی صنعتی شریف تهران منطقه 2
شیمی عربی زبان ادبیات ریاضی فیزیک معارف رتبه کشوری رتبه در منطقه 2 شهر
89 90 95 79 85 90 100 12 2 همدان
68 79 89 74 78 92 84 109 29 کرج
60 59 69 79 85 84 86 152 43 سمنان
70 - - - 59 88 - 67 21 تهران

آخرین رتبه قبولی در رشته مهندسی کامپیوتر مقطع روزانه در دانشگاه دولتی صنعتی شریف در منطقه 3

سومین کارنامه قبولی مهندسی کامپیوتر دانشگاه دولتی صنعتی شریف تهران منطقه 3
ادبیات فیزیک معارف عربی ریاضی زبان شیمی رتبه کشوری رتبه در منطقه 3 شهر
95 88 90 100 90 84 84 10 1 شیروان
84 88 87 96 79 77 56 123 5 بجستان
66 73 80 86 53 95 48 829 47 پاکدشت

جمع‌بندی

امیدواریم از این نوشتار هم مانند سایر نوشتارهای وبلاگ کنکور کامپیوتر مفید واقع شده باشد، برای قبولی مهندسی کامپیوتر دانشگاه شریف هر لحظه و هر جا کنار شما خواهیم بود، شما عزیزان برای کسب اطلاعات بیشتر و دوره‌های کنکور کامپیوتر مؤسسه ما می‌توانید از طریق تماس با مشاورین زبده ما در تماس باشید و مشاوره رایگان دریافت کنید.

آیا قبولی در کارشناسی مهندسی کامپیوتر دانشگاه شریف نیاز به کنکور دارد؟

بله صددرصد، متقاضیان عزیز بایستی با قبولی در کنکور سراسری ریاضی فیزیک بتوانند حداقل رتبه لازم را که در متن مقاله به آن اشاره شده است کسب نمایند و هیچ راه دیگری برای قبولی در این دانشگاه وجود ندارد.

آیا کارشناسی ارشد مهندسی کامپیوتر در دانشگاه شریف دارای مصاحبه تخصصی است؟

در سالیان 1400 و قبل‌تر مصاحبه فقط برای دوره دکتری شریف انجام می‌شد؛ اما اکنون گویا دانشگاه شریف برای دانشجویان ارشد آن هم در یک سری رشته‌های خاص مصاحبه تخصصی برگزار می‌کند.

اعتبار مدرک دانشگاه شریف چقدر است؟

باتوجه‌به رتبه‌بندی ذکر شده در متن مقاله، تقریباً کل کشورهای دنیا مدرک دانشگاه شریف را یکی از معتبرترین مدارک دانشگاهی برمی‌شمارند.







رشته آی تی دانشگاه شریف(به نویسنده گفتم اضافه کنه)

رشته آی تی یا فناوری اطلاعات هم مانند رشته مهندسی کامپیوتر یکی از رشته‌های پرطرفدار امروزی است که هر چند مانند کامپیوتر شناخته شده نیست؛ اما بسیار عالی و پرکاربرد است. در این نوشتار از کنکور کامپیوتر ابتدا اینکه رشته‌ آی تی چیست و چه تفاوتی با کامپیوتر دارد را شرح می‌دهیم سپس به سراغ رشته‌ آی تی در یکی از بهترین دانشگاه های ایران یعنی دانشگاه صنعتی شریف تهران می‌رویم و درصدها و رتبه‌های لازم را برای تحصیل آی تی شریف عنوان می‌کنیم، در آخر چندین کارنامه مربوط به قبولی‌های آی تی شریف را تحلیل و بررسی خواهیم کرد؛ پس اگر متقاضی قبولی در رشته آی تی دانشگاه شریف هستید، اطلاعات مفید این صفحه را به هیچ عنوان از دست ندهید.

رشته آی تی چیست؟ و تفاوت آن با مهندسی کامپیوتر چیست؟

رشته‌ آی تی IT خلاصه شده‌ی عبارت Information Technology یعنی فناوری اطلاعات، فارغ‌التحصیلان و کارشناسان این رشته باید بکوشند در بخش فناوری سازمان‌ها و یا شرکت‌ها فعالیت کنند تا اطلاعات را مدیریت کنند. برخلاف مهندسین کامپیوتر که باید یکی از گرایشات نرم‌افزار یا سخت‌افزار را انتخاب کنند، متخصصان آی تی باید در هر دو حوزه نرم‌افزار و سخت افزار کامپیوتر فعالیت داشته باشند؛ یعنی با یکسری قطعات سخت افزاری مانند روترها، سوئیچ‌ها، کابل‌ها، کامپیوترها کار کنند و یک سری تنظیمات نرم‌افزاری نیز انجام دهند. در واقع با گسترش فناوری‌ها و تکنولوژی داده‌های زیادی در سرتاسر دنیا به‌وجود آمد که به آنها بیگ دیتا می‌گویند، اکثر سازمان‌ها برای مدیریت این داده‌ها نیاز به متخصصان آی تی دارند، یک کارشناس آی تی باید بکوشد علاوه بر این اطلاعات حجیم، کامپیوترهای سازمان و پایگاه داده‌های را هم مدیریت و سامان‌دهی کند. در کشور ما رشته‌ آی تی اکثر در مقطع لیسانس ارائه می‌شود یا حتی در بعضی از دانشگاه‌های سر فصل‌های آن بسیار شبیه به علوم کامپیوتر است.

در کل سه دانشگاه پیشرو در زمینه‌ آی تی در ایران است:

که‌ آی تی را در یک رشته مجزا با سر فصل‌های مجزا و در سه مقطع:

ارائه می‌دهند.

در این تصویر شخصی درحال مدیریت اطلاعات است

رشته آی تی در دانشگاه شریف

دانشگاه شریف یکی از بهترین دانشگاه‌های ایران و البته جهان است که به داشتن اساتید برتر، دانشجویان فعال، تحقیقات پیشرفته و گسترده، همچنین کیفیت آموزشی بالاتر از حد استاندارد معروف است، این دانشگاه طبق آمار مرکز QS World University Rankings تا سال 2024 رتبه 334 بین کل دانشگاه‌های جهان را کسب خواهد کرد. رشته‌ آی تی از سال 1380 در دانشگاه صنعتی شریف در دو مقطع کارشناسی و کارشناسی ارشد ارائه می‌شود و در واقع یکی از اولین دانشگاه‌های ایران است که رشته‌ آی تی را ارائه کرده است.

سرفصل درس‌های رشته‌ آی تی و تعداد واحدها:

کارشناسی‌ آی تی دانشگاه شریف - رتبه و درصدهای لازم

قبولی در مقطع کارشناسی در رشته آی تی دانشگاه شریف مثل قبولی مهندسی کامپیوتر شریف رتبه و درصد می‌طلبد (با اندکی اختلاف) چون این دو رشته بسیار نزدیک به هم هستند حتی مقطع ارشد فناوری اطلاعات می‌توان با مهندسی کامپیوتر قبول شد. برای قبولی رشته‌ آی تی دانشگاه شریف به‌طور میانگین با توجه به منطقه یک یا دو یا سه بودن درصدهای زیر لازم است.

منطقه یک

قبولی برای داوطلبان منطقه یک به طور میانگین نیازمند درصدهای زیر است:

نام درسدرصد
ادبیات فارسی 80%
شیمی 43%
ریاضیات 94%
فیزیک 100%
معارف 89%
زبان 75%
عربی 94%

منطقه دو

قبولی برای داوطلبان منطقه دو به طور میانگین نیازمند درصدهای زیر است:

نام درسدرصد
ریاضیات 70%
فیزیک 80%
معارف 95%
زبان 90%
ادبیات فارسی 64%
عربی 80%
شیمی 40%

منطقه سه

قبولی برای داوطلبان منطقه سه به طور میانگین نیازمند درصدهای زیر است:

نام درسدرصد
ادبیات فارسی 66%
زبان 91%
شیمی 45%
عربی 74%
معارف 97%
ریاضیات 66%
فیزیک 90%

کارشناسی ارشد آی تی دانشگاه شریف - رتبه و درصدهای لازم

قبولی در مقطع ارشد آی تی دیگر مانند کارشناسی نیازمند درصدهای خوب و یا رتبه‌های تک رقمی نیست، هر چند دروس به مراتب تخصصی و سخت‌تر از دروس دبیرستان هستند و بیشتر مختص به رشته کامپیوتر هستند اما با توجه به کاهش به یکباره متقاضیان شرایط کمی آسان‌تر از مرحله کارشناسی آی تی در دانشگاه شریف است. در ارشد آی تی دانشجویان می‌توانند هم از سمت کارشناسی مهندسی کامپیوتر و هم از سمت رشته‌ آی تی کنکور سراسری ارشد را طی کنند و بعد از کسب درصد و رتبه لازم در دانشگاه شریف مشغول به تحصیل شوند. در ادامه توجه شما را به کارنامه قبولی‌ آی تی دانشگاه شریف در مقطع ارشد جلب می‌کنیم:

در این تصویر، کارنامه مربوط به قبولی یک داوطلب با سهمیه پنج درصدی در آزمون ارشد 1400 که رشته آی تی شریف پذیرفته شده‌ است قرار دارد

این کارنامه مربوط به قبولی یک داوطلب با سهمیه پنج درصدی در آزمون ارشد 1400 است که رشته آی تی شریف پذیرفته شده‌اند اگر به درصدها توجه کنید می‌بیند که با سطح متوسط رو به بالا زدن در آزمون ارشد می‌توان به‌راحتی قبول شد؛ فقط نکته حائز اهمیت این جا بحث سهمیه‌ها است که افراد با سهمیه آزاد باید رتبه‌ها و درصدهای بهتری کسب کنند.

جمع‌بندی

امیدواریم این نوشتار هم مانند سایر نوشتارهای بلاگ کنکور کامپیوتر برای شما مفید واقع شده باشد، اگر به دنبال تحصیل در دانشگاه‌ها و رشته‌های تاپ در ایران یا خارج از کشور مانند آی تی دانشگاه شریف هستید، موسسه کنکور کامپیوتر در هر لحظه کنار شما خواهد بود تا رتبه‌های بهتری کسب کنید برای کسب اطلاعات بیشتر در این زمینه می‌توانید از طریق مشاوره تلفنی رایگان با موسسه ما در ارتباط باشید.

آیا رشته آی تی بهتر است یا مهندسی کامپیوتر؟

رشته‌ آی تی تقریباً جدیدتر از مهندسی کامپیوتر است؛ اما از لحاظ بهتری این دو هیچ برتری نسبت به هم ندارند، بسته به علایق دانشجویانم دارد که کدام را برگزینند.

آیا رشته‌ آی تی به صورت کارشناسی ناپیوسته در دانشگاه شریف ارائه می‌شود؟

خیر، دانشگاه شریف در کل دو مقطع کارشناسی و کارشناسی ارشد آی تی را ارائه می‌دهد و هیچ مقطع ناپیوسته‌ای برای این رشته در شریف موجود نیست.

آیا میتوان بدون کنکور آی تی شریف پذیرفته شد؟

خیر، تنها راه قبولی در رشته‌ آی تی شریف کنکور سراسری رشته ریاضی فیزیک که هر ساله تحت نظر سازمان سنجش برگزار می‌شود، است.

امتیازدهی1111111111امتیاز 0.00(0 امتیاز)
اشتراک
تلگرام اینستاگرام تماس با پشتیبانی: 09378555200 تماس با پشتیبانی: 09378555200