Forum: Diğer Konular RSS
C Vector ve D Array
Avatar
zekeriyadurmus #1
Kullanıcı başlığı: Talha Zekeriya Durmuş
Üye Eki 2012 tarihinden beri · 701 mesaj · Konum: Samsun/Türkiye
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: C Vector ve D Array
Bu ikisi arasında ne fark var tam olarak? D de bir vektöre ihtiyaç var mı ?

Zekeriya
Bilgi meraktan gelir...
acehreli (Moderatör) #2
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Herhalde C değil de C++ ve Vector değil de vector diyorsun... :)

Aradaki en önemli farklar:

1) Eleman sahipliği konusu: std::vector'ün elemanlarının bir anda tek sahibi olabilir. D dilimlerinin elemanları ise bir anda birden fazla dilim tarafından sahiplenilmiş olabilir.

2) Yukarıdaki maddeye bağlı olarak, D'de sonuncu sahip sonlanınca asıl dizinin elemanları da çöp toplayıcı tarafından sonlandırılır.

3) C++'ta erişici (iterator) arayüzü var, D'de aralık (range).

Şimdi farkediyorum: Sanırım "D Array" deyince de std.container.Array'i kasdetmişsin. Bir önce vector yerine Vector görünce array yerine Array yazmışsındır diye düşünmüştüm. :)

std.container'deki topluluklar ilginç bir sahiplenme ve erişim mantığı üzerine kurulular; alışık olmayanlara garip gelebiliyor. Ben forum sorularındaki karşılaştığım kadarıyla biliyorum; deneyimim yok.

Ali
Avatar
zekeriyadurmus #3
Kullanıcı başlığı: Talha Zekeriya Durmuş
Üye Eki 2012 tarihinden beri · 701 mesaj · Konum: Samsun/Türkiye
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Mazur görün hocam :) İki dile de hakim değilim sadece ara kod incelediğim oluyor oturup kod yazmışlığım yok henüz :)

Şimdi Vector ile vector diye 2 farklı şey mi var yoksa struct ismi Vector olduğu için mi öyle söylediniz? :)

D array derken de d nin dilimlerini kast ettim phobos kütüphanesindeki olanı değil :) Bu karmaşayı çözmek için neye ne isim vereceğiz kafam karıştı :D

Assocative Array için de böyle bir sıkıntı var. D de kullanılan yöntem hash map ama başka dillerde hash table gibi farklı sistemler de var bir ara sadece isim farklılığı sanmıştım.

Zekeriya
Bilgi meraktan gelir...
Avatar
zekeriyadurmus #4
Kullanıcı başlığı: Talha Zekeriya Durmuş
Üye Eki 2012 tarihinden beri · 701 mesaj · Konum: Samsun/Türkiye
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Bir de c header to d header diye bir olay var windows için acaba bunun linux sürümü var mı?

DMC diye geçiyordu galiba emin değilim.

Diğer bilgisayara windows kuracağım mecbur çünkü bazı toollara linuxda erişemiyorum.

Zekeriya
Bilgi meraktan gelir...
acehreli (Moderatör) #5
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj #3
zekeriyadurmus:
Şimdi Vector ile vector diye 2 farklı şey mi var

Küçük/Büyük harf ayrımı önemli olduğu için sen Vector yazınca özellikle öyle sandım. Hele tür isimleri de büyük harfle başlatılınca öyle bir tür diye düşündüm. Normalde vector veya std::vector yazılıyor. :)

d nin dilimlerini kast ettim

O zaman yukarıdaki farklar geçerli. :)

Bu karmaşayı çözmek için neye ne isim vereceğiz kafam karıştı :D

array: dizi

slice: dilim

:)

Assocative Array için de böyle bir sıkıntı var. D de kullanılan yöntem hash map ama başka dillerde hash table gibi farklı sistemler de var bir ara sadece isim farklılığı sanmıştım.

Ben hâlâ sadece isim farklılığı diye biliyorum. :)

Ali
Mengu (Moderatör) #6
Kullanıcı başlığı: NONSERVIAM
Üye Tem 2009 tarihinden beri · 347 mesaj · Konum: Dersaadet
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj #3
zekeriyadurmus on 2014-02-16, 08:49:
Mazur görün hocam :) İki dile de hakim değilim sadece ara kod incelediğim oluyor oturup kod yazmışlığım yok henüz :)

Şimdi Vector ile vector diye 2 farklı şey mi var yoksa struct ismi Vector olduğu için mi öyle söylediniz? :)

D array derken de d nin dilimlerini kast ettim phobos kütüphanesindeki olanı değil :) Bu karmaşayı çözmek için neye ne isim vereceğiz kafam karıştı :D

Assocative Array için de böyle bir sıkıntı var. D de kullanılan yöntem hash map ama başka dillerde hash table gibi farklı sistemler de var bir ara sadece isim farklılığı sanmıştım.

Zekeriya

associative array == hash map (java) == dictionary (python) == hash (ruby)
http://www.mengu.net - some kind of monster
Avatar
zekeriyadurmus #7
Kullanıcı başlığı: Talha Zekeriya Durmuş
Üye Eki 2012 tarihinden beri · 701 mesaj · Konum: Samsun/Türkiye
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Mengu hocam tam olarak öyle değil :) Bir ara bakınmıştım http://blog.manishchhabra.com/2012/08/the-5-main-differenc…

Amaçları aynı ama kullanılan algoritma dolayısıyla perforamns farklı. O yüzden doğru isim kullanmak uygun olacaktır diye düşünüyorum. Ayrıca D dili assocative array diye bahsetse de internet sitesinde http://dlang.org/hash-map.html burada linkte hash-map diye geçiyor. Sanırsam (pek emin değilim) önceleri AA olmadığı için veya ilk uygulamalarında kütüphane şeklinde yapmışlardı belki de yanılıyorum daha öncede vardı ama bunu bir kütüphane olarak sonradan d de yazmışlar.

Ayrıca eklemek isterim: D dilinde kullanılan AA key sırasına göre yani
["a": 1, "b": 2, "c": 3]
şeklinde göstermiyor bunu bu şekilde saklayan gösteren algoritmalar da mevcut diye biliyorum. Görünüş itibariyle aynılar ama aslında gerçekten aralarında fark var.

Zekeriya
Bilgi meraktan gelir...
acehreli (Moderatör) #8
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
zekeriyadurmus:
Bir ara bakınmıştım http://blog.manishchhabra.com/2012/08/the-5-main-differences-betwen-hashmap-and-hashtable/

O yazı Java'daki iki topluluk arasındaki farkı çoklu işletim dizileri açısından anlatıyor. Yoksa hem o yazıdaki hem de burada konuştuğumuz bütün topluluklar "hash table"dır.

kullanılan algoritma

Algoritma aynı:

  • Nesneyi ifade eden bir tamsayı değer hesapla (hash value)

  • O değeri elimizdeki dizinin uzunluğu ile % işlecinden geçir ve index oluştur

  • Nesneyi dizinin o indeksteki bağlı listesinin sonuna ekle (Bağlı liste yerine açık adresleme (open addressing) denen yöntem de yaygındır)

dolayısıyla perforamns farklı

Kilit vs. nedeniyle olabilir. Yoksa büyük O karmaşıklığı açısından hash table işlemleri normalde hep O(1)'dir.

Ayrıca D dili assocative array diye bahsetse de internet sitesinde http://dlang.org/hash-map.html burada linkte hash-map diye geçiyor.

Çünkü aynı şey. :)

kütüphane olarak sonradan d de yazmışlar.

Eşleme tablolarının iç olanak olmasının gerekmediği ve kütüphane olarak da yazılabileceği bir gerçek ama hâlâ kütüphane olamıyor. Durum bayağı karışık ve kötü ama ben her ayrıntısını bilmiyorum. :)

Aklımdaki bir örnek şu: Eğer dilin kendi olanağı ise, aşağıdaki kod bugün çalışıyor:
void main()
{
    int[char][string] aa;
    aa["merhaba"]['a'] = 42;
}
Dikkat ederseniz, ne aa'nın "merhaba" diye bir elemanı ne de onun 'a' diye elemanı var. Ama derleniyor ve işliyor. Yanılmıyorsam bu olmayan elemana böyle ikili erişim kendi kodlarımızda sağlanamıyor. Emin değilim... Deneyin... :-p

D dilinde kullanılan AA key sırasına göre yani
["a": 1, "b": 2, "c": 3]
şeklinde göstermiyor

Hiçbir hash table öyle göstermez. (Bir kaç elemanlık örneklerdeki tesadüyler dışında.)

bunu bu şekilde saklayan gösteren algoritmalar da mevcut diye biliyorum

O algoritmalar ikili arama ağacı kullanırlar. Örneğin std::map öyledir ama onların elemana erişimleri O(log N) karmaşıklığındadır. Hash table sıralamayı takmadığı için O(1)'dir.

Görünüş itibariyle aynılar ama aslında gerçekten aralarında fark var.

Doğru ama şunların arasında fark yok: hash table, hash map, associative array, eşleme tablosu, vs. :)

Ali
Mengu (Moderatör) #9
Kullanıcı başlığı: NONSERVIAM
Üye Tem 2009 tarihinden beri · 347 mesaj · Konum: Dersaadet
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
acehreli on 2014-02-18, 11:07:
Eşleme tablolarının iç olanak olmasının gerekmediği ve kütüphane olarak da yazılabileceği bir gerçek ama hâlâ kütüphane olamıyor. Durum bayağı karışık ve kötü ama ben her ayrıntısını bilmiyorum. :)

Aklımdaki bir örnek şu: Eğer dilin kendi olanağı ise, aşağıdaki kod bugün çalışıyor:
void main()
{
    int[char][string] aa;
    aa["merhaba"]['a'] = 42;
}
Dikkat ederseniz, ne aa'nın "merhaba" diye bir elemanı ne de onun 'a' diye elemanı var. Ama derleniyor ve işliyor. Yanılmıyorsam bu olmayan elemana böyle ikili erişim kendi kodlarımızda sağlanamıyor. Emin değilim... Deneyin... :-p

Ali

yok, olmayan bir elemana [] syntaxi ile erisemiyoruz ama aa["merhaba"].get('boo') diye safe bir islem yapabiliriz.
http://www.mengu.net - some kind of monster
Doğrulama Kodu: VeriCode Lütfen resimde gördüğünüz doğrulama kodunu girin:
İfadeler: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Özel Karakterler:
Bağlı değilsiniz. · Şifremi unuttum · ÜYELİK
This board is powered by the Unclassified NewsBoard software, 20100516-dev, © 2003-10 by Yves Goergen
Şu an: 2017-11-18, 03:52:52 (UTC -08:00)