۶ مطلب با کلمه‌ی کلیدی «الگوریتم» ثبت شده است

الگوریتم وارشال برای بدست آوردن بستار متعدی در زبان راست و پایتون

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

هشدار! کد راست با اینکه به درستی کار می‌کند اما ممکن است به روش خود راست نوشته نشده باشد و در آن عادت‌های خوب برنامه‌نویسی رعایت نشده باشد!

// Code by Rust beginner, Farooq Karimi Zadeh
// Under CC0 1.0
// Warning! Code might not be idiomatic

fn main() {
    let mut bin_matrix = [
        [0, 1, 0, 0],
        [1, 0, 1, 0],
        [0, 0, 0, 1],
        [0, 0, 0, 0]
    ];
    const N:u32 = 300_000;
    for _dummy in 0..N { 
        for k in 0..bin_matrix.len() {
            let the_clone = bin_matrix;
            for (i, row) in bin_matrix.iter_mut().enumerate() {
                for (j, value) in row.iter_mut().enumerate() {
                    if *value == 0 {
                        *value = the_clone[i][k] & the_clone[k][j];
                    }
                }
            }
        }
    }
    println!("{:?}", bin_matrix);
}

لینک کد راست در گیست


"""
Warshall algorithm
This calculates transitive closure for a given binary matrix
Author: Farooq Karimi Zadeh
Code is under CC0 1.0
"""

from pprint import pprint

def pretty_print_matrix(matrix):
    pprint(matrix, width=len(matrix[0]) * 3 + 2)


n = int(3e5)  # calculate n times
bin_matrix = [[0, 1, 0, 0], [1, 0, 1, 0], [0, 0, 0, 1], [0, 0, 0, 0]]
for dummy in range(n):
    for k, _ in enumerate(bin_matrix):
        for i, row in enumerate(bin_matrix):
            for j, value in enumerate(row):
                if not value:
                    bin_matrix[i][j] = bin_matrix[i][k] and bin_matrix[k][j]

if n == 1:
    pretty_print_matrix(bin_matrix)
else:
    pass  # then we are benchmarking

لینک کد پایتون در گیست

مجوز مطالب و محتوا ۲۴ ارديبهشت ۰۰ ، ۱۴:۲۸ ۰ نظر موافقین ۱ مخالفین ۰
فاروق کریمی زاده

پیاده‌سازی الگوریتم مرتب سازی حبابی در کامن لیسپ

(defun bubble-sort (vector)
  (loop for swapped = nil
     do (loop for i from 0 below (1- (length vector))
	   when (> (aref vector i) (aref vector (1+ i)))
	   do (rotatef (aref vector i) (aref vector (1+ i)))
	     (setf swapped t))
     unless swapped return vector))

ادامه مطلب...
مجوز مطالب و محتوا ۲۹ آذر ۹۸ ، ۱۶:۵۹ ۳ نظر موافقین ۲ مخالفین ۰
فاروق کریمی زاده

یادگیری ماشینی و یادگیری عمیق

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

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

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

 

 

 

مجوز مطالب و محتوا ۱۰ ارديبهشت ۹۶ ، ۲۲:۲۳ ۳ نظر موافقین ۲ مخالفین ۰
BSimjoo

نظرات (۳)

فرهاد حسن‌پور
فاروق کریمی زاده

الگوریتم مرتب‌سازی حبابی + کد پایتون + کد سی + کد سی شارپ + کد سی پلاس پلاس

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

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

  1. در یک دور پیمایش جابجایی صورت نگیرد.یعنی در آن دور عددی پیدا نشود که از عدد بعدی خود بزرگتر(یا بصورت نزولی کوچکتر) باشد و جایش با عدد بعدی عوض نشود.
  2. روش دوم که روش من درآوردی است(خودم ساختمش!) این است که یک تابع جدا بنویسید که یکبار مجموعه را از اول تا آخر پیمایش کند و اگر عددی پیدا نشد که از عدد بعدیش بزرگتر باشد پس فهرست‌ما مرتب است.
روش پیشنهاد شده روش اول است.
ادامه مطلب...
مجوز مطالب و محتوا ۰۷ خرداد ۹۵ ، ۱۰:۰۰ ۲ نظر موافقین ۰ مخالفین ۰
فاروق کریمی زاده

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

این کتاب الگوریتم های مرتب سازی(حبابی،سریع و ...) را به همراه کد سی پلاس پلاس هر الگوریتم آموزش میدهد.


حجم: 1.41 مگابایت

مجوز مطالب و محتوا ۰۷ ارديبهشت ۹۵ ، ۱۰:۰۰ ۴ نظر موافقین ۲ مخالفین ۰
فاروق کریمی زاده

الگوریتم چیست؟ (طنز)

الگوریتم(اسم): کلمه‌ای است که توسط برنامه‌نویسان زمانی که نمیخواهند بگویند چه کاری انجام داده‌اند استفاده میشود!

مجوز مطالب و محتوا ۰۷ فروردين ۹۵ ، ۲۱:۰۰ ۰ نظر موافقین ۱ مخالفین ۰
فاروق کریمی زاده