Bilgisayar Bilimi için Ayrık Yapılar (Ayrık Matematik)

Ders hakkında soru ve önerilerinizi inanhoca@gmail.com adresine yollayabilirsiniz.


Ayrık Yapı Nedir?

“Yapı” matematikte sıkça kullanılan bir ifadedir. Esasen her şey bir küme ile başlar. Boş olmayan bir A kümesi elimizde bulunsun. Bu A kümesi üzerine bir işlem koyalım. Örneğin A kümesi tam sayılar, işlemimiz de toplama olabilir. A’nın elemanları bu işlemle birlikte bazı özel koşulları sağlar. Bu nedenle, bizim için kullanışlı olmaya başlar. İşte biz bu işlemle birlikte A’ya bir yapı deriz. Eğer özellikler cebirsel ile “cebirsel yapı”, topolojik ise “topolojik yapı”, geometrik ise “geometrik yapı” gibi genel tabirler kullanırız. Yapıların bazıları kesikli (sürekli olmayan) elemanlar içerir, örneğin “cebirsel yapılar”. Bazıları ise sürekli elemanlar içerebilir, “topolojik yapılar ” gibi. Buradaki kesikli ve sürekli tabiri kaba tabirler olup derinlemesine ele alındığında başkaca anlamlar çıkarılabilir. Ayrık yapılar, bilgisayar biliminde özel bir yere sahiptir. Teknik olarak düşünürsek bilgisayarın sürekli bir ifadeyi işleyebilmesi pek mümkün değildir. Bilgisayar, haliyle dijitalleştiren bir mekanizmadır. Dolayısıyla, ham malzememiz ayrık nesnelerdir. İşte ayrık yapılar dersinin maksadı da bu malzemeyi işlemeyi öğrenmek. Yani, bu ders bilgisayar biliminin teorisi için bir başlangıçtır dersek yanlış olmaz…


Dersin Amacı Nedir?

Bilgisayar bilimi için ayrık yapılar dersi önemli bir temel konu olan ayrık matematiği ve ayrık yapıları içeren bir derstir. Ayrık matematik, sürekli matematiğin aksine, ayrık nesnelerin (örneğin tam sayılar, grafikler, mantıksal ifadeler) analizine ve işlenmesine odaklanır. Bu nesneler sürekli bir aralıkta değil, ayrık ve belirli değerlerle temsil edilir. Ayrık yapılar dersi, bilgisayar biliminin temel taşlarından biridir ve aşağıdaki konuları içerebilir:

  • Mantık: Mantık, önermelerin ve doğru veya yanlış ifadelerin incelenmesiyle ilgilenir. Bu bölüm, özellikle bilgisayar programlamasında koşullu ifadelerin ve kontrol yapılarının anlaşılmasında önemlidir. Mantık ile ilgili şu ifade oldukça önemlidir;
"Logic is calculus of computer science."
  • Kümeler: Kümelerin temel teorisi, bilgisayar bilimi ve veri yapılarındaki birçok konunun temelini oluşturur. Kümelerin birleşimleri, kesişimleri ve farkları gibi işlemler incelenir.
  • Bağıntı ve Fonksiyonlar: Fonksiyonlar, matematiksel ve bilgisayar bilimindeki temel kavramlardan biridir. Fonksiyonların tanımlanması, sınıflandırılması ve analizi konuları işlenir.
  • Graflar ve Ağaçlar: Graflar, bilgisayar biliminin ve algoritmaların önemli bir bileşenidir. İlişki ve bağlantıların görsel olarak temsil edilmesine yardımcı olurlar. Ayrık yapılar dersinde grafpların temelleri ve çeşitli grafik algoritmaları öğretilebilir.
  • Sayılar Teorisi: Sayılar teorisi, matematiksel algoritmaların ve şifreleme tekniklerinin temelini oluşturan bir alandır. Asal sayılar, bölenler, modüler aritmetik gibi konular bu bölümde işlenebilir.
  • Kombinatorik: Kombinatorik, nesnelerin sıralanması, kombinasyonları ve permütasyonları gibi konuları içerir. Bu konular, algoritmaların tasarımında ve analizinde önemlidir.

Bilgisayar Mühendisliği ve bağlantılı bölümler için ayrık yapılar dersi oldukça önemlidir. Algoritmaların mantığını anlayabilmek, veri yapılarını anlamak, boole cebiri, sayısal tasarım ve otomata gibi konular için gerekli alt yapıyı oluşturmak adına oldukça mühimdir. Bu nedenle, öğrencilerin bu dersi geçip geçmeme kaygısına düşmeden çalışması ve ders için mutlaka bir kaynak kitap alarak takip etmesi yararlı olacaktır. Bu ders, öğrencilere bilgisayar biliminin daha gelişmiş konularına, özellikle algoritma analizi, veri tabanları, yapay zeka ve kriptografi gibi konulara hazırlık sağlar. Ayrıca, problem çözme yeteneklerini geliştirir ve öğrencilere matematiksel düşünme becerileri kazandırır.


Ne Kadar Matematik Bilmeliyim?

Ayrık yapılar dersi, bir matematik dersi olsa da klasik matematik derslerinden oldukça farklıdır. Mühendislik bölümlerinde okutulan diğer derslerin aksine bu derste amaç hesaplamayı öğrenmek veya uygulamak değildir. Belki de bir insanın yapabilecekleri ile bir bilgisayarın yapabilecekleri arasındaki en keskin ayrımı yapabileceğimiz araç bu dersteki deneyimlerimizdir. Yukarıda da izah ettiğim gibi bu derste temel amaç matematik düşünmeyi öğrenmekdir. Zira bu ders içerisindeki tüm konular lisede veya sonrasındaki matematik derslerinde ve bölümde alacağınız diğer derslerde bir şekilde ele alınacak. Bu nedenle ders içeriğindeki konulara aşina olacaksınız. Ancak bu derste temel mesele zihnimizi zorlamak ve matematiğin büyüleyici dünyasına dalmaktır. Hiç matematik bilmeden dahi bu dersi dinleyebilir ve kavrayabilirsiniz. Ancak salt hesaplama gözüyle bakarsanız dersten faydalanamazsınız. Sorunun cevabı için özet verecek olursam, bu ders için ne kadar matematik bildiğin değil, ne kadar matematik anladığın önemlidir.


Bu Dersin Bana Ne Faydası Olacak?

İşte en kritik soru belki de budur. Aldığınız her derste bu soruyu sormalısınız. Ancak bu soruyu o dersin gerekliliği üzerinden değil, dersten edinecekleriniz üzerinden sormalısınız. Müfredatınıza eklenen dersler uluslarası olarak kabul görmüş ve hemen hemen her benzer bölümde yer alan derslerdir. Dolayısıyla, bu aşamada derslerin gerekliliğini sorgulamak sizi yanlış yönlendirebilir. Ayrık yapılar dersinin en önemli yararı matematik muhakeme yeteneğinizi geliştirmesidir. Algoritmik düşünme becerinizi artırır. Karşılaştığınız sorunların çözümlerine dair yaklaşım stratejilerinizi çeşitlendirir ve bunların arasında optimizasyonel seçimler yapmanıza olanak tanır. Bilgisayar bilimleri alanındaki teorik literatürü okumanızı kolaylaştırır ve bu literatüre katkı sunmanıza yardımcı olur. Kitapları okumanızı kolaylaştırır. Dersin faydalarını sıralamakla bitiremeyiz, daha fazlasını alanda yol aldıkça göreceksiniz.


Dersi Nasıl İşleyeceğiz?

Buraya kadar izah ettiğim üzere teorik bir ders. Dolayısıyla laboratuvar uygulaması yok. Ancak dersimizi Python dili ile desteklemeye çalışacağız. Sizler de dersi takip ederken algoritmaların yazılım çözümlemelerini yapabilirsiniz. Project Euler sayfasındaki problemlerle uğraşmanızı tavsiye ederim.


Derste Ne İşleyeceğiz?

Ders içeriği okullara göre farklılık gösterse de temel olarak aynı başlıkları ele alıyoruz. Biz dersimizi aşağıdaki plana göre takip ediyoruz.

NOKONUAçıklama
1.GİRİŞİlk hafta dersimiz hakkında genel bilgiler vererek tanışıyoruz.
2.MANTIKBilgisayar bilimi açısından son derece önemli olan mantık konusunu detayları ile ele alıyoruz.
3.MATEMATİĞİN TEMEL KAVRAMLARI VE İSPAT YÖNTEMLERİ Matematik mantık ve kullanım becerimizi artırmak için matematiğin temekl kavramlarını tanımalıyız. Burada teoremler yazıp ispatlayacağız. Dersimizin en önemli bölümlerindendir.
4. KÜMELER TEORİSİNE GİRİŞ Küme matematikteki, gerçekten, “en” temel kavramlardın başında gelir. İlk okuldan beri kümeleri işliyoruz. Ancak burada çok daha fazlasını yapacağız. Kümeler teorisinin ana kavramlarını ele alacak, ispatlar yapacak ve kartezyen çarpımdan bahsedeceğiz.
5.BAĞINTI, FONKSİYON VE DİZİLERBu bölümde özellikle denklik bağıntısı üzerinde duracağız.
6. BAĞINTI, FONKSİYON VE DİZİLER-2Foknsiyonlardan söz edeceğiz ve dizileri ele alacağız. Bilgisayar bilimi açısından önemli olan alfabe, string gibi kavramları teorik olarak iredeleyeceğiz.
7.CEBİRSEL YAPILAR İkili işlemden söz edeceğiz. Dört işlemden başlayıp ilginç işlemler ele alacağız. Ayrık yapıları en iyi temsil eden, grup, halka, cisim gibi kavramları iredeleyeceğiz.
8.SAYILAR TEORİSİNE GİRİŞSayıları daha yakından tanıyacağız. Bölünebilme kuralları, modüler aritmetik, asal sayılar ve daha bir çok başlığı inceleyeceğiz
9.KOMBİNATORİĞE GİRİŞ Sonlu matematik, permütasyon ve kombinasyon gibi konuları içerir. Genel olarak kombinatorik dediğimiz bu alandan ilginç problemler ve yaklaşımlardan söz edeceğiz. Güvercin yuvası ilkesinden de bu bölümde bahsedeceğiz.
10.ALGOTİRMA ANALİZİNE GİRİŞ Ayrık yapılar dersinin bize faydasını en net göreceğimiz yere geldik. Bir algoritma nasıl “en iyilenir”? Bu teorik olarak nasıl izah edilir? Big O notasyonundan bahsedecek ve onu teroik olarak ireledeikten sonra bazı önemli algoritmaların zaman karmaşıklıkların bakacağız. Bu başlık ayrı bir ders olarak okutuluyor. Biz burada genel detaylar vereceğiz ve daha ziyade teorik bakacağız.
11.GRAF TEORİYE GİRİŞGraf teori son derece güçlü bir alan. Matematikçiler başta olmak üzere farklı disiplinlerden çok sayıda bilim insanı bu alanda çalışıyor. Bilgisayar biliminde de graflar temel taşlardan biri. Burada, graf tanımızı verece ve bazı graf örneklerini inceleyeceğiz.
12.AĞAÇLARAğaçlar özellikle veri yapılarında incelenen bir başlık. Biz daha teorik olarak ele alacağız.
13.VERİ YAPILARINA GİRİŞ Veri yapıları da esasen ayrık yapılarak örnek teşkil edebilir. Bu bölümde veri yapılarının inşa sürecinin teorik yaklaşımını ele alacağız.
14.HESAPLAMANIN TEORİSİNE GİRİŞ Hesaplama teorisi bilgisayarların sınırlarını ve kabiliyetini tespit etmeye yönelik teoriler geliştirir. Bu bölümde hesaplama teorisinin temel kavramlarını derste konuştuğumuz diğer konuların paralelinde ele alacağız.

YARARLANILACAK KAYNAKLAR

Dersimizde kendi notlarımızı takip ediyoruz. Ancak aşağıdaki kitaplar dersimizi için uygundur. Alınması tavsiye olunur.

Nobel akademi tarafından Türkçesi basılan bu kitap dersin maksadını en iyi anlatan kaynaklardan biri. Konuları ele alış biçimi çok iyi. Mutlaka kütüphanenize ekleyin.

Nobel akademi tarafından Türkçesi basılan bu kitap da oldukça güzel hazırlanmış. Çok güçlü içeriğe sahip. Kütüphanede olmalı ve takip edilmeli.

Çok detaylı konu anlatımı ve bol sayıda örnek içeren bu kitap her bilgisayarcının kütüphanesinde olmalıdır.

Elimde kitabın birinci baskısı mevcut. İkinci baskıyı incelemedim. İçerik olarak güçlü değil. Ama her başlık ele alınmış. Tavsiye olunur.

Oldukça iddialı hazırlanmış bir eser. İlk baskısı elimde mevcut. Soldaki baskı numarası 14. Genişletme yapılmış olabilir. İçerik olarak oldukça güçlü ama anlatım metodunu doyurucu bulmadım. Yine de faydalı olacağı kanaatindeyim.