Algoritmalar ve Veri Yapıları
Algoritma, verilmiş bir amacı gerçekleştirmek
için, bir ilk durumdan başlayıp bir son duruma eriştirmeyi
sağlayacak,
sağlıklı olarak betimlenmiş sonlu bir komut
kümesidir. Algoritmalar bilgisayar programları olarak
gerçekleştirilebilir.
Algoritma kavramını kolay anlatmak için genellikle
gündelik hayat içindeki amaçlar
için bulduğumuz, uyguladığımız algoritmaları verilir.
Örneğin annelerin yemek tarifleri, şehrin bir yerinden bir
başka yerine gitmek için izlenecek usul, 3x2+5x-48=0
denkleminin
köklerinin nasıl bulunacağı hep algoritma kavramına
örnektir. Bu örneklerden de kolayca algılanacağı
üzere bir amaca erişmenin yolu
(yani algoritması) farklı başarımlarda olabilir. Aynı amaca
yönelik bir algoritma bir diğerinden daha fazla zaman veya kaynak
tüketiyor olabilir. Bilgisayar Bilimlerinin Algoritma dalı bu
doğrultuda uğraş verir. Amaçlara erişmek
için algoritmalar tasarlar ve başarımlarını analiz eder.
Geliştirilmiş olanları iyileştirmeye çalışır.
Veri Yapıları, verinin
kolay erişilebilecek ve işlenebilecek bir biçimde nerede ve
nasıl tutulacağının bilimidir. Her ne kadar 'nerede' sorusunun yanıtı
bilgisayar donanımı ile doğrudan ilintili gibi görünse bile
gerçekte bunun çok ötesindedir. Bir ansiklopedinin
bilgiyi tutuş biçimi (alfabetik sıralı, harf başlarının
sayfalarının dizinden bulunabildiği yapı) bile bu disiplinin ilgi
alanındadır. Örneğin baktığınız sayfada aradığınız
sözcüğü her bulamamanın
bir bedeli olsa idi, acaba ansiklopedilerimizi farklı düzenler
miydik? Ya her iki günde bir ansiklopedi veya
sözlükteki bazı tanımlar değişse, yeni sözcükler
eklense durum ne olurdu? Bu ve buna benzer binlerce sorunun verimli
çözümlerinin bulunması bu dalın ilgisindedir.
Programlama Dilleri
Bilgisayara yaptırılacak komutları belirtmeye yönelik standartlaştırılmış ifade yöntemlerine Programlama Dilleri
diyoruz. Bunlar şüphesiz insan dillerinden çok daha kısıtlı
bir sözcük ve söz dizim yapısına sahiptirler ve katı bir
kesinlik içerirler. Bu özellikleri bakımından
matematiğin yazım diline benzeştiklerini söyleyebiliriz. Farklı
amaçlar için farklı bilgisayar dilleri geliştirilmiştir.
Programlama dilleri antolojisi binlerce dil içermektedir. Ancak
bunların çok büyük kısmı özelleşmiş, dar
kullanımlı ve/veya deneysel dillerdir. Genel geçerliği olan dil
sayısı 10 dolaylarındadır. Bilgisayar dilleri 20 yi aşkın
özelliğe göre sınıflara ayrılabilir. Bir dil yalnızca tek bir
sınıfa ait olmak durumunda değildir. [Örneğin
Profesyonel olarak yaygın bir kullanıma sahip C++ dili buyurgan
(imperative), nesnelliğe yönelik (object-oriented), yordamsal
(procedural) bir dildir]
Bu çeşitlilik, farklı (ve bazen çelişen) programcı
beklentilerinden, profesyonellerin programlama dünyasına bakış
açılarındaki (paradigma) farklılıklardan kaynaklanmaktadır.
Gündelik yaşantımızda nasıl her duruma uygun giysi; her ortamda
kullanabileceğiniz kağıt/kalem; her türlü
bilimsel/teknolojik/mimari çizim için kullanılacak ortak
bir çizim usulü yok ise (ve olması da aslında mantıksız
ise) her amaca hizmet eden süper bir bilgisayar dili de yoktur
(olması da anlamsızdır).
Bilgisayar Biliminin programlama dilleri ile uğraşılan alt alanında
programlama dillerinin sınıfları, sınıflara yol açan programlama
paradigmaları, farklı (ve bazen çelişen) programcı
beklentilerinin nasıl dillerle giderilebileceği irdelenmektedir.
Dillerin gerek söz dizimsel gerek anlamsal (semantik)
özelliklerini betimlemeye (denotasyon) yarayan ve bu betimleme
üzerinden dilin çeşitli özelliklerini ispat eden
öğreti de bu daldaki uğraşlar arasında yer alır.
Mimari
Veri işlemeye uygun yapıların tasarımıdır. Adının da
çağrıştırdığı üzere gereksinimlerden hareket ederek,
verilmiş bir bütçe içinde ortam koşullarını da
göz önüne alarak, tıpkı bir binanın tasarlanması gibi,
bilgisayarın tasarlanması bu alt alanın uğraşıdır. Bu bağlamda
bilgisayarın elektronik bir yapı olarak tasarlanması, binaların taş
olarak tasarlanması ile benzerlik gösterir. Gelişen veya evrilen
teknoloji ile nasıl taş tuğlalar yerlerini plastik veya cam elemanlara
bırakabilecekse değişen teknoloji ile bilgisayarlar belki elektrik
akımları ile değil de, ışık ile çalışacak veya bambaşka bir
fiziksel olguya dayalı olacaktır. Tüm bu değişimlerin
geliştirilmesi/izlenmesi, var olan teknolojiler
çerçevesinde gereksinimlere cevap verecek tasarımların
yapılması Bilgisayar Mimarisi alanının uğraşıdır.
Günümüzde elektronik teknolojisinin sağladığı
çözüm artık teknolojik ve fiziksel limitlere
yaklaştığından ve daha yüksek başarımlı (performanslı) berime
gereksinimin artarak sürmesinden ötürü yeni
açılımlar aranmakta ve gerçekleştirilmektedir. Bir
yandan günümüz bilgisayarlarının temel mimarisi olan
Van-Neumann mimarisine alternatif mimariler geliştirilmeye
çalışılmakta diğer yandan ise birden çok (aslında pek
çok) bilgisayar merkezi işlem biriminin birlikte, koşut olarak,
çalışacakları mimariler geliştirilmektedir.
Mimarinin ne denli farklılıklar yaratabildiğine bir örnek olarak
insan beynine kıyaslandığında günümüz bilgisayarlarının
durumuna bir bakalım:
|
Ortalama PC |
İnsan |
Saniyede işlem |
109 |
1016 |
Bellek (Byte) |
109 |
1015 |
Oysa insan beyninin yapı taşı olan nöron hücresi saniyede ancak 105 hesap yaparken bir PC nin merkezi işlem birimi 109
hesap yapabilmektedir. Fark, mimari yapıdadır. PC de
güçlü tek bir işlem yapıcı varken İnsanda
güçsüz ancak koşut çalışan 1011
işlem yapıcı (nöron hücresi) bulunmaktadır. PC de
merkezileşmiş bir bellek birimi varken, insanda bellek her nörona
dağılmış durumdadır.
Bilimsel Hesaplama
Bilgisayar Biliminin bu dalı diğer
bilim ve mühendislik dallarına ait problemlerinin matematiksel
modellemelerinin yapılması ve bu modeller aracılığı ile bu problemlerin
bilgisayarda çözülmesi ile uğraşır. Bu uğraşa tipik örnekler vermek
gerekirse:
- Olguların yeniden kurgulanması ve bu suretle anlaşılmaya çalışılması (örneğin deprem, tusunami ve diğer doğal felaketler gibi)
- Bilinen senaryoların benzeşiminin yapılması bunların verimlileştirilmesi (örneğin teknik veya üretim süreçleri gibi)
- Geleceğe veya daha gözlenememiş durumlara ilişkin çıkarımların
yapılması (örneğin hava tahminleri, atom içi parçacıkların davranışları
gibi)
Bu dal çoğunlukla nümerik
hesaplamalara yönelik yöntemler kullanır ve geliştirir. Ancak sembolik
hesap yöntemleri de bu alanda kullanılan (ancak maliyeti yüksek)
yöntemlerdir. Bilimsel hesaplama disiplini, hesapların yeğinliği ve
zorluğundan ötürü yüksek başarımlı (high performance) berim mimarileri
ve yöntemleri ile yakından ilgilenir.
İşletim Sistemleri
İşletim sistemi bir bilgisayar
sisteminin tüm donanımını erişilebilir ve kullanılabilir kılan,
kullanıcının sistemden taleplerini yerine getiren büyük boyutlu, kalıcı
bir yazılımdır. Günümüz bilgisayarlarında bir anda birden fazla iş
yapılmaktadır. Bu işler çalışan programlardır. Gerçekte bir
bilgisayarda bu iş sayısı ile kıyaslanmayacak kadar az sayıda
(genellikle bir tane) merkezi işlem birimi (processor) vardır. Dolayısı
ile bir mekanizma ile işlerin çok hızlı bir biçimde
dönüşümlü olarak ve parça parça merkezi işlem birimine yaptırılması
gerekmektedir. Bu çok hızlı iş değiştirme kullanıcı
tarafından algılanmayacaktır. Bu olguya zaman paylaşımı (time sharing)
denir. İşletim sistemlerinin önemi bir işlevi bu zaman bölüşümünün
yönetimini yapmaktır. Çağdaş bilgisayar sistemlerinde, zamanın çeşitli
işler arasında paylaşıldığı gibi, bellek kullanımı da işler
arasında paylaşılmaktadır. İşletim sisteminin önemli bir
görevi de bu paylaşımın yönetimidir. İşletim sisteminin diğer önemli
bir görevi çalışmakta olan işlerin programcı hatalarından kaynaklı bazı
yanlış eylemlerde bulunmamasını sağlamak böyle bir olay durumunda
müdahale edip zararı en aza indirmektir. Şüphesiz işletme sistemi
prgramların amaçlarını anlayıp amaca doğru ilerlenilip ilerlenmediğini
kontrol edemeyecektir. Ancak bir program kendisine tahsis edilmemiş bir
bellek alanına erişmek isterse, hakkı olmayan bir donanımı veya yazılım
birimini kullanmak isterse buna izin vermeyecektir. İşletim sistemi tüm
donanım birimleri ve dış birimler ile olan iletişimden de sorumludur.
Kullanıcı ile bilgisayar sisteminin iletişmini sağlayan 'arayüz' de
yine işletim sisteminin bir parçasıdır. Hemen hemen tüm PC
kullanıcılarının aşina olduğu Linux, Unix, Windows ve MacOS, işletim sistemlerinin çok tanınan dört tanesidir.
Bu denli ağır işlevleri olan devasa yazılımların tasarımları pek çok
yeni kavram ve yöntem gerektirmektedir. Bilgisayar biliminin
işletim sistemleri ile ilgilenen dalı bu kavram ve yöntemlerin
geliştirilmesi, başarımlarının analiz edilmesi ile ilgilenir.
Bilgi ve Veri Yönetimi
Çağımızın gereği olarak hemen her
türden bilgi ve veri temin edilmek, düzenlenmek ve depolanmak
durumundadır. Ayrıca bilgilerin pek çoğu da insanlara özgü kayıt
usulleri ile oluşturulmuştur. Farklı yüzü aşkın dilde döküman, kitap,
çizim, el yazmasına ek olarak görsel ve sessel kayıtlar da hep bilgidir
ve organize biçimde saklanması, gerektiğinde bulunup sunulması
durumundadır. Bilgi ve veri yönetimi disiplini büyük boyutta bilgi ve
verilerin bilgisayarlar üzerinde sağlıklı saklanmasının bilimini
ve mühendisliğini yapar. Pek çok etkinliğin WEB üzerinden
gerçekleştirilmesi ve WEB üzerindeki bilginin aslında hiç bir
standardının bulunmamasından ötürü Bilgi yönetimi son on yılda
çok büyük bir önem kazandı. WEB kullanıcılarının pek aşina oldukları
arama motorlarının (google, yahoo, altavista vb) saniyede on
binlerce sorguya cevap verebilmeleri hep bu alandaki gelişmelerle
ilintilidir.
Önceleri veritabanı, daha sonraları veri tabanı yönetim sistemi adı ile
bilinen alan, belirttiğimiz üzere, son yıllarda genişlemiş ve her türlü
bilginin bilgisayarlarda düzenli bir biçimde tutulması ve bundan
önemlisi zekice sorgulanabilmesi konuları ile yoğun biçimde
ilgilenir olmuştur. Bu bağlamda, güncel araştırma konularına iki
örnek veri madenciliği (data mining) ve Çokluortam verilerinin sorgulanması konularıdır.
Veri madenciliği eldeki büyük boyutlu verilerden harekt edip bunların
arasındaki ilişkiyi, sebep sonuç bağlantılarını inceleme çabasıdır.
Örneğin bir büyük alışveriş merkezinin yalnız kasa kayıt bilgilerinden
(kredi kartı bilgisi+satılan mal bilgisi) hareket, edip hangi
gelir/yaş/cinsiyet grubunun hangi günler neler aldığı, hangi ürün
markalarını tercih ettiği, bir sonraki ziyaretlerindeki alış-veriş
profilinin bir önceki ile ilintisi, reklamların/indirimlerin etkisi
gibi tecimsel yaşam bakımından yaşamsal önemde bilgileri bulup
çıkarmak, bunları istatistiksel kural dizgeleri haline getirmek veri
madenciliğinin yapabildiklerindendir.
Çokluortam verilerinin sorgulanması bu dalın en ilginç, güncel
araştırma konularındandır. Bir örnekle açıklamaya çalışalım, diyelim ki
elinizde basın/yayın organlarında kullanılmış fotoğraf, film, ses ve
yazılardan oluşmuş ve bilgisayara aktarılmış son 20 yılın arşiv
bilgileri var. Ancak görüntü ve seslerin bilgisayar kayıtlarında
içerikleri ile ilgili bir bilgi mevcut değil. Şimdi gereksinime dayalı olarak, sisteme vereceğimiz:
- 2001-2004
yılları arasında, devrin İngiliz başbakanının bir ABD başkanı veya
Dışişleri bakanı ile birlikte gözüktüğü, açıkhava toplantısı
kayıtlarının hepsini bul.
komutu ile bu tür bilgilerin hepsinin aranıp bulunması işte bu araştırma dalının amaçladığıdır.
Grafik, Görüntüleme ve Çokluortam
Bu alan belki PC kullanıcılarının
(özellikle genç olanlarının) en çok tanış oldukları alandır.
Popülerliği hep var olan 'Bilgisayar Oyunları' görsel arayüzlerinde bu
disiplinin bilimsel ürünlerini çok yoğun biçimde kullanırlar. Bu
alanda bilgisayarlar aracılığı ile yapay görüntülerin nasıl
oluşturulacağı ve bunların gerçek dünyadan kaydedilmiş görüntü ve 3
boyutlu bilgiyle nasıl entegre edileceği ile uğraşılır. Bu alanın
temel ilgilerini şöyle sıralayabiliriz:
- Gerçel zamanda 3 Boyutlu görüntü oluşturma (Bilgisayar oyunlarındaki gibi)
- Bilgisayarla canladırma (animasyon), özel efektler (Çizgi filmlerin tümü; pek çok bilim-kurgu filmindeki gibi)
- Video yakalama ve oluşturma, sıkıştırma, ağ üzerinden yollama (streaming) (MPEG sıkıştırma, internet üzerinden TV vb. gibi)
- Görüntü işlemleme (editing) ve modelleme (CT, MR, Ulrasonografi gibi tıbbi görüntülemeler, Sonar, Radar görüntüleri)
Bu disiplin uygulamalı matematiğin pek çok dalından yararlanır. Ancak
matematik disiplini bu tür problemlerin çözümlerinin çerçevesinin
oluşturulmasında yardımcıdır. Bilgisayar bilimlerinin en önemli tasası
ve uğraşı bir işi hızlı yapabilmektir. Dolayısı ile matematik çerçevede
tanımlanmış soruna özellikle bilgisayar biliminin Algoritma ve Veri
yapıları öğretisi aracılığı ile hızlı çözümler bulunulur. Aslı uğraş buradadır.
Ağ-eksenel Bilişim
Bilgisayarın çeşitli fiziksel yöntemlerle birbirleri ile iletişmeleri ile ilgilenir. Bu iletişimin
- hızı
- verinin gizliliği
- iletişimin güvenliği
- Bir bağlantı ağı yapısı içinde yolunu bulması
bu alanın bilim adamlarının
tasasıdır. Bazen binlerce kilometre taşınan verinin istenmeyen
unusrlarca dinlense bile çözümlenememesi gerekmektedir. Bunun için veri
çoğunlukla şifrelenir. Şifrelemeyi ne kadar 'karmaşık' yaparsanız bunun
kodlanması da çözümlenmesi de zor olacaktır, ancak bu da zamn kaybıdır.
Bu alanın bilim adamları bu işin denge noktasında, hep daha güvenli
şifrelemeler oluşturumaya çalırlar. Şüphesiz tek tasa verinin
şifrelenmesine ilişkin değildir. Bir aktarımda milyarca 1 ve 0
bilgisinin aktarılması olağandır. Aktarma ortamındaki bir parazitten
ötürü veya aynı anda başka bir iletişimin bu iletiye karışmasından
ötürü verinin sağlıklı karşı tarafa aktarılamamış olması da olasılık
dahilindedir. Bunun anında fark edilmesi, onarılması, onarılamıyor ise,
bir usulle kaynaktan tekrar istenmesi hep bilimsel olarak çözülmesi
gereken sorunlardır. Ayrıca, günümüz bilgisayar iletişim yapıları bir
ağ biçimindedir. Bir noktadan bir noktaya bilgi iletmenin birden fazla
yolunun olması çok doğal ve sağlıklıdır. Hangi yolun seçileceği, yolun
o andaki bilgi trafiğinin yoğunluk durumuna göre ne yapılacağı, bir
yolun devreden çıkması durumunda alternatif yol seçimi usulleri bu
alanın uğraşlarındandır. Tahmin edileceği üzere İstatistik bilimi,
Enformasyon teorisi ile çok yakından ilgili yöntemler kullanılır.
Akıllı Sistemler
Yapay Zeka (Artificial Intelligence)
sistemleri olarak da bilinen bu konu Bilgisayar Biliminin içinde önemli
yer tutan dev bir konu başlığıdır. Konu o denli önemlidir ki bilim
adamları tanımı üzerine bile tam bir fikir birlikteliğinde değildirler.
Belki en genel kabul gören tanım aşağıdakidir:
- İnsan eylemlerinin zeki davranış gerektirenlerini yararlı bir biçimde yapacak bilgisayar yapılarının geliştirilmesi
Birkaç somut ilgi alanına örnek vermek gerekirse:
- Kaynak atması ve dağılımı gerektirecek kararların verilmesi (örneğin askeri, ticari, devinimsel)
- Belirli bir alandaki her türlü soruya yanıt oluşturulması
(sorunun sorulmasında kullanıcıya Doğal Dil düzeyinde serbestlik
tanınması)
- Konuşma tanıma
- İnsan diiler arasında tercüme
- Obje tanıma, yüz tanıma
- Dar bir uzmanlık alanında 'uzmanlık' (örneğin kan hastalıklarının teşhisi, motor onarımı, borsa alım/satımcılığı)
Yapay Zeka uğraşılarında, aslında felsefi denebilecek, iki farklı
görüşün egemen olduğunu söyleyebiliriz: Güçlü ve Zayıf Yapay
Zeka.Yukarıdaki tanım aslında Zayıf Yapay Zeka alanının tanımıdır.
Zayıflık, yapay zekası olan bilgisayarın tümüyle zeki, otonom bir
varlık olarak değil de, ancak fevkalade dar bir alanda zeka gösteren
bir yapı olarak gerçekleşebileceği anlamındadır. Bu, ne yazık ki,
şu anki bilgisayar mimarisi ve bilgi birikimimiz bakımından doğrudur.
Güçlü yapay zeka şu anki imkan ve yetilerimizle daha onlarca yıl ufukta
bile gözükmeyecektir.
Yapay Zeka uğraşının alt alanlarını belirtecek olursak:
- Durum Uzayı Aramaları (State space search)
- Otomotik Plan Oluşturma (Automated planning)
- Kombinatorik Arama (Combinatorial search)
- Uzman Sistemler (Expert systems)
- Doğal Dil İşlemleme (Natural Language Processing)
- Bilginin nasıl betimleneceği (Knowledge representation)
- Bilgi-tabanlı sistemler (Knowledge-based systems)
- Nitel nedenlendirme (Qualitative reasoning)
- Nöron Ağları (Neural network)
- Yapay Yaşam (Artificial life)
- Dağıtık Yapay Zeka (Distributed artificial intelligence)
- Evrimsel Hesap (Evolutıonary computing)
- Sürü Zekası (Swarm Intelligence)
- Yapay Varlık (Artificial Being)
- Özdavranışsal Yapay Zeka (Emergent AI)
- Bayezian Ağlar (Bayesian networks)
- Makina Öğrenmesi (Machine learning)
- Örüntü Tanıma (Pattern Recognition)
- Bulanık Mantık (Fuzzy Logic)
- Bulanık Elektronik (Fuzzy electronics)