作为一个业余爱好者程序员已经3年了(主要是Python和C),并且从未编写超过500行代码的应用程序,我发现自己面临两个选择:
(1)学习数据结构和算法设计的基本知识,这样我就可以成为一名计算机科学家.
(2)学习Qt,这将帮助我建立我一直渴望建立的项目很长一段时间.
对于学习(1),每个人似乎都建议阅读CLRS.不幸的是,阅读CLRS会花费我至少一年的学习时间(或者更多,我不是Peter Krumins).我也明白,使用(2)来完成的任何中等复杂的任务,我将需要至少了解的基础知识(1),这使我想到我的问题:假设我使用C++作为首选的编程语言的哪些部分CLRS会给我足够的算法和数据结构知识,可以使用(2)来处理大型项目吗?
换句话说,我需要一个理论上的CompSci主题列表,这对于日常应用程序编程任务来说绝对必不可少.此外,我想使用CLRS作为一个方便的参考,所以我不想跳过任何对理解本书后面部分至关重要的材料.
别在我这里弄错了.离散数学和CompSci的理论基础已经出现在我的"TODO:URGENT"列表中大约6个月了,但由于大学工作,我没有足够的时间.很长一段时间后,我有15天休息时间去做我喜欢的任何事情,我想花这15天来构建我真正想要建立的应用程序,而不是坐在我的桌子上,笔和纸在手,试图写下来教科书问题的解决方案.
(顺便说一句,关于算法的数学代码资源越来越少,我将非常感激.我刚从高中毕业,我的数学水平还没有达到应有的水平.)
谢谢 :)
假设您有一个包含千兆字节的文件
deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef
Run Code Online (Sandbox Code Playgroud)
并且你想将它转换为十进制,就像你将0xdeadbeef转换为3,735,928,559一样.
数字可被2整除的基数很容易实现,因为您可以每隔几位操作并输出一个数字(6为base64).
有什么办法用十进制做到这一点?
编辑:该文件代表一个长号.它重复的事实与数字5555,055,055没有什么不同.
EDIT2:文件大小已知.然后怎样呢?
对于大多数操作,哈希表的摊销性能通常被认为是O(1).
比如标准的LinkedList实现,搜索操作的摊销性能是多少?是O(n)?
我对这是如何计算有点困惑,因为在最坏的情况下(假设总是碰撞的哈希函数),哈希表在搜索操作方面几乎等同于LinkedList(假设一个标准)斗式实施).
我知道在实践中这种情况永远不会发生,除非哈希函数被破坏,因此平均性能几乎是一系列操作的恒定时间,因为碰撞很少见.但在计算摊销的最坏情况时,我们不应该考虑最坏情况下的最坏情况序列吗?
对于我大学计算机科学课程的一部分,我们需要学习C.我的讲师推荐了K&R的C语言编程语言第2版.阅读前几页后,它清楚地表明这本书不是一本完整的指南,有时可能会产生误导,所以我想知道我是否应该从这本书中"学习"C?(这也是一本旧书)
我来自一个基本的Java背景,所以我理解程序的基本元素(变量,数据类型,循环等),所以看看C语法不应该太过震惊.
我可以在学校的计算机上访问MatLab,但它现在更像是一个便利因素.我想稍后使用raspberry pi进入编程,但在此期间是否值得购买?作为一名计算机工程师,这对我有用吗?谢谢.
我有一个强烈连接的图表.我想删除边缘并检查是否仍然保持强连接.当我拿N =图中的节点总数为10时,我感兴趣的大多数图表都有25个以上的边缘,很难一次性使用一个去除边缘.
如何解决这个问题呢 ?谢谢.
该算法反转N个整数的数组.我相信这个算法是O(N),因为对于每个循环迭代,四行代码执行一次,从而在4N时间内完成作业.
public static void reverseTheNumbers(int[] list) {
for (int i = 0; i < list.length / 2; i++) {
int j = list.length - 1 - i;
int temp = list[i];
list[i] = list[j];
list[j] = temp;
}
}
Run Code Online (Sandbox Code Playgroud) 我想找出如何解决此代码的主定理:
unsigned long fac (unsigned long n ) {
if (n == 1 )
return 1;
else
return fact(n-1)*n;
}
Run Code Online (Sandbox Code Playgroud)
因此,基于我只有1次自称a = 1的事实。除了该函数调用外,O(n)= 1也是如此。现在我正在为我的b奋斗。通常,一般公式为:
T(n)= a * T(n / 2)+ f(n)
在这种情况下,我没有划分主要问题。新问题只需要解决n-1。b现在是什么?因为我的复发是:
T(n)= 1 * T(n-1)+ O(1)
由于我不知道确切的b,现在如何使用主定理?
据我所知:在C语言中,变量的"类型"在编译期间被绑定,并且该变量的值在运行时被绑定.
例如,在编译期间int a = 10;,类型int绑定到变量,并且在运行时a将实际值10绑定(或分配)给它.
但在Rust,我们有let a = 2;.这里,什么时候类型(比如i32Rust中的任何整数类型)被绑定a?
我正在构建一个前端Rust编译器,目前正在编写解析器阶段.此时,我应该为这些变量分配什么类型?
P vs NP问题确实存在问题吗?难道我们不能说P问题是经典计算机可以解决的问题,因为它适合于它的架构,NP问题本质上是量子的,可以通过量子架构的计算机来解决吗?
algorithm computer-science cpu-architecture quantum-computing
computer-science ×10
algorithm ×6
big-o ×1
c ×1
graph ×1
java ×1
math ×1
matlab ×1
performance ×1
qt ×1
radix ×1
raspberry-pi ×1
recurrence ×1
recursion ×1
rust ×1