Picproje Elektronik Sitesi

SERBEST BÖLGE => Programlama ve Algoritma => Konuyu başlatan: eti - 14 Mart 2018, 22:58:36

Başlık: dizi içerisinde indexli arama
Gönderen: eti - 14 Mart 2018, 22:58:36
Merhaba
Aktif taglardan veri alıp biriktiren bir 18f45k22 mcu var.

Aktif taglardan aldığım 4byte id bilgisini 2 boyutlu dizide saklıyorum.
Aynı id yi tekrar kaydetmemek için dizide arama yapıyorum. Kayıtlı değil ise yeni bir indexe kaydediyorum.

Sorun şu.
Arama yaparken Diziyi 0nci index ten başlayıp tarıyorum.
Bu işlem 500 elemanlı bir dizide zaman alabiliyor.
Logaritmik arama yaptırabilmek için dizinin sıralı olması gerekiyor.

Bu işlemi daha pratik yapmak için bir önerisi olan var mı ?




Başlık: Ynt: dizi içerisinde indexli arama
Gönderen: OptimusPrime - 15 Mart 2018, 06:43:17
c++ kulanma sansin varsa set ve map fonksiyonlarina bakabilirsin aksi durumda hash kodu kullanabilirsin.
Başlık: Ynt: dizi içerisinde indexli arama
Gönderen: CLR - 15 Mart 2018, 08:59:55
4byte'lık ID dizisi rasgele kayıtlı ise ise algoritmalar verimli çalışamaz çünkü sıralama yok.
Burada yapılacak en hızlı çözüm, verileri 4'er byte yerine birer byte olarak karşılaştırmak, en çok değişen byte, LSB byte'tır, once bunları karşılaştır, eşit değilse geç, eşitse bir üst byte'larını karşılaştır, bu şekilde hızlanırsın.

Ama karşılaştırmaları yapmak için structer pointer veya struct yerine u8 pointer kullan ve sonraki adresler için pointer'e 4 ekle (sonraki tag'ın LSB için). 
Başlık: Ynt: dizi içerisinde indexli arama
Gönderen: kantirici - 15 Mart 2018, 22:49:45
Hash table konusuna bakabilirsin.
Başlık: Ynt: dizi içerisinde indexli arama
Gönderen: eti - 16 Mart 2018, 23:19:54
hash table işi kafama yattı teşekkürler.