最近,一些大厂陆续放出了自己的AI模型,处于日常的使用和准确度,我通过一道试题来看一下文心一言、讯飞星火和通义千万的回答结果
本道题是一道很经典的算法题,请在滑动窗口中找出最大值
文心一言
- 第一次给出答案
package main
import "fmt"
func maxInWindows(nums []int, k int) []int {
if len(nums) < k {
return []int{}
}
win := make([]int, k)
copy(win, nums[:k])
for i := k; i < len(nums); i++ {
if win[0] < nums[i] {
win[0] = nums[i]
}
win = win[1:]
win = append(win, win[0])
}
return win
}
func main() {
nums := []int{1, 3, -1, -3, 5, 3, 6, 7}
k := 3
result := maxInWindows(nums, k)
fmt.Println(result) // Output: [3 3 5 5 6 7]
}
我运行结果如下,答案和执行结果并不匹配
它说自己写错了,又给了一个案列
package main
import "fmt"
func maxInWindows(nums []int, k int) []int {
if len(nums) < k {
return []int{}
}
win := make([]int, k)
copy(win, nums[:k])
for i := k; i < len(nums); i++ {
if win[k-1] < nums[i] {
win[k-1] = nums[i]
}
win = append(win[:k-1], win[1:]...)
}
return win
}
func main() {
nums := []int{1, 3, -1, -3, 5, 3, 6, 7}
k := 3
result := maxInWindows(nums, k)
fmt.Println(result) // Output: [3 3 5 5 6 7]
}
- 再次执行,还是不对
- 对不起,文心一言又错了,果断放弃
讯飞星火
给出代码如下,代码注释也是自动生成的
package main
import (
"fmt"
)
func maxInSlidingWindow(nums []int, k int) []int {
n := len(nums)
if n == 0 || k <= 0 {
return nil
}
result := make([]int, 0, n-k+1)
window := make([]int, 0, k)
for i := 0; i < n; i++ {
// 移除窗口最左边的元素
if len(window) > 0 && window[0] <= i-k {
window = window[1:]
}
// 从后往前找到第一个小于等于当前元素的位置,将该位置之前的元素全部移除
for len(window) > 0 && nums[window[len(window)-1]] <= nums[i] {
window = window[:len(window)-1]
}
// 将当前元素添加到窗口中
window = append(window, i)
// 当窗口大小达到k时,将窗口中的最大值添加到结果中
if i >= k-1 {
result = append(result, nums[window[0]])
}
}
return result
}
func main() {
nums := []int{1, 3, -1, -3, 5, 3, 6, 7}
k := 3
fmt.Println(maxInSlidingWindow(nums, k)) // 输出: [3, 3, 5, 5, 6, 7]
}
执行结果吻合
- 点击重新回答,给出和上次一致的代码
通义千问
- 连个代码一键复制都没有,先扣2分
package main
import (
"fmt"
)
func maxInSlidingWindow(nums []int, k int) []int {
if len(nums) == 0 || k == 0 {
return nil
}
res := make([]int, 0)
window := make([]int, k)
for i := 0; i < k; i++ {
for j := i; j >= 0 && nums[i] > window[j]; j-- {
window[j] = nums[i]
}
res = append(res, window[0])
}
for i := k; i < len(nums); i++ {
window = window[1:]
window = append(window, nums[i])
for j := 0; j < len(window)-1; j++ {
if window[j+1] > window[j] {
window[j], window[j+1] = window[j+1], window[j]
}
}
res = append(res, window[len(window)-1])
}
return res
}
func main() {
nums := []int{1, 3, -1, -3, 5, 3, 6, 7}
k := 3
fmt.Println(maxInSlidingWindow(nums, k))
}
- 从执行结果来看,代码是错误的,给出的代码算法复杂,还算错了,关键还很自信
- 再次给出代码
package main
import (
"fmt"
)
func maxInSlidingWindow(nums []int, k int) []int {
if len(nums) == 0 || k == 0 {
return nil
}
res := make([]int, 0)
window := make([]int, k)
var idx, winMax int
for i := 0; i < len(nums); i++ {
if idx != 0 {
idx--
window[idx] = nums[i]
} else {
winMax = nums[i]
}
for j := 0; j < k-1; j++ {
if window[j+1] > winMax {
winMax = window[j+1]
}
}
res = append(res, winMax)
}
return res
}
func main() {
nums := []int{1, 3, -1, -3, 5, 3, 6, 7}
k := 3
fmt.Println(maxInSlidingWindow(nums, k))
}
还是回答错了
汇总
准确度
讯飞星火给出的结果是准确的,这是一个AI模型的前提,否则的话,AI没有任何意义
功能性
- 讯飞星火
可以让用户有更多的选择,比如生成ppt,简历,图片等
- 文心一言
李彦宏没忘记自己是个商人,文心大模型3.5还没做好,已经放出了文心4.0的收费版本了,而且在插件方面,没有忘记给自己的旗下的产品引流。反正,别管好用不好用,打钱就对了。
- 通义千问
让我咋说呢,不想做,就别勉强了。