Merhabalar, sorum şu ki? Üniversitenin 4. sınıfında veri sıkıştırma dersimiz var. Bu derste hocamız, veriyi %50 sıkıştırdığımız durumda dersi direk geçirtecek. Hocamız kendisi sıkıştırılmış veri üzerinde arama ile ilgileniyor. Üniversitenin isminide vereyim Namık Kemal Üniversitesi, hocamızın adı Nusret BULUŞ. Ben şuan 3. sınıfta yım. 2. dönemden alttan Veri Yapıları ile dersim var. Geçen sene başarısız olmuştum. Veri yapıları dersin içeriği C#, ancak hoca Java Kodlarınıda kabul ediyor. Veri Yapıları dersinin hocası Erdinç Uzun hocamızda arama ile ilgileniyor.

Soruma daha gelemedim :/ Ben Java ile swing olayında kendimi geliştiriyorum. 2. dönemde algoritmalar ile ilgilenmek istiyorum. Java, da veride arama ve veride sıkıştırmada ne kadar etkili olabilirim? swingi kullanarak kendi geliştirdiğim algoritma ile metin sıkıştırıp, sıkıştırılmış veride arama yapmak gibi düşüncelerim var. (belki sıkıştırmada verim olmayacak :) ) Bu konuda tecrübeleriniz ile aktarabilecekleriniz neler acaba ? Bu konular ile ilginen hocalarımızın tavsiyesi ne olur.

Olayı biraz daha farklı bir boyuta getirmek gerekirse, google gibi arama motorları arka planda eldeki verileri nasıl kullanıyordur? Sıkıştırma üzerinde arama yapmak gibi bir yapıları varmıdır? google'ın indexleme mantığı nedir?

Bu konu üzerinde kafa yorduğumuz takdirde, google, yandex 'den daha iyi türk arama motoru geliştirmemiz mümkün mü?

Bence %100 yerli ve diğer arama motorlarından daha iyi olacak, olabilecek bir yerli arama motoru olması gerektiğini düşünüyorum.

Sizler?

soruldu: 06 Ara '12, 19:16

KodlarinEfendisi's gravatar image

KodlarinEfendisi
8061013
cevap kabul oranı: 0%

değiştirildi: 10 Ara '12, 04:08

%C3%B6zcanacar's gravatar image

özcanacar ♦♦
17.2k59183183

1

Bir soru başlığı içinde tek bir soru sormaya özen gösteriniz.

(07 Ara '12, 17:02) rahmanyazgan ♦ rahmanyazgan's gravatar image

İnternet üzerinde veri taşınırken sıkıştırma çok önemlidir. Çünkü bağlantının bant genişliği darboğazlı olabiliyor. Bir çok popüler veri formatı zaten sıkıştırılmıştır(belli skalada). Bu sıkıştırmaların bir çoğu kayıplıdır. Yani sıkıştırılmış veri açıldığında sıkıştırılmadan önceki hali gibi değildir, verinin bir kısmı kaybolur. Mesela mp3,wma,mpeg,divx formatları kayıplı sıkıştırmadır. Önemlli bir noktaya değinirsem, ses ve görüntü dosyalarındaki sıkıştırma esnalarındaki kayıplar belli ölçüde önemsizdir. Bu tip verileri kayıplı şıkıştırma yapmak mantıklı olabilir. Fakat veri dosyaları kayıplı sıkıştırılamaz(buraya dikkat). . Çünkü dosya açıldığında ilk hali gibi olmalıdır. Bu amaçla zip,gzip,rar,jar gibi farklı algoritmalar geliştirilmiştir.

Java'da zip,gzip,jar, deflate/inflate metodlarıyla kayıpsız sıkıştırma yapılır. Sıkıştırma yapılırken ve açılırken CPU'ya oldukça fazla yük biner. Java bu işlemleri hızlı yapabilmek için C ile yazılmış kütüphaneler kullanılıyor.

InflaterInputStream ve DeflaterOutputStream sıkıştırma(deflate) ve açma (inflate) sınıfları java.util.zip paketide bulunmaktadır.

Dosya sıkıştırma:

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.DeflaterOutputStream;

public class Deflate {
    public static void main(String[] args) throws FileNotFoundException, IOException{
    FileInputStream fin = new FileInputStream(args[0]);
    FileOutputStream fos = new FileOutputStream(args[0] + ".def");
    DeflaterOutputStream dos = new DeflaterOutputStream(fos);
    byte[] buffer = new byte[256];
    int numberRead;

    while ( (numberRead = fin.read(buffer)) >= 0 ){
        dos.write(buffer, 0, numberRead);
    }
    dos.close();
    fin.close();
 }
}

Dosya açma:

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.InflaterInputStream;

public class Inflate{
   public static void main(String[] args) throws FileNotFoundException, IOException{
    String subFile = null;

    FileInputStream fin = new FileInputStream(args[0]);
    InflaterInputStream iis = new InflaterInputStream(fin);

    if (args[0].endsWith(".def")){
        int lastDot = args[0].lastIndexOf('.');
        subFile = args[0].substring(0,lastDot);
    }

    FileOutputStream fos = new FileOutputStream(subFile);

    byte[] buffer = new byte[256];
    int numberRead;

    while ( (numberRead = iis.read(buffer)) >= 0 ){
        fos.write(buffer, 0, numberRead);
    }
   iis.close();
   fos.close();
 }
}

GZIPOutputStream/GZIPInputStream veya benzer sınıflar kullanılarakta kodlamalar yapılabilir..

Deflate sıkıştmra yöntemi ile yaptığım ufak bir test:

169 MB (178,206,000 bayt)'lık metin verisi üzerinde bu deflate sıkıştırma yaparak 1.27 MB (1,332,908 bayt) boyunta sıkıştırılmış kayıpsız veri elde ettim.

Aynı metin verisi üzerinde 7zip programı ile yüksek orada sıkıştırma yaparak 31.3 KB (32,061 bayt)'lık bir sıkıştırılmış veri çıktısı aldım.

Winrar programında zip sıkıştırmada 1.25 MB (1,315,304 bayt) , rar sıkıştırma ile 97.3 KB (99,695 bayt) lık sıkıştırılmış veri çıktısı aldım..

permanent link

cevaplandı: 07 Ara '12, 15:25

MDemir's gravatar image

MDemir
2.1k173445
cevap kabul oranı: 24%

değiştirildi: 08 Ara '12, 11:33

Cevabınız
toggle preview

Bu soruyu takip et

E-Posta üzerinden:

Üyelik girişi yaptıktan sonra abonelik işlemlerini yapabilirsiniz

RSS üzerinden:

Cevaplar

Cevaplar ve Yorumlar

Yazı Formatlama

  • *italic* ya da _italic_
  • **bold** ya da __bold__
  • link:[text](http://url.com/ "başlık")
  • resim?![alt text](/path/img.jpg "başlık")
  • liste: 1. Foo 2. Bar
  • temel HTML etiketleri de kullanılabilir

Bu sorunun etiketleri:

×1,080

Soruldu: 06 Ara '12, 19:16

Görüntüleme: 1,135 kez

Son güncelleme: 10 Ara '12, 04:08

powered by BitNami OSQA