[]
Arama algoritması
Basit bir arama uygulaması yapacağım ama algoritmasını tam oturtamadım. İstediğim şey oluşturulan bir dizinin elemanları, mevut diziler içinden hangisinde daha çok yer alıyorsa, o mevcut dizi ilk sırada çıksın, bu sıralama da azalarak devam etsin.
biraz daha somutlaştırabilmek için şöyle anlatayım:
veritabanındaki mevcut diziler şöyle olsun:
a: 1,2,3,4,5,6,7,8,9
b: 2,4,6,8,10,12,14
c: 1,3,5,7,9,11
arama için oluşturulan örneklem: 1,2,3,4,5,16,18,20 olsun. Bu örneklemde gördüğünüz gibi mevcut dizilerde olmayan veriler de var.
Şimdi arama yaptığımızda a>c>b gibi bir sıralama vermeli. Çünkü a dizisinde 5, b dizisinde 2 ve c dizisinde 3 eşleşme var.
Bu kodlamayı yapabileceğim herhangi bir dilde (c ya da basic çok daha iyi olur) kod ya da kodlamaya bile gerek yok, algoritmayı anlatabilecek herhangi bir şeye ihtiyacım var. Desteklerinizi bekliyorum. Şimdiden teşekkür ederim.
biraz daha somutlaştırabilmek için şöyle anlatayım:
veritabanındaki mevcut diziler şöyle olsun:
a: 1,2,3,4,5,6,7,8,9
b: 2,4,6,8,10,12,14
c: 1,3,5,7,9,11
arama için oluşturulan örneklem: 1,2,3,4,5,16,18,20 olsun. Bu örneklemde gördüğünüz gibi mevcut dizilerde olmayan veriler de var.
Şimdi arama yaptığımızda a>c>b gibi bir sıralama vermeli. Çünkü a dizisinde 5, b dizisinde 2 ve c dizisinde 3 eşleşme var.
Bu kodlamayı yapabileceğim herhangi bir dilde (c ya da basic çok daha iyi olur) kod ya da kodlamaya bile gerek yok, algoritmayı anlatabilecek herhangi bir şeye ihtiyacım var. Desteklerinizi bekliyorum. Şimdiden teşekkür ederim.
Anladığım kadarıyla yapmak istediğin, senin verdiğin küme ile veritabanındaki kümelerin kesişimlerini alıp, bu kesişim kümelerini eleman sayısına göre büyükten küçüğe sıralamak.
Küme işlemlerine sahip bir kütüphane ile işini halledebilirsin gibime geliyor.
Küme işlemlerine sahip bir kütüphane ile işini halledebilirsin gibime geliyor.
- zamanin otesinden gelen edit (17.03.15 16:55:29 ~ 16:55:45)
aynen onu istiyorum, hangi kütüphane onu anlayamadım ama. tam olarak hakim değilim o konuya, if, for, while falan bu gibi fonksiyonlarla mı yapmalı yoksa çok daha basit kodları mı var böyle kütüphanelerde?
- himmet dayi (17.03.15 17:00:23)
Burda algoritma gelistirirken bazi önemli sorulara cevap bulmak gerekli.
1. veritabanindaki degerler sirali mi olacak
2. arama örneklemindeki degerler sirali mi olacak
3. verirabanindaki deger sayisinin mi cok miktarda yoksa örneklemdeki deger sayisinin mi cok miktarda olacagi daha olasi.
Bir de bunu ne icin yapmak istiyorsun o da önemli. Ödev icin yapiyorsan kütüphane kullanmadan önce hocaya danismak gerekli cünkü kendi algoritmani kullanmak yerine kütüphanenin algoritmasini kullanmis olursun. Eger is icin gerekliyse ve hizla gelistirmek istiyorsan mutklaka bunu yapan bir kütüphane vardir.
1. veritabanindaki degerler sirali mi olacak
2. arama örneklemindeki degerler sirali mi olacak
3. verirabanindaki deger sayisinin mi cok miktarda yoksa örneklemdeki deger sayisinin mi cok miktarda olacagi daha olasi.
Bir de bunu ne icin yapmak istiyorsun o da önemli. Ödev icin yapiyorsan kütüphane kullanmadan önce hocaya danismak gerekli cünkü kendi algoritmani kullanmak yerine kütüphanenin algoritmasini kullanmis olursun. Eger is icin gerekliyse ve hizla gelistirmek istiyorsan mutklaka bunu yapan bir kütüphane vardir.
- emrahday (17.03.15 17:23:43 ~ 17:30:27)
1. Sıralı olmayacak, değerler sayı da olmayabilir String olabilir ama bu kısmı kesin değil, her bir stringi sayıya atayıp sayı da saklayabilirim.
2. Aynı cevap bu diziler için de geçerli.
3. Bu durum da kesin değil. Veritabanında bir tane dizi olmadığı için ve dizilerdeki eleman sayıları da birbirinden farklı olacağı için eleman sayısı bakımından aranan dizi veritabanındaki dizilerin arasında bir yerde olabilir.
Ödev değil, örenci değilim. İş için yapıyorum. Eğer kütüphane kullanmam gerekecekse Apple Swift olmalı. Herhangi bir algoritma olacaksa hangi dil olduğu önemli değil. Ben onu bir şekilde swift'e uyarlarım.
2. Aynı cevap bu diziler için de geçerli.
3. Bu durum da kesin değil. Veritabanında bir tane dizi olmadığı için ve dizilerdeki eleman sayıları da birbirinden farklı olacağı için eleman sayısı bakımından aranan dizi veritabanındaki dizilerin arasında bir yerde olabilir.
Ödev değil, örenci değilim. İş için yapıyorum. Eğer kütüphane kullanmam gerekecekse Apple Swift olmalı. Herhangi bir algoritma olacaksa hangi dil olduğu önemli değil. Ben onu bir şekilde swift'e uyarlarım.
- himmet dayi (18.03.15 07:05:09)
şöyle bişi yaptım ben:
List<int> a = new List<int>() { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
List<int> b = new List<int>() { 2, 4, 6, 8, 10, 12, 14 };
List<int> c = new List<int>() { 1, 3, 5, 7, 9, 11 };
List<int> aranacak = new List<int>() { 1, 2, 3, 4, 5, 16, 18, 20 };
List<int> tutan = new List<int>() { 0, 0, 0 };
foreach (var aranan in aranacak)
{
foreach (var diziA in a)
{
if (aranan == diziA) tutan[0]++;
}
foreach (var diziB in b)
{
if (aranan == diziB) tutan[1]++;
}
foreach (var diziC in c)
{
if (aranan == diziC) tutan[2]++;
}
}
if (tutan[0] > tutan[1] && tutan[0] > tutan[2])
{
MessageBox.Show("A");
}
else if (tutan[0] > tutan[1] && tutan[0] < tutan[2])
{
MessageBox.Show("C");
}
else
{
MessageBox.Show("B");
}
foreach döngüsünü verilen int listesine göre yapmak istersen:
Dictionary<string, List<int>> anaDict = new Dictionary<string, List<int>>();
anaDict.Add("a", a);
anaDict.Add("b", b);
anaDict.Add("c", c);
gibi bir şey yaparsın, anaDict'in count'u kadar yapar ^.^
List<int> a = new List<int>() { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
List<int> b = new List<int>() { 2, 4, 6, 8, 10, 12, 14 };
List<int> c = new List<int>() { 1, 3, 5, 7, 9, 11 };
List<int> aranacak = new List<int>() { 1, 2, 3, 4, 5, 16, 18, 20 };
List<int> tutan = new List<int>() { 0, 0, 0 };
foreach (var aranan in aranacak)
{
foreach (var diziA in a)
{
if (aranan == diziA) tutan[0]++;
}
foreach (var diziB in b)
{
if (aranan == diziB) tutan[1]++;
}
foreach (var diziC in c)
{
if (aranan == diziC) tutan[2]++;
}
}
if (tutan[0] > tutan[1] && tutan[0] > tutan[2])
{
MessageBox.Show("A");
}
else if (tutan[0] > tutan[1] && tutan[0] < tutan[2])
{
MessageBox.Show("C");
}
else
{
MessageBox.Show("B");
}
foreach döngüsünü verilen int listesine göre yapmak istersen:
Dictionary<string, List<int>> anaDict = new Dictionary<string, List<int>>();
anaDict.Add("a", a);
anaDict.Add("b", b);
anaDict.Add("c", c);
gibi bir şey yaparsın, anaDict'in count'u kadar yapar ^.^
- astaroth (18.03.15 09:34:18 ~ 20:41:06)
1