var sqrt = Math.Pow(Math.E, BigInteger.Log(bigNumber) / 2); var startNumber = Convert.ToUInt64(sqrt); BigIteger.Log() yerine Math.Log da kullanılabilir. Şu kodu incelersen anlayacaksın. X ^ 2 + D yöntemini kullanıyoruz. Sadece bu yöntemi kullanmak istersek. Burada X'i hep asal seçip X'in asal indeksini saklarsak X için 13 bit, D için de 17 bit kullanabiliriz. D bu durumda en fazla 131071 olabilir. Eğer rastgele seçilmiş 4 byte lık N sayının %50'sinden fazlasını bu son yöntemde gösterebilirsen ki - bu olasılık hesaplanabilir - kesin bir sıkıştırma algoritması üretmiş oluruz. Şu kodu incele anlayacaksın. https://dotnetfiddle.net/m1RE5W |
1KB'da 2 ^ 1024 * 8 kombinasyon olabilir. 1KB ile 0 - (2 ^ 8192) - 1 arasındaki sayıları temsil edebilirsiniz. Böyle büyüklükte bir sayıyı ifade etmek için 0 - (2 ^ 8192) - 1 arasındaki bütün asalların bir db'sini oluşturduysan ya da asallar için bir formül bulunursa ki - bulundu - kendisinden küçük sayıya en yakın asalın indeksi ve bu sayıdan farkını saklarsan ciddi oranda sıkıştırmış olursun. Bu yöntem henüz bu aralık için asallarla çalışmanın donanımsal zorluklarından dolayı uygulanamıyor fakat çok yaknda uygulamaya alınacaktır. |
bana işlemin nasıl yapılacağından bahsetme 2^(1024 * 7) kombinasyonu 2^(1024 * 8) kombinasyona nasıl çevireceksin onu söyle vahiymi gelecek? 1/8 oranında sıkıştırmadan sonra dosyaların 8 de biri aynı veriye sahip olacak aynı veriden farklı kombinasyon çıkma işi nasıl olacak? |
valla konuya yazsammı yazmasammı derken belki faydam olur birilerini bu boş hayallerden kurtarırım diye düşündüüm yazdım :) dediğin gibi çokmu zor bir dil öğrenmek bu gibi algoritmaları yazmak için dilin tamamını da öğrenmene gerek yok harcayacağın zaman 12 saati geçmez. |
Bunlardan piyasada çok var Determinist. İşleri güçleri laf üretmek. Okudukları, gördükleri bir kaç şeyle adam olduk sanarlar. Ben Entropi diyorum, Kolmogorov Karmaşası diyorum tık yok. Adam işlem yaparken onu seçiyor bunu seçiyor, işine geldiği gibi gidiyor. Performansı geçtik, ulan bunun bir de kayıpsız geri çözümlemesi olacak. Yok şuna bakıyor yok buna bakıyor, daha ettiği masrafı düşünemiyor. Neyse gösterecek uygulamasını ve kayıpsız çözümünü Excel de bize. Yoksa biz ona gösterecez artık ![]() |
Aşufte için özürümü sunarım demedim sayın. Ya da sen benim huyumu bilmem ne yapmış ol, falan. Şimdi ispat niyetine bir iki kelâm edeyim. 1. Asal sayılarla sıkıştırma yöntemi a. 1 Byte lık asal sıkıştırma b. 4 byte lık asal sıkıştırma 2. X ^ 2 + D -> Tam kare uzaklığı ile gösterim. X asal seçiyoruz ve 13 bit D ise 17 bit max: 131071 1. a. 0-255 arasında 54 adet asal sayı vardır. Bu rastgele seçilen N sayının yaklaşık %21 oranında asal byte içermesi anlamına gelir. Tüm byte lara bakıyoruz asal ise 6 bit kullanarak 0-53 arasında bir sayıyla indeksleri saklıyoruz. Değilse aynen 8 bit olarak yazıyoruz. Elbette sıkıştırma yapıp yapmadığımızla ilgili olarak bir bit olmak üzere harita oluşturuyoruz ve bunu da verilere ekliyoruz. Şimdi kullanılmayan 54-63 arası indeksler içinde yeni bir fırsat oluşuyor. Tüm byte ların frekanslarını çıkarıyoruz ve frekansı en yüksek asal olmayan 10 byte ı seçiyoruz. Sayı asal olmasa da kodlarken harita da bir gösterip bu frekans tablosundaki bu 10 sayıdan birine denk gelince 0-9 a karşılık 54-63 olarak bunu kodluyoruz. Böylece etkili bir sıkıştırma oluşturmuş oluyoruz. Etkili bir sıkıştırma olabilmesi için en az kaç byte ın asal olması gerektiğini ya da frekans tablosundaki ilk 10 sayının dosyanın en az % kaçına denk gelmesi gerektiğini hesaplayabiliriz. Bunu size bırakıyorum. 1. b. Sayıları 4'er byte lık bloklar haline getiriyoruz asal her sayıyı indeksiyle 28 bitte saklıyoruz çünkü bu aralıkta 203 milyon asal var. Yine dosya içerisindeki asal sayı oranı kritik önem taşıyor? En az kaç olmalı ki oluşturacağımız 1 bitlik haritayı içermesine rağmen kazanç sağlayabilsin bunu size soruyorum? Yine (2 ^ 28) - (bu aralıktaki asal sayısı - yaklaşık 203 milyon) ?? burada frekansı yüksek olan byte dizilerini saklamak için kullanabiliriz. 2 . X ^ 2 + D X'i daima asal seçiyoruz ve 65.5 binin üzerine asal indeksleri kullanarak 13 bit ile rahatlıkla ulaşıyoruz. D için 17 bit (131071) ayırıyoruz. Şimdi soruyorum. Rastgele seçilen 4 byte lık N sayının % kaçını bu gösterimle sağlayabiliriz. Buna siz cevap verin. N / 2 den ne kadar fazla olabilir. |
|
huyunu sikerim için özrümü sunarım demedim say. sadece şu kısımda kar yerine zarar ediyorsun asalsayıları indekslerken + 1 bit sıkıştırma yapıldımı yapılmadımı bilgisi ekliyorsun yani %21, 7 bit kullanacaksın %79, 9 bit kullanacaksın. gerisini okumadım. |
Bu bit dizisinde bol sıfır olduğu için Huffman ya da LZ ile ekstra sıkıştırabiliyoruz. Sen oarayı kafana takma orada veri boyutu en az %70 kısalacak. Gerisini okumamak düşük zeka belirtisidir. Çözüme yönelik düşün sorunları birlikte çözelim. |
konunun buraya varacağı en başından belliydi. göstermeye çalıştığım şey bunun imkansız olduğuna dair somut delildi. neyse son mesajım olsun zaman israfına gerek yok. |
Bit haritası veriyi 1/8 oranında artırırken asal byte lar 1 / 20 oranında azaltacak. öte yandan bit haritası sıkıştırıldığında 1 / 24 artacak ve 1 / 20 azalacak nihayetinde 1 / 24 artıp 1 / 20 azalan bir veri kısalacaktır. Frekans tablosuna ve faydasına hiç girmiyorum. Dizilime bakılmaksızın her hangi bir veri dizisini kısaltacak mükemmel bir yöntemdir. Lisanslanması gerekir. 1 + (1 / 24) - (1 / 20) = %99,1 sıkıştırma oranıyla ve defalarca kullanılabilmesi ile yeni neslin sıkıştırma formatları arasında yerini alabilir. :( Bu kadar laf işittiğime değdi mi? |
Jetonun köşelerini iyi zımparalayınca kimseden ses çıkmıyor. :) |
Hm. Yaptım demekle olmaz. Yaptım dediğiniz bu yeni sıkıştırma yönteminin implementasyonu var mı yani indirip deneyebileceğimiz? Öyle birşey olsa birşey konuşmanıza gerek kalmaz zira ürününüzün kendisi konuşur. |
"sıkıştırma algoritman o kadar iyiki çıktı boyutu orijinal boyuttan büyük oluyor bunu da LZ ile ekstra küçültmeye çalışıyorsun." Defalarca yinelenebilen ve 1 kaç saniyede sonuç veren bir sıkıştırma algoritması için bu bir sorun değildir. Belirli sayıda yinelemeyi sağladığınızda oran çok ciddi artıyor. Elbette dosyanın boyutu artıncaya dek buna devam etmek gerekiyor. Bu tekrar sayısını kim bilebilir. İyi olmayan her algoritma başka algoritmalar ile sıkıştırılabiliyor fakat işlem süresi uzuyor. Böyle bir işlem süresi için çok ideal bir sıkıştırma oranıdır bu! 15 tekrarda hemen %87,5 oluverir. Bana sıkıştırılamayacağı ile ilgili somut delil veremediğiniz sürece savım geçerli olacaktır. |
Ayrıca her dosyayı sıkıştırabileceğimi iddia etmiyorum. Frekans tablosu ortalama değere büyük uzaklıklar içeren dosyaları kesinlikle sıkıştırabilirim. Hem bununla 10 zip, rar, ya da 7zip dosyasından birini sıkıştırsam bu bile büyük başarıdır. Öyle değil mi? Rastgele seçilen her N byte'ın %21'i asaldır. Sonra frekans tablosundaki her byte ın frekansı eşit olsa bile ki - bu mümkün değil - 10 / 256 = %4 de buradan gelecektir Her 4 byte ın 1'ini 6 bite indirgeyebiliyorum ve haritada her 4 bitten 3'ü 0 ve 1'i 1 dolayısıyla sıkıştırılabilir, burada iki kere düşünüp, hesap yapıp bir kere yazın. |
Konudaki hiçbir şeyi okumadım ama sonsuz sıkıştırma imkansız diye biliyorum. Minimum entropi var bir veriyi max sikistirabilecegin ve kanıtı var bunun. Sonsuz değil ama belki optimal yolu bulmuş olabilirsin bakmak lazım. |
Compression(byte[] bytes) Decompress i kendiniz hayal edin veri kaybı yok. |
Uzun uzun anlatmak yerine geliştirdiğin kodu GNU kodlama standartlarına uygun şekilde paketleyip yayınlamalısın. program derlendiğinde oluşan binary ismi yenizip, format uzantısı .yz sıkıştırılacak örnek dosya adı da dizin.tar olsun, 2 temel opsiyonla (-c compress, -e extract) çalışması yeterli: yenizip -c dizin.tar ==> dizin.tar.yz yenizip -e dizin.tar.yz ==> dizin.tar Herhangi bir sebepten (vakit yokluğu, motivasyon eksikliği, vs) yayınlayamıyorsan şöyle olur böyle olur diye anlatman gereksiz. sorunsuz derlenip deneyebileceğimiz birşey olmadığı sürece örnek / temsili kod vermen de gereksiz. |
Kormogolov diye bir deli bir kuyuya taş atar ve sonra 40 akıllı çıkaramaz. Yine entropi taşları da öyle, bu konuda fikri olduğunu söyleyip ürün verenler değil, olamayacağını ezberlerinden söyleyenler çatlak, pesimist ve düşük zekalıdır. |
1KB lık örnek dosyamız olsun bu dosyanın toplam olası kombinasyonu 2^(1024 * 8) yapar.
elimizde her biri 1KB lık 2^(1024 * 8) tane dosya olsun, her dosyanın içeriği bir birinden farklı olsun (yani olabilecek tüm kombinasyonlar)
her birini 1/8 oranında sıkıştırma yapmak demek, olası kombinasyonu 2^(1024 * 7) yapmak demek.
şimdi 2^(1024 * 7) kombinasyonu 2^(1024 * 8) kombinasyona çevir bakalım nasıl olacak. yapamazsın çünkü dosyaların 8 de biri aynı bitsel değerlere sahip.
< Bu mesaj bu kişi tarafından değiştirildi Guest-4D62BFE91 -- 1 Ocak 2020; 17:12:57 >
Bu mesaja 1 cevap geldi. Cevapları Gizle
Bu mesajda bahsedilenler: @SEO19 @ayhanarican