[]

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.

 
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.
  • 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.
  • 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.
  • 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 ^.^
  • astaroth  (18.03.15 09:34:18 ~ 20:41:06) 
1
buraya yazılanların hakları Sir Anthony Hopkins'e aittir.
yazan eden compumaster, ilgilenen eden fader
modere edenler angelus, Artibir, aychovsky, baba jo, basond, compumaster, deckard, duyulmasi gerektigi kadar, fader, fraise, groove salad, kahvegibi, kaymaktutmayansicaksut, kibritsuyu, monstro, pandispanya, robin, ron dennis
bu sitede yazılanların hiçbiri doğru değildir. site içeriği küçükler için sakıncalı olabilir. yazılardan yazarları sorumludur. kaynak göstermeden alıntılanamaz. devlet tarafından atanmış bir kurumun internet üzerinde kimin hangi bilgiye ulaşıp ulaşamayacağına karar vermesi insan haklarına aykırıdır. web siteleri kullanıcıların istekleri doğrultusunda bağlandıkları yerlerdir. kullanıcılar isterlerse bir web sitesine bağlanmayabilirler. bu güçleri ve imkanları mevcuttur. bir kullanıcı bir siteye bağlanmak istiyorsa bu onun tercihi ve hakkıdır. bağlanmak istemiyorsa bu yine onun tercihi ve hakkıdır. halkın kendisine hizmet etmesi için görevlendirdiği kurumlar hadlerini aşıp halka neye ulaşıp ulaşmayacağını bilmeyen cahil cühela muamelesi edemezler. ebeveynlerin çocuklarını sakıncalı içeriklerden koruması için çok sayıda bedava ve ücretli yazılım mevcuttur. bu yazılımlar bir web tarayıcısını kullanmaktan daha karmaşık teknik bilgi gerektirmemektedir. devletin milletini küçük düşürmesi ve ebleh yerine koyması yasaktır. Skimlinks ile linkler üzerinden yönlendirme payı alınmaktadır.