Hızlı Sıralama Algoritması Lazım

oktayturk

Üye
Katılım
5 Şub 2007
Mesajlar
49
Puanları
1
Arkadaşlar bana çok hızlı çalışan bir sıralama algoritması gerekli.

Problem?
N adet üç elamanlı bir diziyi kendi içerisinde büyükten küçüğe ve küçükten büyüye sıralayacak bir algoritma arıyorum.

Not:
N adet dizinin en küçük değeri 3000'dir
 
Sayın ceyhanII cevabınız için çok teşekkür ederim. Sorumu şu şekilde açıklamak isteyerim.

N adet üç elemanlı bir diziyi dusunun

Dizi[1,1,1]
Dizi[2,2,2]
.
.
.
Dizi[xn,yn,zn]

N elemanlı bir dizi derken bunu demek istiyorum. Örnek olarak şu şekilde bir örnekle açıklayayım.

Dizi[2,45,23]
Dizi[2,7,13]
Dizi[10,11,13]

olarak verildiğinde bu diziyi küçükten büğe sıraladığımızda sıralamak istediğimizde şu sonuç çıkar.
Dizi[2,7,13]
Dizi[2,45,23]
Dizi[10,11,13]

olarak sıralanır. yani diziyi şu şekilde düşünün Dizi[x,y,z] olarak düşünün. İlk olarak x bölümü küçükten büyüye, y değeri küçükten büyüye ve son olarak z yi küçükten büyüye sıralamak istiyorum. Bu işlem 100 veya 200 sayıda herhangi bir problem yok ama bu sıralanacak değer 2000 sayıdan büyük olunca sıralama işlemi çok yavaş kalıyor. Bu işlemi daha hızlı nasıl yapabilirim.
 
Bu işlemi dizi şeklinde değilde matris olarak düşünsek daha iyi olmaz mı acaba?
 
Matriks şeklinde olsun bu sıralama hakkında bir fikri olan yokmu?
 
Sıralamayı veren program kodunu siz hangi dilde yazdınız?
Bu kod nerede çalışacak?
Hızlı derken kıstasınız ne?
 
Sıralama Algoritmasını C++ dilinde yazdım.
Amacım DXF dosyasından okuyup elede edttim x,y,z kordinat larını OPENGL kullanarak DXF ten okunan şeklin üç boyutlu olarak göstermek ve bu gosterilen şeklin kordinat ekseninden küçükten büye sıralayarak bir post programı geliştirmek.
hiz deken 3000 tane şeli ortalama olarak 4,5 dakikada sıralıyor. ben bunu maksimum 10 Saniye olacak şekilde sıralamak istiyorum.
 
Şimdi aynı dili konuşmaya başladık kardeşim,
Anladığın kadarı ile derdin sıralama ile değil, yani bunu zaten yapabiliyorsun ama yavaş çalışıyor. Tahmin ediyorum ki dxf dosyasını okuyor sonra sıralıyor sonra tekrar okuyorsun vb. bir durun var. Ben de daha önceleri bir dosyadan koordinat okuyup bunları kullanmıştım. Önceleri benim kodlar da yavaş çalışıyordu ama şimdi yeterince iyi bence. Şunu fark ettim ki sonunda, hız için probleme doğru yaklaşım gerekiyor. Ben uygulamamda VS 2005 i kullanmıştım.
Öncelikle dosyanın tamamını reader ile RAM' e okumuştum. Bu işlem tek seferde ve hızlıca olur. Daha sonra ise RAM' lerdeki verilerden işime yarayacak olanları bir döngü ile alıp .NET' te dataset olarak bilinen yapıdaki bir tabloya yazdım. İlk olarak diziye yazmıştım ancak bu verileri bir datagrid te de göstermem gerektiğinden datasette karar kıldım. Datasette sıralama vb. işlemler yapmak biraz daha kolay ve bildiğin excel tablosunun sanal hali.

Senin uygulamanda şu an N adet üç elemanlı dizi yerine üç boyutlu bir tek dizi kullansan performans artışı yaşarsın bence. Hatta benim yaptığım gibi dataset de kullanmayı dene. Dataset içindeki verilerin sıralanmasının birkaç saniyeden fazla süreceğini sanmam.

Biraz karmaşık yazmış olabilirim ama umarım kafanda bir ışık yakmaya yeter. Ayrıca daha önceleri bu forma eklediğim aşağıdaki bağlantıya da göz atmanı öneririm. Yapmaya çalıştığının hazır hali diyebilirim, işini epey hızlandırabilir.

https://www.kontrolkalemi.com/forum/programlama/11956-3d-cad-cam-cae-program-yazmak.html
 
Son düzenleme:

Forum istatistikleri

Konular
129,059
Mesajlar
922,904
Kullanıcılar
451,331
Son üye
doby17

Yeni konular

Çevrimiçi üyeler

Geri
Üst