dizi içerisinde indexli arama

Başlatan eti, 14 Mart 2018, 22:58:36

eti

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ı ?





OptimusPrime

c++ kulanma sansin varsa set ve map fonksiyonlarina bakabilirsin aksi durumda hash kodu kullanabilirsin.
https://donanimveyazilim.wordpress.com || Cihân-ârâ cihân içredir ârâyı bilmezler, O mâhîler ki deryâ içredir deryâyı bilmezler ||

CLR

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). 
Knowledge and Experience are Power

kantirici

Hash table konusuna bakabilirsin.

eti

hash table işi kafama yattı teşekkürler.