我想要创建一个程序来搜索文本中的子文本。
例如,我有这样的文本: abcdeabbdfeg
在这篇文章中,我想找到:cd
但是我想用这个算法:
start = 1
end = string length of the text
middle = (start + end) / 2
if (pattern < text[middle]) end = mid - 1;
if (pattern > text[middle]) start = mid + 1;
...and continue until the pattern is found in the text
所以,我已经有了一
我想解决一个依赖类型问题,我把它缩小到下面的漫画中,从一个大小的向量中移除一个索引:
TL; rmIx博士,我怎么写someRmIx?
rmIx :: forall ix n a. Vector (n+1) a -> Vector n a
someRmIx :: forall ix a. SomeVector a -> SomeVector a
在someRmIx版本中,我需要查看rmIx函数中的约束,如果不能满足这些约束(例如不能从Vector 0 a中删除),则返回SomeVector。
module SomeVector where
import quali
其他输入似乎可以很好地找到结果,我对此很满意,但当我输入15和5时,我得到的结果是0而不是5,为什么会发生这种情况?
从我能想到的逻辑来看,使用注释来跟随keep track,它应该工作得很好,但事实并非如此。
#include <stdio.h>
#include <math.h>
int m;
int n;
int GCD(int m, int n);
int main(void)
{
scanf("%d %d", &m, &n);
printf("M = %d, N = %d", m, n);
我正在编写一小段代码,它需要能够有效地预测(最好在O(1)时间内)当两个整数m和n出现时以下算法的输出。
algorithm(m,n):
history = set()
while True:
if (m,n) in history:
return False
elif n == m:
return True
else:
history.add((m,n))
if m>n:
x = m-n
y = 2*n
m = x
我在Python中为问题找到了一个解决方案,它使用“非比较排序算法来获取计数”。它对执行按位操作的代码进行2次递归调用。
def inv_count(a, m=(1 << 32)):
if not m or not a:
return 0
count = 0
ones, zeros = [], []
for n in a:
if n & m:
ones.append(n & ~m)
else:
count += len(ones)
我试图在大-Theta(n^m)中实现一个时间复杂度的算法,n和m是自然数。
我的第一个解决办法是:
algo(n,m,i){ // called with algo(n,m,1)
if (i < m){
algo(n,m,i+1)
}
for i = 1 to n{
print(do something in constant time);
}
}
我的第二个解决方案:
algo(n,m,i){ //called with algo(n,m,m)
if (i > 0){
for j = 1 to n{
algo(n
我正在使用Rubyv1.9.1为我在大学里的班级编写一个Ackermann-function程序。代码如下:
def ackermann(n,m)
if n == 0 && m > 0
return m+1
elsif n > 0 && m == 0
return ackermann(n-1,1)
elsif n > 0 && m > 00
return ackermann(n-1,ackermann(n,m-1))
else
puts "Wrong input, m
以大O符号表示的下列函数的增长率是多少?
f (n) = Comb(1000,n) for n = 0,1,2,…
int Comb(int m, int n)
{
int pracResult = 1;
int i;
if (m > n/2) m = n-m;
for (i=1; i<= m; i++)
{
pracResult *= n-m+i;
pracResult /= i;
practicalCounter++;
}
return pracResult;
}
最近我在一个测试中遇到了这个问题:给定一组点m(全部在x轴上)和一组带端点的n行,找出n的最小子集,这样所有的点都被一条线覆盖。证明您的解决方案总是找到最小子集。
我为之编写的算法效果如下:(假设行存储为数组,左侧端点位于0,右侧存储在位置1)。
algorithm coverPoints(set[] m, set[][] n):
chosenLines = []
while m is not empty:
minX = min(m)
bestLine = n[0]
for i=1 to length of n:
以下代码的最坏情况运行时是什么?该代码从家庭作业分数列表中计算出家庭作业分数的平均值,然后将最低分数降到最低。
m := 1
for i := 2 to n
if h_i < h_m then m := i
total := 0
for j := 1 to n
if j != m then total := total + h_j
return total/(n − 1)
在最坏的情况下,这意味着最低的分数位于最后的位置。这意味着在第一个循环中,它将运行n-1迭代。第一环的上界和下界分别是O(n)和Ω(n) .我相信这意味着它有一个Θ(n)的运行时
第二个循环几乎是一样的
外部排序复杂性已经被很好地描述为。在第2和第3页,它很好地描述了phase1和phase2。我理解每一步所描述的复杂性。我的问题在第4页提到的Summing up the costs of phase 1 and phase 2 we get the total running time of Θ(n log2 (n/m))行上,在伪代码之后。
根据我的理解,第一阶段的复杂性是: O(MlogM)对主内存缓冲区中的所有记录进行排序。我们填充缓冲的N/M倍,从而有效地O(N/M *M log M),即O(NlogM)。
如何:
第1阶段: O(NlogM)。
和
第二阶段:Θ(n对数m/n)
l
我读到了欧几里得的计算GCD的算法,发现了以下代码:
#include <stdio.h>
int main()
{
int m, n;
scanf("%d%d", &n, &m);
if (n < 0) n = -n;
if (m < 0) m = -m;
while(n != 0)
{
int temp = n;
n = m % n;
m = temp;
}
if(m != 0)
printf(
我喜欢以这种方式打开结构并直接使用成员名称:
typedef struct{
int n;
int m;
int *A;
int *B;
type1 *slave;
} type2;
#define n this->n
#define m this->m
#define A this->A
#define B this->B
void routine2(type2 *this){
n = slave->n;
m = n + 1;
A = (int *)malloc(n * sizeof(int))
Iam由于复杂度O(n logn)而导致误判,而给定的Qs需要在O(N)中求解,需要寻找m.find()方法的替代方法,因为它采用O(logn)复杂度,总复杂度变为O(nlog N)。
vector<int> subarraySum(int a[], int n, long long s)
{
vector<int> result;
map<int,int>m;
map<int,int>::iterator it;
int b[n];
b[0]=a[0];
我在练习一个编码挑战,我被这个问题困住了。
A和他的朋友从整数店各买了一个号码,A有N号,他的朋友有M. A想两个号码都是同质数。为了达到这个目的,A将两个数字除以可以将两个数字除以的最大数。A想知道这个运算后的数字之和,帮他找出那个和。
输入
Input:
N = 6, M = 5
Output:
11
Explanation:
The largest number that can divide both
5 and 6 is 1.
After dividing, 5+6 = 11.
我试过这个代码
long sum(long N, long M){
long divide
unsigned int gcd(unsigned int n, unsigned int m)
{
if (n == 0)
return m;
if (m == 0)
return n;
while (m! = n)
{
if (n > m)
n = n − m;
else
m = m − n;
}
return n;
}
使用while循环的迭代GCD算法的一些伪代码。没有被2整除的地方,所以我不认为它是对数的。因为while循环运行的时间与N成正比,所以它是否像O(N)一样是线性的?
在之后,我将代码修改为:
model test
// types
type Mass = Real(unit = "Kg", min = 0);
type Length = Real(unit = "m");
type Area = Real(unit = "m2", min = 0);
type Force = Real(unit = "Kg.m/s2");
type Pressure = Real(unit = "Kg/m/s2");
type Torque = Real(unit