小编Xar*_*ara的帖子

C++:快速搜索的数据结构

以下是我的情景:

我必须保留扩展ASCII的所有3字节组合,如下所示:

{ { (a,a,a),(a,a,b),..........(z,z,z) } }
Run Code Online (Sandbox Code Playgroud)

所有这些组合产生一组256*256*256的大值

在我的算法中,碰巧在每次迭代之后,大集合会出现如下情况:

 {(a,a,a), (a,a,b)}
 {(a,a,c)}
.
.
.
.
{(z,z,z)}
Run Code Online (Sandbox Code Playgroud)

我正在使用数组的向量来实现这个.

vector<set<array<char,3> > > Partition;
Run Code Online (Sandbox Code Playgroud)

使用它的原因是一个大的集合将分解成子集.这些子集的数量是未知的,并且在每次迭代之后子集的数量可能增加,因此我使用向量.那么子集不应该包含任何元素两次,因此我使用set和数组来保持3个字符.

使用上述数据结构的问题在于计算结果需要花费大量时间.

我需要有关数据结构的建议,在我的情况下可以更有效.

我的算法的更多解释:

{(a,a,a),(a,a,b)........ (z,z,z)}
Run Code Online (Sandbox Code Playgroud)

所有这些三角板都是无序地图的关键.所有这些triplates对应于这样的特定值

(a,a,a)           value=2
(a,a,b)           value=2
(a,a,c)           value=3
(a,a,d)           value=2
.
.
.
.
.
Run Code Online (Sandbox Code Playgroud)

现在,我运行我的算法,并希望根据价值知道它们可以压缩多少:像这样

{(a,a,a) ,(a,a,b)  }          value=2
(a,a,c)                       value=3
{(a,a,d),......}              value=2
Run Code Online (Sandbox Code Playgroud)

为什么我必须为value = 2创建一个单独的子集,因为根据我的算法,每当我的前一个值与当前值不同时,我必须创建一个新的集合.

c++ data-structures

1
推荐指数
1
解决办法
1224
查看次数

另一种不允许我访问HashMap值的方法

我在一个方法中实现了一个hashmap(称之为方法a),在那个方法中我调用了另一个方法(称之为方法b),我将方法a中构建的hashmap转移到方法b.问题是,当我尝试在方法b中获取hmap的值时,它不允许我为此编写语句.

在类分析器中,我有2种方法方法a和方法b.我从以下声明中调用了方法b:

analyzer v=new analyzer();
v.b(hMap1, 1);
Run Code Online (Sandbox Code Playgroud)

在方法b中,我尝试获取hmap1的值,但它不允许我写:

public HashMap b(HashMap x,int i)
{
  System.out.println( x.get("6").dstip);
} 
Run Code Online (Sandbox Code Playgroud)

它不允许我写入.dstip在方法a中编写此打印语句的位置,它在控制台上给出结果.我已经公开了hashmap,我不知道为什么它不允许我写出所需的语句.

java netbeans hashmap

0
推荐指数
1
解决办法
382
查看次数

SubClass变量不会再次初始化

我有我的主类,我称之为子类.

我的子类包含一些公共静态变量

    public class SubClass2 extends Main {


     public static  long a = 0;
     public static  long b = 0;
     public static  long c= 0;

    public void Analyze(int number)
    {
      b=2;

    //some code
     }
    }
Run Code Online (Sandbox Code Playgroud)

在main中我调用SubClass2的对象.我希望每次当我在main中创建子类2的新对象时,它初始化所有变量= 0但是当我接受变量b的print语句时.它打印出来像4.它将以前的值与新值相加.

在此输入图像描述

java

0
推荐指数
1
解决办法
117
查看次数

查找向量中每个元素出现的概率

我有这种类型的数据:

         1
         2
         3
         3
         4
         1
Run Code Online (Sandbox Code Playgroud)

现在,我想维护两个独立的数组:一个将保留上述数字,另一个将保持相应的概率

values      values_counter (proabability)
   1                     2/6
   2                     1/6
   3                     2/6
   4                     1/6
Run Code Online (Sandbox Code Playgroud)

我写了下面的代码,但它打印出所有6个数字,即1 2 3 3 4 1,并且它们的可能性是统一的.请帮助我在下面给出的代码中犯错的地方

 values=[];
 values_counter=[];
for d=1:1:648
size_of_array=size(values);
values_array_size=size_of_array(2);

if(values_array_size~=0)

for b=1:1:values_array_size
    if (columnB(d)~=values(b))
        values(values_array_size+1)=columnB(d); // columnB(d) has different values (may   have duplicate values)
        dfastates_counter(values_array_size+1)=1/648;
    else
        values_counter(b)=(values_counter(b)+1)/648;
    end
end

else
    values(1)=columnB(d);
    values_counter(1)=1/648;
end

end


   values
   values_counter
Run Code Online (Sandbox Code Playgroud)

matlab

0
推荐指数
1
解决办法
1450
查看次数

3D阵列解除分配会导致分段错误

我正在使用三维数组.我这样声明:

int (*DoubleStride_StateTable)[255][255] = new int[StateTable_length][255][255];
Run Code Online (Sandbox Code Playgroud)

我像这样解除分配3D数组:

for( int i = 0 ; i < 255 ; i++ )
{
    for( int j = 0 ; j < 255 ; j++ )
    {
        cout << i << " " << j << endl;
        delete[] DoubleStride_StateTable[i][j] ;
    }
    delete[] DoubleStride_StateTable[i] ;
}
delete[] DoubleStride_StateTable;
Run Code Online (Sandbox Code Playgroud)

循环只运行两次,即

i=0 j=0
i=0 j=1
Run Code Online (Sandbox Code Playgroud)

然后发生分段错误

我正在做正确的解除分配吗?为什么会出现此错误?

c++ arrays

0
推荐指数
1
解决办法
70
查看次数

c ++:what():std :: bad_alloc错误

在下面的代码中,我有一个DoubleTableEntries结构,它由int和char组成.我得到的代码问题是,当我的大小<= 5000时,但是当大小值大于6000或9033时,代码运行正常.它开始给我这个错误:

terminate called after throwing an instance of std::bad_alloc
what(): std::bad_alloc
Aborted(core dumped)
Run Code Online (Sandbox Code Playgroud)

当我的尺寸是9033并且这个循环卡在5923时,我得到了上述错误.

我认为在我的情况下内存应该不是一个大问题,因为RAM大小为4GB,并且没有其他大内存消耗程序随之运行.

请指导我如何避免这个问题.

struct  DoubleTableEntries **NewDoubleTable;
NewDoubleTable = new DoubleTableEntries*[size];


for(int i = 0; i < size; ++i)
          { 
        NewDoubleTable[i] = new DoubleTableEntries[256*256];
  }
Run Code Online (Sandbox Code Playgroud)

c++

0
推荐指数
1
解决办法
652
查看次数

标签 统计

c++ ×3

java ×2

arrays ×1

data-structures ×1

hashmap ×1

matlab ×1

netbeans ×1