2015-12-14 14 views
6

İkili alanlarda programlama gerektiren Elliptic Curve Cryptography projem üzerinde çalışıyorum. Toplama, çarpma, inversiyon vb. Gibi temel işlemleri içerir. indirgenemez bir ikili polinom.Programlama dilinde ikili alan nasıl temsil edilir?

Bu ikili polinomların bir programda saklanabileceği bir yol arıyorum. C ve C++ programlama dili üzerinde çalışıyorum (gmp ile kütüphanesi) aklıma gelen ilk düşünce yapıları ve bit alanlarını kullanmaktı. Ama dinamik değiller ve keyfi uzun polinomlar tutamazlar. C++ Vector STL kullanımı mümkündür, ancak tek bir bitin 8 veya daha fazla bitlik bir kelime içerdiği için verimli olmayacaktır.

Etkin olan herhangi bir temsil yolu var mı? Bilgileri bir dizide bitsel olarak depolamak ETKİN DEĞİLDİR.

+0

"İkili alan" ile Z_2 demek istiyor musunuz? –

+7

std :: vektör 1 bit gösterim için 1 bit bellek kullanın – DvoryankinEvgeny

+0

@DvoryankinEvgeny evet, ancak siz olamazsınız. verimli xor 'iki' std :: vektör 's. –

cevap

0

Eğer ben olsaydım, Bit-Bilgilerini büyük bir UNSIGNED LONG INTEGER içinde saklar ve bitleri bu tamsayı değeri kümesine girip çıkarabilen bir işlev yazardım. Bit bilgisini saklamanın bu yolu, çözümünüzü 64 katına kadar hızlandıracaktır!

+0

Haklısınız. Ancak bu dinamik olmayacak ve veri boyutunu sadece 64 bite sınırlayacaktır. – Gaurav

+1

Temel depolama alanı olarak dinamik bir tam sayı dizisi kullanın. Erişim işlevi bunu kapsayacaktır. Ekleme/çıkarma işlevleri büyüyecek ve 'realloc()' kullanarak diziyi daraltacaktır. @Gaurav – alk

+0

@Gaurav - Bu, indirgenemez ikili polinomun boyut olarak sabitlenmiş olduğudur, ve sadece değişken uzunluktaki verilerdir ve bunun doğru olduğunu varsayarsak, o zaman çoğu zaman sabit uzunluk değişkenleri ile çalışıyorsunuzdur. 32 veya 64 bit işaretsiz tamsayı dizileri olabilir. – rcgldr