
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
数据结构是程序员在学习Java编程开发语言需要重点掌握的一个编程知识,下面我们就通过案例分析来了解一下,常见的数据结构类型都有哪些。
时间复杂度与空间复杂度
时间复杂度
并不是计算程序具体运行的时间,而是算法执行语句的次数
O(2^n)表示对n数据的处理需要进行2^n次计算
多项式时间复杂度:O(1),O(log(n)),O(na)
非多项式时间复杂度:O(an),O(n!)
空间复杂度
一个算法在运行过程中临时占用存储空间大小的量度
O(n)表示需要临时存储n个数据
NP问题
P问题:能在多项式时间复杂度内解决的问题
NP问题:能在多项式时间复杂度内验证答案正确与否的问题
NP?=P
如果能在多项式的时间复杂度内验证一个问题,那么能够找到一个在多项式间复杂度内的算法
区块链的Hash证明,显然是一个NP问题,但是找到Hash却是一个非常复杂的计算问题,非多项式复杂度
NP-hard问题:比NP问题更难的问题,多个NP问题的解法可以规约到NP-hard问题的解法
NP完全问题:是一个NP-hard问题,也是一个NP问题
数独问题:
旅行商问题:
数组
创建数组必须在内存中有一块连续的空间,数组中必须存放相同的数据类型(数组中存放的数据元素长度必须是相同的)
随机快速读写是数组的一个重要特性,根据数组下标访问数据,时间复杂度为O(1)
链表
链表可以使用零散的内存空间存储数据,链表中的每个数据元素都必须包含一个指向下一个数据元素内存地址的指针,链表对数据元素的长度不作要求
想要在链表中查找一个数据,只能遍历链表,所以链表的查找复杂度是O(n)
链表中增删数据的时间复杂度为O(1),比数组O(n)性能好(在数组总增删元素需要移动数据元素)
数组链表结合,实现快速查找和快速增删
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请在707945861群中学习了解。