【问题标题】:How to encode N strings to binary numbers with minimum number of digits如何将 N 个字符串编码为位数最少的二进制数
【发布时间】:2016-03-19 00:44:00
【问题描述】:

我有一个名字列表,ArrayList<String> names。例如:

ArrayList<String> names= new ArrayList<String>();
names.add("foo1"); 
names.add("foo2");
names.add("foo3");
names.add("foo4");
names.add("foo5");

然后我可以用 (ceiling(log(5))=) 3 位将这五个名称编码为二进制数:foo1=000, foo2=001, foo3=010, foo4=011, foo5=100。我想要一个看起来像 public int[] return_binary_encoding(String name, ArrayList&lt;String&gt; names) 的函数,其中 namenames 中。

【问题讨论】:

  • 所以你想要一个与字符串绑定的数字......对于你的系统,所有数据都是二进制的,所以你的 000、001、010、011、100 实际上是 0、1、2、3, 4...那不就是你的字符串在ArrayList中的索引值吗?
  • 什么是String name?在您提出的问题中,它的意义是什么?你有没有尝试过任何东西——几行代码?
  • namenames 中。好的,现在我觉得这是一个愚蠢的问题,因为我可以通过names.indexOf(name) 获得name 的索引,然后我只需要将其转换为带有log(k) 位的二进制数。对吗?
  • @Prashnant @OliPro007 根据您所说的,我认为以下内容几乎可以完成工作:Integer.toBinaryString(names.indexOf(name)) 然后我只需要添加足够的 0 即可获得带有 log(k) 的二进制数位数。对吗?
  • @Reza 好像是这样,this post 可以帮助你做到这一点。

标签: java


【解决方案1】:

感谢所有在 cmets 方面帮助我的人。

    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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-17
    • 2015-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-01
    相关资源
    最近更新 更多