栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java描述 数据结构与算法

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java描述 数据结构与算法

算法:NonextremeElement(S[], n)

输入:由n个整数构成的集合S

输出:其中的任一非极端元素

{

任取的三个元素x, y, z ∈ S; //既然S是集合,这三个元素必互异

通过比较,找出其中的最小者min{x, y, z}和最大者max{x, y, z};

输出最小、最大者之外的那个元素;

}

思路:

S 是有限集,故其中的最大、最小元素各有且仅有一个。

因此,无论 S 的规 模有多大,在前三个元素 S[0]、S[1]和 S[2]中,必包含至少一个非极端元素。

我们可以取 x = S[0]、y = S[1]和 z = S[ 2],这只需执行三次基本操作,耗费 O(3)时间。

为了确定这三个元 素的大小次序,我们最多需要做三次比较(请读者自己给出证明),也是 O(3)时间。

最后,输出居中 的那个元素只需 O(1)时间。

运行时间为: T(n) = O(3) + O(3) + O(1) = O(7) = O(1)

[](

)O(logn)⎯⎯进制转换

​ 问题:给定任一十进制整数,将其转换为三进制表示。比如

​ 23(10) = 212(3)

​ 101(10) = 10202(3)

算法:baseConversion(n)

输入:十进制整数n

输出:n的三进制表示

{

不断循环,直到n = 0 {

输出 n % 3; //取模

令 n = n/3; //整除

}

}

以 101(10)为例思路:

​ 第一轮循环,输出 101 mod 3 = 2,n = 100/3 = 33; 2

​ 第二轮循环,输出 33 mod 3 = 0,n = 33/3 = 11; 0

​ 第三轮循环,输出 11 mod 3 = 2,n = 11/3 = 3; 2

​ 第四轮循环,输出 3 mod 3 = 0,n = 3/3 = 1; 0

​ 第五轮循环,输出 1 mod 3 = 1,n = 1/3 = 0。 1

​ result=10202(3)

该算法由若干次循环构成, 每一轮循环内部,都只需进行两次基本操作(取模、整除)。

每经过一轮循环,n都至少减少至 1/3。于是,至多经过

1+[log3n]

次循环,即 可减小至 0。

因此,该算法需要运行 O(2×(1+[log3n])) = O(log3n)时间。

鉴于大 O 记号的性质,我们通常会忽略对数函数的常底数。比如这里的底数为常数 3,故通常 将上述复杂度记作 O(logn)。

[](

)O(n)⎯⎯数组求和

问题:给定n个整数,计算它们的总和。

算法:Sum(A[], n)

输入:由n个整数组成的数组A[]

输出:A[]中所有元素的总和

{

令s = 0;

对于每一个A[i],i = 0, 1, …, n-1

令s = s + A[i];

输出s;

}

思路

对s的初始化需要O(1)时间。

每一轮循环中只需进行一次累 加运算,这属于基本操作,可以在O(1)时间内完成。

O(1) + O(1)×n = O(n+1) = O(n)

[](

)O(n2 )⎯⎯起泡排序

**问题:**冒泡排序

算法:Bubblesort(S[], n)

输入:n个元素组成的一个序列S[],每个元素由[0…n-1]之间的下标确定,元素之间可以比较大小

输出:重新调整S[]中元素的次序,使得它们按照非降次序排列

{

从S[0]和S[1]开始,依次检查每一对相邻的元素;

只要它们位置颠倒,则交换其位置;

反复执行上述操作,直到每一对相邻元素的次序都符合要求;

}

思路:

为了对n个整数排序,该算法的外循环最多需要做n轮。

经过第i轮循环,元素 S[n-i-1]必然就位,i = 0, 1, …, n-1。r

在第i轮外循环中,内循环需要做n-i-1 轮。

在每一轮内循环中, 需要做一次比较操作,另外至多需要做三次赋值操作,这些都属于基本操作,可以在O(4)的时间内 完成。

T(n)=∑i=0n−1(n−i−1)×O(4)=O(2n(n−1))=O(2n2–2n)

鉴于大 O 记号的特性,低次项可以忽略,常系数可以简化为 1,故再次得到 T(n) = O(n^2 )

[](

)O(2r )⎯⎯幂函数

**问题:**虑幂函数的计算

算法:PowerBruteForce®

输入:非负整数r

输出:幂2^r

{

power = 1;

while (0 < r–)

power = power * 2;

return power;

}

共需要做r次迭代,每次迭代只涉及常数次基本操作,故总共需要运行O®时间。

问题的输入规模为n,故有O® = O(2n )。

[](htt

【一线大厂Java面试题解析+核心总结学习笔记+最新架构讲解视频+实战项目源码讲义】

浏览器打开:qq.cn.hn/FTf 免费领取

ps://blog.csdn.net/xcw19971018/article/details/119574327)计算模型

===================================================================

  • 可解性

​ 现代意义上的电子计算机所对应的计算模型,就是所谓的图灵机

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/358237.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号