الگوریتم کولهپشتی، یک الگوریتم از نوع حریصانه هست. در این مطلب در مورد الگوریتم کولهپشتی یک و صفر (0/1 knapsack algorithm) مینویسم. برای مثال فرض کنید یک کوله پشتی با حجم ۹۰ لیتر دارید؛ و وسایلی که دارید علاوه بر حجم برای شما یک ارزش یا اهمیت دارند و احتمالا همه آنها جا نمیشوند. حال به چه صورت وسایل را انتخاب میکنید تا بیشترین ارزش را در کوله پشتی خود داشته باشید؟ در الگوریتم کولهپشتی یک و صفر یا یک شی انتخاب میشود و یا خیر! امکان برش و تکه کردن نیست.
تعریف کلی کاراکتر یا نویسه در کامپیوتر یعنی کوچکترین واحد نمایش اطلاعات که میتونه یک حرف یا علامت باشه. نویسهها شامل فاصله، عددها و علامتها هم هستند!
نویسه در دنیای دیجیتال
در دنیای دیجیتال برای انتقال اطلاعات چیزی جز خاموش و روشن نداریم! جریانهای الکتریکی که قطع و وصل میشن، نوری که چشمک میزنه یا حتی تغییر جهت قطبهای مغناطیسی توی هاردها دنیای دیجیتالما رو میسازن!
به این خاموشها و روشنها میتونیم غلط و صحیح یا صفر و یک رو نسبت بدیم. این صفرها و یکها به کمک قوانین مبنای عددی در ریاضیات معنا پیدا میکنن. یعنی مثلاً عدد ۲ توی کامپیوتر میشه ۰۰۱۰، عدد ۱۱ توی کامپیوتر میشه ۱۰۱۱ و عدد ۵ میشه ۰۱۰۱. در واقع هر عدد، کد مخصوص به خودش رو داره که قابل محاسبه هست. این محاسبه بین مبنای ده (اعداد خودمون) و مبنای دو (اعداد کامپیوتر) به سادگیِ انجام چند تقسیم هست.
برای انتقال اعداد مشکلی نداریم اما اگر بخوایم نویسهها رو منتقل کنیم مشکل خواهیم داشت. برای این کار مجبوریم جدولی بسازیم و برای هر نویسه یک کد تعیین کنیم.
امروز میخوام براتون از رمزنگاری دوسویه یا دو کلیده بگم، این رمزنگاری دنیای اطلاعات رو زیر و رو کرده! تو جهان امروز هر جا رو که نگاه میکنی ردپای این رمزنگاری هست! HTTPS ،SSH، ارز های دیجیتال، شبکههای مجازی و … همه و همه دارن از این روش برای حفظ امنیت استفاده میکنن.
آنچه خواهید خواند!
- در ابتدا خواهم گفت در صورت نبود رمزنگاری اطلاعات چطور لو میروند
- بعد یه دید کلی از رمزنگاری میدم و میگم چرا نمیشه از روش های رایج استفاده کرد
- سپس روش رمزنگاری دوسویه رو به زبون ساده توضیح میدهم
- در ادامه از چگونگی استفاده آن در وب میگم
- چند خط کد مینویسیم و در پایتون از این روش استفاده میکنیم
از بزرگترها میشنوم که صفحهنمایشهای قدیمیتر اشعههایی از خود ساطع میکردند که باعث آسیب زدن به چشم و بروز سرطان میشدند. البته منظور از بروز سرطان اینجا به این معنی نیست که هرکس که با آن صفحهنمایشهای غولآسا کار میکرد سرطان میگرفت اما به این معنی است که شانس ابتلا به سرطان در افرادی که بیشتر در معرض صفحهنمایشهای CRT بودند، بیشتر میشد. صفحهنمایشهای امروزی بسیاری از مشکلات صفحهنمایشهای قدیمی را ندارند. در عین حال که سبکتر و نازکتر و کممصرفتر هستند به چشم نیز کمتر آسیب میزنند. اما هنوز هم خیرهشدن طولانی مدت به صفحهنمایش میتواند به چشمما آسیب بزند.
ما اهالی کامپیوتر ساعتها جلو صفحهی کامپوتر هستیم و این مسئله دغدغه خیلی ها از جمله خود من هست؛ برای همین، راهکار ها و مواردی که پیدا کردم را در این مطلب با شما به اشتراک خواهم گذاشت.
مسئلهٔ ۸ وزیر میپرسد که در یک صفحهٔ شطرنج چهطور میتوانیم ۸ مهرهٔ وزیر را چنان قرار دهیم که هیچکدام در معرض تهدید دیگری نباشد. در ریاضیات و علوم کامپیوتر، مسئلهٔ n وزیر یک نسخهٔ تعمیمیافته از ۸ وزیر میباشد که برای اکثر nهای صحیح مثبت (یا طبیعی) بیشتر از یک چینش وجود دارد.
قبلاً یک روش برای پیدا کردن راه حل برای مسئلهٔ ۸ وزیر با استفاده از الگوریتم ژنتیک ارائه دادم. حال میخواهم یک روش دیگر برای همین هدف اما به صورت یک الگوریتم قطعی و تصادفی به همراه کد پایتون ارائه دهم.
زمانی که از یک برنامهنویس پایتونی بخواهید یک تابع ساده بنویسد تا ارقام یک عدد را جمع کند و برگرداند، احتمالاً ابتدا عدد را به یک رشته تبدیل میکند و سپس رشته را به لیست (فهرست) و نهایتاً تکتک اعضای لیست را که ارقام عدد به صورت رشتههای تکنویسهای هستند به عدد تبدیل میکند و سپس آنها را با هم جمع میکند. ولی الزاماً اولین روشی که برای حل مسئله به ذهنمان میرسد، بهترین روش نیست. در این مطلب دو الگوریتم برای جمع ارقام یک عدد صحیح به صورت بازگشتی و تکرارشونده به همراه کد های پایتون آن ها ارائه میدهم.
مسئلهٔ ۸ وزیر یک تمرین معروف در علوم کامپیوتر و ریاضیات میباشد. این مسئله در مورد یک صفحهٔ شطرنج رایج و مهرهٔ وزیر در این بازی فکری میباشد. در ریاضیات ثابت میشود که میتوان ۸ وزیر را در یک صفحهٔ شطرنج چنان قرار داد که هیچکدام از وزیرها، دیگری را تهدید نکنند. با تعمیم این مسئله در ریاضیات، ثابت میشود که در یک صفحهٔ شطرنج به ضلع n، میتوان تعداد n وزیر قرار داد؛ چنانچه هیچکدام دیگری را تهدید نکنند. در علوم کامپیوتر میتوان با روشهای مختلفی این مسئله را حل کرد و به یک چینش از مهرههای وزیر رسید که هیچکدام دیگری را تهدید نکنند. یکی از این روشها «الگوریتم ژنتیک» است.
خیلی ها میگن پایتون زبان سادهای هست، میشه اون رو زود یاد گرفت، بخاطر تعیین نوع پویا(dynamic typing) دیگه نیازی نیست که برنامهنویس با type ها درگیر باشه و …
ولی آیا واقعا همینطوره؟! توی این مطلب قصد دارم کمی زبان پایتون رو به عنوان یه برنامهنویس پایتون بررسی کنم.
۱. پایتون زبان سادهای هست
منظور از سادگی زبان میتونه خوانا بودن اون و نزدیکی اون به زبان انگلیسی (زبان انسان) باشه. برای مثال دو تکه کد زیر رو ببینید:
زبان پایتون:
if not 2 in lst:
for x in lst:
print(x);
زبان سیشارپ:
if ( ! lst.contains(2) )
foreach ( int x in lst )
Console.WriteLine(x);
پیامرسان تلگرام، محبوبیت زیادی بین کشورهایی مانند ایران داشته و دارد. بسیاری آن را به واتساپ ترجیح میدهند و بر این باورند که تلگرام از واتساپ امنتر و آزادتر است و همچنین فضای ابری برای ذخیرهٔ پیامها و فایلهای ارسالی ارائه میدهد برخلاف واتساپ که به نظر میآید پروندهها (فایلها) و تصاویر را در سرورهایش (کارسازهایش) ذخیره نمیکند.
همچنین عدهای آزاد و متنباز بودن کلاینتهای (کارخواهها) تلگرام را دلیلی بر امن بودن آن میدانند. واتساپ برخلاف تلگرام رمزگذاری سراسری دارد به این معنی که تنها فرستنده و گیرندهٔ پیام میتوانند دادههای ردّ و بدل شده را بخوانند و حتی خود واتساپ که این دادهها را انتقال میدهد نمیتواند شنود کند. با این حال با توجه به این که کد منبع کلاینتهای واتساپ در دسترس نیست، نمیتوان این مورد را مطمئن بود.
زمانی که سیستم شما به هر دلیلی دچار مشکل میشود و سیستمعامل به اصطلاح بالا نمیآید شما به چیزی به نام سیستمعامل زنده (live) نیاز خواهید داشت تا فایلها را برگردانید و سیستمعامل را تعمیر کنید. بسیاری از کاربران (نسبتاً مبتدی) به دلیل دسترسی نداشتن به یک نسخه سیستمعامل زنده دچار مشکلاتی از قبیل از دست دادن اطلاعاتشون هستند. در این پست قصد دارم به این موضوع بپردازم که سیستمعامل زنده چیست، چگونه راهاندازی میشود و چطور میتوان آن را نصب کرد.
سیستمعامل زنده (live) چیست؟
اگر شما کاربر ویندوز هستید حتما میدانید که ویندوز باید ابتدا بر روی سیستم شما نصب شود تا بتوان آن را اجرا نمود اما سیستمعامل ویندوز مانند سیستمعامل های دیگر میتواند بر یک DVD یا یک flash نیز نصب شود. در شرایطی که سیستمعامل شما به درستی کار نمیکند میتوان از این امکان برای تعمیر سیستم و دسترسی به فایل ها استفاده کرد. در چنین شرایطی برای آن که سیستمعامل با هدف اجرا شدن از یک حافظه فلش یا DVD سازگار باشد (سریع و سبک باشد) نسخهای از آن به عنوان live منتشر میشود که قابل حمل است و نیازی به نصب ندارد.
سیستمعامل های غیر ویندوزی
اکثر سیستم عامل های غیر از ویندوز عموما از خانواده شبهیونیکس نسخه لایو جدا ندارند، درواقع اصلا نیازی ندارند! در هنگام نصب این سیستمعامل ها از کاربر سوال میشود که آیا میخواهید نصب شود یا به صورت زنده از آن استفاده کنید.
اما اگر به دنبال استفاده از ویندوز به صورت زنده هستید با کرمهای کامپیوتر همراه باشید.
یکی از ترفند های کدزنی که برنامهنویسان حرفهای معمولا از آن استفاده میکنند استفاده از or و and به جای شرط است. بله درست متوجه شدید، به جای شرط. این ترفند ممکن است باعث شود تا کد شما خوانا نباشد و حتی توصیه شده نیست ولی ترفند به شدت جذابیست که میتواند در خلاصه نویسی کد تاثیر زیادی داشته باشد. این روش در بسیاری زبان ها مانند C, JavaScript, Python و … کاربرد دارد. پس با ما همراه باشید تا این تکنیک زیبا و جذاب را یاد بگیرید.
کاملا اتفاقی متوجه شدم که ویندوز 10 به نام هایی مانند aux گیر میده و این گیر ربطی به پسوند فایل هم نداره؛ یعنی چه فایل aux.txt باشه و چه aux.png شما مجاز به استفاده از چنین نامی در ویندوز نیستید! کنجکاو شدم ببینم جریان چیه؟ پس تو اینترنت گشتم و جواب رو پیدا کردم و فهمیدم این مسئله خیلی قدیمی و تاریخی هست. به نوعی میراثی هست که دست به دست شده و الان به ویندوز ۱۰ رسیده!
مایکروسافت رسما اعلام کرده که نام های زیر در ویندوز ممنوع هستند: