戳蓝字“CSDN云计算”关注我们哦!
技术头条:干货、简洁、多维全面。更多云计算精华知识尽在眼前,get要点、solve难题,统统不在话下!
作者:刘晶晶
近日,英特尔推出了一款创新产品组合,点名是要围绕数据的,而且立下了“更迅速的数据传输、更高效的数据存储、更全面的数据计算”这面大大的flag。
据了解,当前世界范围内只有很少一部分数据得到了应有的分析,前景所迸发的能量实在巨大。对此,凭借着二十余年在数据中心领域的经验以及用户合作的经历,想必此次产品发布在某种层面上让英特尔“以数据为中心”的战略越发清晰明了,向高达3,000亿美元的数据市场迈进更是一触即发。
对此,英特尔公司市场营销集团副总裁兼中国区总经理王锐表示:“释放数据价值是制胜未来的关键。未来,我们将继续沿着‘智能+’的方向,从客户出发,与客户交融,将英特尔数据为中心的技术和产品应用到各个行业中去,推动数字经济在中国发展。”
英特尔公司市场营销集团副总裁兼中国区总经理王锐
讲完大战略,还是着重说一说这波袭来的新产品吧!
第一波:第二代英特尔®至强®可扩展处理器横空出世。
能够满足严苛的计算处理要求,覆盖从智能边缘到云,到AI和5G等各种复杂但前沿的应用环境。
集成了英特尔®深度学习加速(英特尔® DL Boost)技术,以加速数据中心、企业和智能边缘计算环境中的人工智能推理工作负载,例如图像识别、对象检测及图像分割等。
与生态系统内的合作伙伴通力协作,优化了充分利用英特尔深度学习加速技术的框架(TensorFlow*、PyTorch*、Caffe*、MXNet*和Paddle Paddle*)和应用,同时还可选择OpenVINO等增强型工具来简化部署。
支持革命性的英特尔® 傲腾™数据中心级持久内存,为英特尔以数据为中心的产品组合带来经济、大容量的持久内存模块。
通过将更多数据迁移到内存这一突破性创新,可帮助用户从自身数据中更快获得洞察,并通过在8路服务器系统中与传统DRAM进行结合,来提供高达36TB的系统级内存容量,与上一代英特尔®至强®可扩展处理器相比,系统内存容量可增加3倍。增加了多个硬件平台增强型安全特性,有助于构建更可靠的计算基础,包括直接内置于硬件中的侧通道防御。
第二波:50多款工作负载优化的英特尔至强处理器以及几十款与客户深度合作的定制处理器,一箩筐的节奏。
推出56核、12内存通道的英特尔® 至强®铂金9200处理器,提供业界领先的处理性能。旨在为各种高性能计算工作负载、AI应用以及高密度基础设施带来一流的性能和前所未有的DDR内存带宽。
全新推出网络优化型英特尔®至强®可扩展处理器,专为网络应用而设计。基于与通信服务提供商合作,旨在提供更大的用户容量,减少网络功能虚拟化(NFV)基础设施的瓶颈。
为实现卓越的边缘计算,并提供高安全性和存储解决方案,同时发布英特尔® 至强®D-1600处理器。这款高度集成的SoC系统专为功耗和空间受限但单核性能至关重要的环境而设计,有助于推动客户迈向5G,并将解决方案拓展到智能边缘。
还推出下一代10纳米FPGA,以支持边缘计算、网络(5G/NFV)和数据中心领域的突破性应用。英特尔Agilex™ FPGA系列将提供针对具体应用的优化与定制,为数据密集型基础设施带来前所未有的灵活性和敏捷性。
第三波:最新内存与存储解决方案
英特尔® 傲腾™数据中心级持久内存,为至强可扩展平台带来了突破性的存储级内存能力。
英特尔傲腾SSD DC D4800X (双端口) 兼具英特尔® 傲腾™DC SSD的优越性能和任务关键型高可用性企业IT应用所需的数据弹性,双端口功能通过为数据路径增添冗余,能够在发生故障、服务操作和升级时提供持续的数据访问。
英特尔SSD D5-P4326 (英特尔QLC 3D NAND) 是面向数据中心推出的第一款PCIe QLC NAND SSD系列的重要补充。产品系列采用64层QLC技术(4比特/单元),可为读取密集型云工作负载提供庞大且经济的存储容量。经过进一步成本优化的SSD D5-P4326,还能够加快温数据存储中用固态盘替换机械硬盘的进程。
第四波:以太网800适配器系列出出镜
从大型云服务提供商出发,英特尔以从1GbE到100GbE的服务器以太网产品组合满足客户的高速连接需求,并构成了全球各地的网络基础,迄今为止其以太网端口的出货量已突破13亿。
随着搭载应用程序设备队列(ADQ)技术的英特尔® 以太网800适配器系列的推出,在传输云、通信、存储以及企业细分市场上的海量数据的能力更加强大;ADQ技术在提高应用程序响应时间和可预测性的同时,还能减少应用延迟并提高吞吐量。
面对海量数据,企业亟需通过更加现代化、敏捷、高性能的IT基础设施来推进业务持续发展。英特尔公司数据中心事业部副总裁兼企业与政府事业部总经理Rajeeb Hazra基于此表示:“英特尔强大的以数据为中心的产品组合将更好地推动云计算、网络基础架构及智能边缘等领域的创新,并支持多种高成长性的工作负载,帮助企业实现更快数据传输、更强数据存储、更全数据处理,不断挖掘数据价值,助力企业发展和数字化转型。”
英特尔公司数据中心事业部副总裁兼企业与政府事业部总经理Rajeeb Hazra
在此次发布会上,来自25家合作伙伴的代表与英特尔嘉宾一道,还共同见证了这一重要时刻。其中包括亚信科技、天弘、思科、戴尔EMC、安擎、烽火通信、南大通用、新华三、海鑫科金、华勤通讯、华为、浪潮、英业达、联想、珑微系统、微软、宝德、云达科技、SAP、曙光、超微、清华同方、星环科技、VMware及中兴等企业。
英特尔和生态合作伙伴一起推出以数据为中心的产品组合
另外,来自上海交通大学、平安科技、百度、腾讯云、京东云、科大讯飞、中国电信、中国移动、大华科技和阿里云等用户代表相继上台,分享了基于英特尔以数据为中心产品和技术,在高性能计算、5G、云计算、人工智能、物联网等领域中的成功实践经验。
福利
扫描添加小编微信 color_ld,备注“姓名+公司职位”,加入【云计算学习交流群】,和志同道合的朋友们共同打卡学习!
推荐阅读:
OpenStack已死?恐怕你想多了 | 技术头条
30位90后霸榜! 福布斯: 比你年轻、比你有颜、比你有才华, 就是他们了!
极客头条
微软 CTO 韦青:“程序员 35 岁就被淘汰”是个伪概念 | 人物志
他曾主导世界上第一台安卓智能机, 如今能否靠区块链手机找回昔日的光荣?|人物志
移动开发或将被颠覆?
如何将TensorFlow Serving的性能提高超过70%?

一、题目描述——除自身以外数组的乘积
给你一个整数数组 nums
,返回 数组 answer
,其中 answer[i]
等于 nums
中除 nums[i]
之外其余各元素的乘积 。
题目数据 保证 数组 nums
之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。
请 不要使用除法, 且在 O(n)
时间复杂度内完成此题。
示例 1:
ini 代码解读复制代码输入: nums = [1,2,3,4]
输出: [24,12,8,6]
示例 2:
ini 代码解读复制代码输入: nums = [-1,1,0,-3,3]
输出: [0,0,9,0,0]
提示:
2 <= nums.length <= 105
-30 <= nums[i] <= 30
- 输入 保证 数组
answer[i]
在 32 位 整数范围内
进阶: 你可以在 O(1)
的额外空间复杂度内完成这个题目吗?( 出于对空间复杂度分析的目的,输出数组 不被视为 额外空间。)
二、题解(不用除法)
js 代码解读复制代码/**
* @param {number[]} nums
* @return {number[]}
*/
var productExceptSelf = function(nums) {
const n = nums.length;
const result = new Array(n).fill(1);
// 计算前缀乘积
let prefix = 1;
for (let i = 0; i < n; i++) {
result[i] = prefix; // result[i] 存储的是 nums[i] 之前所有元素的乘积。
prefix *= nums[i]; // prefix 更新为 nums[i] 之前所有元素(包括 nums[i])的乘积。
}
// 计算后缀乘积并与前缀乘积结合
let suffix = 1;
for (let i = n - 1; i >= 0; i--) {
result[i] *= suffix; // result[i] 现在是 nums[i] 之前所有元素的乘积 * nums[i] 之后所有元素的乘积,即题目所求。
suffix *= nums[i]; // suffix 更新为 nums[i] 之后所有元素(包括nums[i])的乘积.
}
return result;
};
核心思想
这个算法巧妙地利用了两次遍历,分别计算前缀乘积和后缀乘积,并将它们结合起来得到每个位置应有的结果。 由于不能使用除法,我们不能简单地计算所有元素的乘积再除以每个元素。 因此,该方法通过构建前缀和后缀乘积有效地绕过了除法操作。
详细步骤
-
初始化:
n = nums.length;
获取输入数组的长度。result = new Array(n).fill(1);
创建一个大小为n
的结果数组,并将其所有元素初始化为 1。 这是很关键的一步,所有元素的初始值必须为1,因为它将被用于累积乘积计算。
-
第一次遍历(计算前缀乘积):
-
prefix = 1;
初始化前缀乘积为 1。 -
for (let i = 0; i < n; i++) { ... }
从数组的开头到结尾进行遍历。result[i] = prefix;
将result[i]
设置为当前prefix
的值。 这里存储的是nums[0] * nums[1] * ... * nums[i-1]
的乘积。 也就是说,result[i]
存储的是nums[i]
之前的所有元素的乘积。如果i
是 0,那么result[0]
将保持为 1(因为nums[0]
之前没有元素)。prefix *= nums[i];
更新prefix
,使其包含到当前元素nums[i]
的乘积为止。 因此,prefix
始终保持着从nums[0]
到nums[i]
所有元素的乘积。
-
-
第二次遍历(计算后缀乘积,并与前缀乘积结合):
-
suffix = 1;
初始化后缀乘积为 1。 -
for (let i = n - 1; i >= 0; i--) { ... }
从数组的结尾到开头进行遍历。result[i] *= suffix;
将result[i]
乘以当前的suffix
值。 由于result[i]
已经包含了nums[i]
之前所有元素的乘积,而suffix
包含了nums[i]
之后所有元素的乘积,因此,result[i]
现在就包含了除了nums[i]
本身之外的所有元素的乘积。suffix *= nums[i];
更新suffix
,使其包含到当前元素nums[i]
的乘积为止。与计算前缀乘积类似,当前的suffix
始终保持着从nums[i]
到nums[n-1]
,所有元素的乘积。
-
-
返回结果:
return result;
返回包含所有结果的数组。
注意事项
- 数组初始化: 务必将
result
数组的所有元素初始化为 1。这是进行乘法累积操作的基础。 如果初始化为 0,那么最终结果的所有元素都将为 0。 - 遍历方向: 第一次遍历从前向后,第二次遍历从后向前,这是保证正确计算前缀和后缀乘积的关键。
- 变量更新顺序: 在每个循环中,先将当前的前缀(或后缀)乘积赋值给结果数组的相应位置,然后再更新前缀(或后缀)乘积。 如果顺序颠倒,结果将不正确。
- 0 的处理: 如果数组中包含 0,算法仍然可以正常工作。如果数组中只有一个 0,那么结果数组中只有对应于该 0 的位置上的元素是非零的,其他位置上的元素都将是 0。如果数组中包含多个 0,那么结果数组的所有元素都将是 0。 这个行为是符合题意的。
- 空间复杂度: 该算法的空间复杂度为 O(1),符合题目要求(输出数组不计入额外空间)。
- 时间复杂度: 该算法的时间复杂度为 O(n),因为需要对数组进行两次遍历。
三、结语
再见!
评论记录:
回复评论: