许多处理器具有统一格式和宽度的指令,例如ARM,其中所有指令都是32位长.其他处理器具有多个宽度的指令,例如长度为2,3或4个字节,例如8086.
encoding cpu-architecture variable-length instructions fixed-width
假设您有一个,List<List<Boolean>>并且您希望以最紧凑的方式将其编码为二进制形式.
我不关心读写性能.我只是想使用最小的空间.此外,该示例在Java中,但我们不限于Java系统.每个"列表"的长度是无限的.因此,编码每个列表长度的任何解决方案本身必须编码可变长度数据类型.
与此问题相关的是可变长度整数的编码.您可以将每个List<Boolean>视为可变长度unsigned integer.
请仔细阅读问题.我们不仅限于Java系统.
编辑
我不明白为什么很多答案都谈论压缩.我本身并不是在尝试压缩,而只是编码随机的位序列.除了每个比特序列具有不同的长度并且需要保留顺序.
你可以用不同的方式思考这个问题.假设您有一个随机无符号整数列表(无界).如何在二进制文件中编码此列表?
我做了一些阅读,发现我真正想要的是通用代码
我将使用本文中描述的Elias Omega Coding的变体一个新的正整数的递归通用代码
我现在明白,较小整数的表示越小,整数就越大.通过简单地选择具有第一个整数的"大"表示的通用代码,当您需要对任意大整数进行编码时,从长远来看可以节省大量空间.
我有一个数据集,如下所示。那就是第一项是用户ID,后跟用户单击的一组项目。
0 24104 27359 6684
0 24104 27359
1 16742 31529 31485
1 16742 31529
2 6579 19316 13091 7181 6579 19316 13091
2 6579 19316 13091 7181 6579 19316
2 6579 19316 13091 7181 6579 19316 13091 6579
2 6579 19316 13091 7181 6579
4 19577 21608
4 19577 21608
4 19577 21608 18373
5 3541 9529
5 3541 9529
6 6832 19218 14144
6 6832 19218
7 9751 23424 25067 12606 26245 23083 12606
Run Code Online (Sandbox Code Playgroud)
我定义了一个自定义数据集来处理我的点击日志数据。
0 24104 27359 …Run Code Online (Sandbox Code Playgroud) 我的元组看起来像这样(对于一组特定的生成值)
tTrains = [ (3, ), (1, 3), (6, 8), (4, 6, 8, 9), (2, 4) ]
Run Code Online (Sandbox Code Playgroud)
现在,我需要找到的是这个元组/列表中最长元组的长度.我总是可以使用for循环,遍历所有子元组并执行它.但我想询问是否有相同的预定义功能.
这就是我现在要使用的内容
max = 0
for i in range( len(tTrains) ):
if iMax < len( i ):
iMax = len( i )
Run Code Online (Sandbox Code Playgroud) 我记得做过这样的事情:
template <ListOfTypenames>
class X : public ListOfTypenames {};
Run Code Online (Sandbox Code Playgroud)
也就是说,X继承自作为模板参数传递的可变长度的类型名列表.当然,这段代码是假设的.
但是我找不到任何参考.可能吗?是C++ 0x吗?
在支持可变长度数组之前,我会像这样动态分配它们:
int foo(size_t n)
{
int *arr = malloc(n * sizeof int);
if (!arr) return ENOMEM; /* not enough memory */
.
. else do stuff with arr[]
.
free(arr);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
使用可变长度数组,我现在可以使它看起来更干净:
int bar(size_t n)
{
int arr[n];
.
. do stuff with arr[]
.
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但现在我没有"内存不足"检查.事实上,如果n太大,程序会崩溃.
如果n太大,我如何优雅地从bar(n)保释?
我找到了这个示例代码,我试图google什么(int (*)[])var1可以代表,但我没有得到有用的结果.
#include <unistd.h>
#include <stdlib.h>
int i(int n,int m,int var1[n][m]) {
return var1[0][0];
}
int example() {
int *var1 = malloc(100);
return i(10,10,(int (*)[])var1);
}
Run Code Online (Sandbox Code Playgroud)
通常我在C99中使用VLA,所以我习惯于:
#include <unistd.h>
#include <stdlib.h>
int i(int n,int m,int var1[n][m]) {
return var1[0][0];
}
int example() {
int var1[10][10];
return i(10,10,var1);
}
Run Code Online (Sandbox Code Playgroud)
谢谢!
我目前正在将这个问题作为一个个人项目来处理.
基本上:
我已经使用以下函数递归地实现了这个:
char[] pool = new char[]{'1', '2', '3'};
public void buildStringRec(char[] root, int pos, int length){
for(char c : pool){
char[] newRoot = root.clone();
newRoot[pos] = c;
if(pos+1 < length){
buildStringRec(newRoot, pos+1, length);
} else{
System.out.println(String.valueOf(root));
}
}
}
Run Code Online (Sandbox Code Playgroud)
poolE和lengthK 在哪里?
所以我们打电话给:buildStringRec(new char[2], 0, 2);得到
11
12
13
21
22
23
31
32
33
Run Code Online (Sandbox Code Playgroud)
这可以迭代完成吗?我一直试图围绕如何使用可变长度来做这件事.
任何帮助,将不胜感激!如果需要,我可以按照原样发布我的代码,但由于我的重试,它发生频率变化,我发布它几乎没用.
另外,我不想使用Apache或String Builder这样做,因为我想了解如何做到这一点的概念.我不是简单地要求代码.只要清楚地解释,伪代码就可以了.
谢谢!
我正在使用这个网站测试提供给我的所有选项:https: …
iteration algorithm combinations permutation variable-length
我使用以下命令将大数据文件读入R中
data <- as.data.set(spss.system.file(paste(path, file, sep = '/')))
Run Code Online (Sandbox Code Playgroud)
数据集包含不属于的列,并且只包含空格.此问题与R根据附加到SPSS文件(源)的变量标签创建新变量有关.
不幸的是,我无法确定解决问题所需的选项.我已经尝试了所有:foreign :: read.spss,memisc:spss.system.file和Hemisc :: spss.get,没有运气.
相反,我想读取整个数据集(使用ghost列)并手动删除不必要的变量.由于ghost列只包含空格,我想从我的data.table中删除任何变量,其中唯一观察的数量等于1.
我的数据很大,因此它们以data.table格式存储.我想确定一种简单的方法来检查每列中唯一观察的数量,并删除仅包含一个唯一观察的列.
require(data.table)
### Create a data.table
dt <- data.table(a = 1:10,
b = letters[1:10],
c = rep(1, times = 10))
### Create a comparable data.frame
df <- data.frame(dt)
### Expected result
unique(dt$a)
### Expected result
length(unique(dt$a))
Run Code Online (Sandbox Code Playgroud)
但是,我希望计算大型数据文件的obs数,因此不希望按名称引用每一列.我不是eval(parse())的粉丝.
### I want to determine the number of unique obs in
# each variable, for a large list of vars
lapply(names(df), function(x) {
length(unique(df[, x]))
}) …Run Code Online (Sandbox Code Playgroud) 我想做一些关于va_list的练习.这是我的代码.
int myscanf( char* fmt, ... ) {
va_list ap;
va_start ( ap, fmt );
vfscanf ( stdin, fmt, ap );
va_end ( ap );
}
int main() {
int a, b;
myscanf( "%d %d", &a, &b );
}
Run Code Online (Sandbox Code Playgroud)
如上所示,我写了一个scanf(),它是有效的.
现在我想重定向myscanf()中参数的值.
例如,我可以将fmt重定向到myscanf()中分配的空间
int myscanf( char* fmt, ... ) {
char newFmt[10] = "%d %d";
va_list ap;
va_start ( ap, fmt );
vfscanf ( stdin, newFmt, ap );
va_end ( ap );
}
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试更改其他参数的值时,我感到困惑.
我可以通过va_arg()获取这些变量参数,但我不能修改它们,因为va_arg()是一个宏.
int myscanf( char* fmt, ... ) …Run Code Online (Sandbox Code Playgroud) variable-length ×10
c ×3
encoding ×2
python ×2
algorithm ×1
arrays ×1
binary ×1
c++ ×1
c++11 ×1
c99 ×1
combinations ×1
data.table ×1
fixed-width ×1
instructions ×1
integer ×1
iteration ×1
permutation ×1
pytorch ×1
r ×1
templates ×1
tensor ×1
tuples ×1
unique ×1