[英]How to encode N strings to binary numbers with minimum number of digits
I have a list of names, ArrayList<String> names
. 我有一个名称列表, ArrayList<String> names
。 For example: 例如:
ArrayList<String> names= new ArrayList<String>();
names.add("foo1");
names.add("foo2");
names.add("foo3");
names.add("foo4");
names.add("foo5");
Then I can encode these five names into binary numbers with (ceiling(log(5))=) 3 digits: foo1=000, foo2=001, foo3=010, foo4=011, foo5=100
. 然后,我可以使用(ceiling(log(5))=)3位数字将这五个名称编码为二进制数字: foo1=000, foo2=001, foo3=010, foo4=011, foo5=100
。 I want a function which looks like public int[] return_binary_encoding(String name, ArrayList<String> names)
, where name
is in names
. 我想要一个看起来像public int[] return_binary_encoding(String name, ArrayList<String> names)
的函数,其中name
在names
。
Thanks to all who helped me with their comments. 感谢所有帮助我发表意见的人。
public int[] return_binary_encoding(String name, ArrayList<String> names) {
int code[];
int domain_size= names.size();
int siz_of_code= (int)Math.ceil(Math.log(domain_size)/Math.log(2));
code= new int[siz_of_code]; //it is initialized to 0 by default
int index= names.indexOf(name);
String binary_code= Integer.toBinaryString(index);
//insert binary_code in code from right
int counter= code.length - 1;
for(int i= binary_code.length()-1; i>= 0; i--) {
int digit= Character.getNumericValue(binary_code.charAt(i));
code[counter]= digit;
counter --;
}
return code;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.