1. sayfa
| C++ önce mesela '\n' karakterine göre ayrıştırıp(split) set (include = set) ile yapabilrsin benzersiz olur :) |
| Excel'de direk istediğinizi yapan fonksiyon var. Programını yazmak istiyorsanız de üstteki arkadaşın dediği gibi her satır bir eleman olacak şekilde bir dizi oluşturup sırayla her elemanın kendinden sonraki elemanlarla eşitliğini karşılaştırmanız lazım. |
|
aslında kontrol etmemize gerek yok set'in görevi bu :) örnk:http://ideone.com/k5FTL9 |
Set ordered olarak implemente edilmemisse sira bozulabilir ama diger turlu set kullanmak mantikli. Sifirdan algoritmasini yazmak icin de once hizli bir hash algoritmasi olusturmak gerekli ki set de bunu yapiyor. |
Sirasinin bozulmamasi sorunun kisitlamalarindan bir tanesi, set bildigim kadariyla sirayi bozabiliyor :)
Excel'deki o fonksiyonun complexity'si kactir acaba? Nasil bir algoritma kullaniyorlar merak ettim dogrusu. Ikinci onerdigin yontem ise O(n^2), pek verimli degil gibi.
Hadi olusturalim. :) Isterseniz kod da paylasabilirsiniz, 2. soruya da cevaplarinizi bekliyorum. :) Bu tarz beyin firtinasi yapabilecegimiz sorulari keske sik sik sorsak da herkesi dusunmeye itsek bu konularda. |
|
hmm arkadaşın sorusunda oraya dikatte etmemişim aynen set küçükten büyüğe doğruda bir sıralama yapar(yani sıra bozulur :) ) @qamyoncu yarın bi bakayım şuan bilgisayar başında değilim. Bilgisayar başındayken ve en çok tuvaletteyken garip çözümler gelebiliyor aklıma :) |
|
evet verimsiz. http://stackoverflow.com/questions/1532819/algorithm-efficient-way-to-remove-duplicate-integers-from-an-array şurda sayılar üzerinde biraz tartışmışlar. |
|
String hash metodu kullanmak gerekiyor dedigim gibi. String icerisindeki char array inin her degernin int karsiliginin herhangi bir prime sayi ile carpilmasi ve bunlarin toplanmasi yeterince unique bir yontem olarak gibi duruyor. Bu kritik bir nokta ama mukemmellestirmek cok uzun zaman aliyor, iyi bir hash metodu yazmak CS icin en onemli calisma alanlarindan bir tanesi. Pseudocode olarak soyle bir sey:
Daha sonra Her hash degeri icin tutacagimiz tablonun ( aslinda bir array ) size ini dusunmemiz gerekecek. O nu genis tutarak hash collision ini dusurmus oluruz, ancak memory kullanimi artacak. Buna da guzel bir deger verip ( 2^32 olabilir ) her degeri ve one denk gelen String value sunu eslestirecegiz. KeyValue gibi. Hashlenen degerin array'de nereye denk gelecegini bilmek icin bitwise islem yapilir. ( Bitwise AND ).
Normal akista, RAM'de hash ve ona denk gelen String degerlerini tutmak yeterli olacaktir. Ancak tablo sinirli oldugundan cok uzun iki string collusion yaratacaktir. Bu sebeple yalnizca bu cozum yeterli olmayacak. 500 TB lik bir dosya uzerinde islem yapma durumu icin de, HDD alaninin yeterli oldugu varsayimi ile, Divide And Conquer algoritmalari uygulayarak dosya 1GB lik 500000 dosyaya bolunur. Her dosya kendi icinde kontrol edilip ikiser ikiser birlestirilip tekrar kontrol edilir. Recursive bir dynamic programlama uygulanabilir burada. Siranin kaybolmamasi icin tablomuza ilgili kayitlar eklenmeli. Son olarak eklemek istedigim bir nokta da su, String keyfi olarak farklilastirabilecegimiz bir yapida. Bu sebeple 500 TB bir dosya icindeki her satirin birbirinden farkli olmasi gayet mumkun. n uzunlugunda bir listede tekrar var mi diye kontrol eden algoritmanin memory complexity'si O(n) den daha dusuk olamaz. Bu sebep, bu soruyu cozmek icin "teorik" olarak 500TB RAM ihtiyacimizin olmasi da gayet mumkun. |
1. sayfa
Asagida bahsedecegim konuyla iligli beyin firtinasi yapalim istiyorum. Fikirlerinizi merakla bekliyorum.
1) Elimizde bir metin dosyasi var ve icerisinde satir satir yazilar var. Bu dosyadan, satirlarin sirasi bozulmayacak sekilde, ayni olan satirlarin kopyasini nasil silersiniz? Bir ornek:
2) Ya dosyanin boyutu 500TB olsaydi?
DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.
Üye Ol Şimdi DeğilÜye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.