BFS的基本算法:
set start vertex to visited
load it into queue
while queue not empty
for each edge incident to vertex
if its not visited
load into queue
mark vertex
Run Code Online (Sandbox Code Playgroud)
所以我认为时间的复杂性将是:
v1 + (incident edges) + v2 + (incident edges) + .... + vn + (incident edges)
Run Code Online (Sandbox Code Playgroud)
v顶点1到哪里n
首先,我说的是正确的吗?其次,这是怎样的O(N + E),直觉为什么会非常好.谢谢
可能重复:
C宏定义确定大端或小端机器?
int main()
{
int x = 1;
char *y = (char*)&x;
printf("%c\n",*y+48);
}
Run Code Online (Sandbox Code Playgroud)
如果它是小端,它将打印1.如果它是大端,它将打印0.这是正确的吗?或者将char*设置为int x始终指向最低有效位,而不管字节顺序如何?
这些术语在我的数据结构教科书中使用,但解释非常简洁且不清楚.我认为这与算法在每个计算阶段有多少知识有关.
(请不要链接到维基百科页面:我已经阅读过了,我仍在寻找澄清.如果我十二岁和/或一个例子的解释会更有帮助.)
有没有快速/简单的方法来做到这一点(至少粗略估计)?
我是基准测试算法,我认为知道我的计算机执行指令的绝对速度并将其与我的渐近分析进行比较会很酷.
int currentMinIndex = 0;
for (int front = 0; front < intArray.length; front++)
{
currentMinIndex = front;
for (int i = front; i < intArray.length; i++)
{
if (intArray[i] < intArray[currentMinIndex])
{
currentMinIndex = i;
}
}
int tmp = intArray[front];
intArray[front] = intArray[currentMinIndex];
intArray[currentMinIndex] = tmp;
}
Run Code Online (Sandbox Code Playgroud)
内循环迭代:n +(n-1)+(n-2)+(n-3)+ ... + 1次.
外循环迭代:n次.
所以你得到n*(数字1到n的总和)
不是n*(n*(n + 1)/ 2)= n*((n ^ 2)+ n/2)
哪个是(n ^ 3)+(n ^ 2)/ 2 = O(n ^ 3)?
我很肯定我做错了.为什么不是O(n ^ 3)?
说我有一个字符串:"hEY"
我想将它转换为"嘿"
string.gsub!(/([a-z])([A-Z]+ )/, '\1'.upcase)
Run Code Online (Sandbox Code Playgroud)
这就是我的想法,但是当我在gsub方法中使用它时,似乎upcase方法什么都不做.这是为什么?
编辑:我想出了这个方法:
string.gsub!(/([a-z])([A-Z]+ )/) { |str| str.downcase!.capitalize! }
Run Code Online (Sandbox Code Playgroud)
有没有办法在正则表达式中执行此操作?我真的不明白'\ 1''\ 2'的事情.这是反向引用吗?这是如何运作的
我正在阅读Steven Skiena撰写的算法设计手册,我正处于动态编程章节.他有一些编辑距离的示例代码,并使用了一些既不在书中也不在互联网上解释的功能.所以我很想知道
a)该算法如何工作?
b)indel和match函数有什么作用?
#define MATCH 0 /* enumerated type symbol for match */
#define INSERT 1 /* enumerated type symbol for insert */
#define DELETE 2 /* enumerated type symbol for delete */
int string_compare(char *s, char *t, int i, int j)
{
int k; /* counter */
int opt[3]; /* cost of the three options */
int lowest_cost; /* lowest cost */
if (i == 0) return(j * indel(' '));
if (j == 0) return(i * indel(' ')); …Run Code Online (Sandbox Code Playgroud) for(int i = 0; i<100; i++)
for(int j = 0; j<100; j++)
array[j][i] = 0;
// array[i][j] = 0;
Run Code Online (Sandbox Code Playgroud)
我的教授说,第一种方式初始化二维数组要比第二种方式要昂贵得多.有人可以解释引擎盖下面发生了什么事情吗?或者,这两种初始化方法是否具有相同的性能?
c arrays assembly multidimensional-array localityofreference
你怎么做到这一点?值未排序但属于[1..n] Example数组[3,1,2,5,7,8].回答:4, 6
我在另一篇类似的帖子中看到了这个解决方案,但我不明白最后一步:
- 找到数字的总和S = a1 + ... + an.
- 还可以找到平方和T =a1²+ ... +an².
- 你知道总和应该是S'= 1 + ... + n = n(n + 1)/ 2
- 你知道平方和应该是T'=1²+ ... +n²= n(n + 1)(2n + 1)/ 6.
- 现在建立以下方程组x + y = S'-S,x²+ y2 = T'-T.
- 通过写x²+ y2 =(x + y)²-2xy => xy =((S'-S)²-(T'-T))/ 2来求解.
- 现在这些数字仅仅是z中的二次曲线的根:z 2 - (S'-S)z +((S'-S)²-(T'-T))/ 2 = 0.
在z为未知的最后一步中设置二次方程的解释是什么?解决这个问题背后的直觉是什么?
什么是容器?据我了解:
抽象数据类型仅仅是数据存储方式的逻辑描述以及该数据允许的操作.例如,堆栈被定义为具有操作push,pop等和LIFO访问的数据类型.
数据结构是此抽象定义的实际实现,在某些计算机编程语言中,例如,C++中的堆栈在标准库中实现,如std :: stack.
首先,请纠正/加强我目前对上述区别的理解.
其次,究竟什么是容器?我经常听到这个词被抛出来.它和我对数据结构的定义是一样的吗?
此外,维基百科对这些术语有三个单独的条目.
algorithm ×7
c ×4
c++ ×4
arrays ×2
sorting ×2
assembly ×1
benchmarking ×1
big-o ×1
bubble-sort ×1
byte ×1
endianness ×1
graph-theory ×1
java ×1
math ×1
regex ×1
ruby ×1