我正在用C++实现一个数学库.该库将被编译为DLL,因此使用它的人只需要类的定义的头文件.
我班级的用户将是不熟悉该语言的人.但是,有些对象可能会在程序的几个部分中被引用.由于我不指望他们做内存管理,我想自己做.因此,我必须实现引用计数(垃圾收集不可能).
我想让那个引用计数尽可能透明,例如......
// Define a Bézier curve
CVecList pts;
pts.Add(Vector(0,0,0));
pts.Add(Vector(0,0,100));
pts.Add(Vector(0,100,0));
pts.Add(Vector(0,100,100));
CCurve* c1 = new CBezier(pts);
// Define a 3rd order B-Spline curve
pts.Clear();
pts.Add(Vector(0,0,0));
pts.Add(Vector(0,200,100));
pts.Add(Vector(0,200,200));
pts.Add(Vector(0,-200,100));
pts.Add(Vector(0,-200,200));
pts.Add(Vector(0,0,0));
CCurve* c2 = new CBSpline(pts,3);
// The Bézier curve object must be deleted automatically
// because the only reference to it has been released
// Similar to IUnknown::Release() in COM
c1 = c2;
Run Code Online (Sandbox Code Playgroud)
当我定义表面对象时,事情变得有点棘手,因为一些表面是根据两条曲线定义的:
CVecList pts;
// ...
CCurve* f = new CBezier(pts);
pts.Clear();
// ...
CCurve* …Run Code Online (Sandbox Code Playgroud) 计算字符串中所有子字符串出现次数的最佳方法是什么?
示例:计算Foo内部的出现次数FooBarFooBarFoo
我有一个大三角形的点,我们称之为 a、b、c。(a =(x,y)等)。
现在我想统计这个三角形围成的区域内有多少个积分点,所以我首先看一下皮克定理。我考虑的第二种方法是生成一个以三角形的最大值、最小值为界的点列表,然后检查每个点是否位于三角形内部。
我使用重心坐标方法来做到这一点。它有效,但是我的三角形相当大,我的程序基本上是跨点的蛮力。我如何改进这个算法?
我的代码可以在这里找到:https ://bpaste.net/show/58433b6e389c
我有一个字节数组(原始),它们可以有随机值.我试图以最有效/最快的方式计算它们在数组中的出现次数.目前我正在使用:
HashMap<Byte, Integer> dataCount = new HashMap<>();
for (byte b : data) dataCount.put(b, dataCount.getOrDefault(b, 0) + 1);
Run Code Online (Sandbox Code Playgroud)
这个单行程需要大约500ms来处理长度为24883200的字节[].使用常规for循环至少需要600ms.
我一直在考虑构造一个集合(因为它们只包含每个元素中的一个),然后使用Collections.frequency()将它添加到HashMap ,但是从原语构造Set的方法需要几个其他调用,所以我是猜测它不是那么快.
完成每个项目发生次数的最快方法是什么?
我正在使用Java 8,如果可能的话,我宁愿避免使用Apache Commons.
问题:
想象一下,你从X by Y网格的角落开始.您只能向两个方向移动:向右和向下.从(0,0)到(X,Y)的路径有多少
我有两种方法,第一种是使用通过memoization增强的递归算法,第二种是使用二项式计数策略
递归方式
def gridMovingCount(x, y, cache):
if x == 0 or y == 0:
return 1
elif str(x)+":"+str(y) in cache:
return cache[str(x)+":"+str(y)]
else:
cache[str(x)+":"+str(y)] = gridMovingCount(x-1, y, cache) + gridMovingCount(x, y-1, cache)
return cache[str(x)+":"+str(y)]
Run Code Online (Sandbox Code Playgroud)
二项式计数
def gridMovingCountByBinomial(x, y):
return int(math.factorial(x + y) / (math.factorial(x) * math.factorial(y)))
Run Code Online (Sandbox Code Playgroud)
当x和y相对较小时,这两种方式给出相同的答案
#the same result
print(gridMovingCount(20, 20, cache)) #137846528820
print(gridMovingCountByBinomial(20, 20)) #137846528820
Run Code Online (Sandbox Code Playgroud)
当x和y很大时
# gave different result
print(gridMovingCount(50, 50, cache)) #100891344545564193334812497256
print(gridMovingCountByBinomial(50, 50)) #100891344545564202071714955264
Run Code Online (Sandbox Code Playgroud)
对此有何解释?堆栈溢出某种?但是,它不会抛出任何异常.有没有办法克服这个递归调用?
我需要查找并计算字符串中可以找到多少个字符.我已将字符分为chars1 [a:m]和chars2 [n:z],并有两个计数器.
输出应为0/14,但它是0/1.我认为它只检查是否包含一个且只有一个项目,然后退出循环.是这样的吗?
这是代码.
string_1 = "aaabbbbhaijjjm"
def error_printer(s):
chars1 = "abcdefghijklm"
chars2 = "nopqrstuvwxyz"
counter1 = 0
counter2 = 0
if ((c in s) for c in chars1):
counter1 += 1
elif ((c in s) for c in chars2):
counter2 += 1
print(str(counter2) + "/" + str(counter1))
error_printer(string_1)
Run Code Online (Sandbox Code Playgroud) 我有一个元组列表,每个元组包含三个项目:
z = [(1, 4, 2015), (1, 11, 2015), (1, 18, 2015), (1, 25, 2015), (2, 1, 2015), (2, 8, 2015), (2, 15, 2015), (2, 22, 2015), (3, 1, 2015), (3, 8, 2015), (3, 15, 2015), (3, 22, 2015), (3, 29, 2015), (4, 5, 2015), (4, 12, 2015), (4, 19, 2015), (4, 26, 2015), (5, 3, 2015), (5, 10, 2015), (5, 17, 2015), (5, 24, 2015), (5, 31, 2015), (6, 7, 2015), (6, 14, 2015), (6, 21, 2015), (6, 28, …Run Code Online (Sandbox Code Playgroud) 我的目标是能够计算数组中相同整数的组。例如,在这样的数组中{1, 1, 1, 2, 2, 3, 1, 1},有4个组:
我在不对数组进行排序的情况下遇到了问题。当它被排序时,我在数组末尾失去了两个1的组的计数,因为它被放置在其他1的组旁边。
int result = (int) Stream.of(1, 1, 1, 2, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 5, 4, 4, 4, 6)
.collect(Collectors.groupingBy(i -> i))
.entrySet().stream()
.filter(entry -> entry.getValue().size() >= 1) // specify the size
.count()
return result;
Run Code Online (Sandbox Code Playgroud)
每种尺寸的预期输出如下:
size 1 count == 8
size 2 count == 5
size 6 count == 1
size 8 count == …Run Code Online (Sandbox Code Playgroud) 我有以下 data.frame:
x <- data.frame(A = c("Y", "Y", "Z", NA),
B = c(NA, TRUE, FALSE, TRUE),
C = c(TRUE, TRUE, NA, FALSE))
Run Code Online (Sandbox Code Playgroud)
我需要计算下表xtabs:
A B C
Y 1 2
Z 0 0
<NA> 1 0
Run Code Online (Sandbox Code Playgroud)
我被告知要使用na.action = NULL,它确实返回了我需要的表:
xtabs(formula = cbind(B, C) ~ A,
data = x,
addNA = TRUE,
na.action = NULL)
A B C
Y 1 2
Z 0 0
<NA> 1 0
Run Code Online (Sandbox Code Playgroud)
但是,na.action = na.pass返回一个不同的表:
xtabs(formula = cbind(B, C) ~ A, …Run Code Online (Sandbox Code Playgroud) 我有一个由 df.column.value_counts().sort_index() 生成的 Pandas 系列。
| N Months | Count |
|------|------|
| 0 | 15 |
| 1 | 9 |
| 2 | 78 |
| 3 | 151 |
| 4 | 412 |
| 5 | 181 |
| 6 | 543 |
| 7 | 175 |
| 8 | 409 |
| 9 | 594 |
| 10 | 137 |
| 11 | 202 |
| 12 | 170 |
| 13 | …Run Code Online (Sandbox Code Playgroud) counting ×10
python ×4
c++ ×2
java ×2
pandas ×2
python-3.x ×2
string ×2
aggregate ×1
algorithm ×1
arrays ×1
bin ×1
dictionary ×1
java-stream ×1
na ×1
performance ×1
r ×1
recursion ×1
reference ×1