最近,一些大廠陸續放出了自己的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 mainimport ("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 := 3fmt.Println(maxInSlidingWindow(nums, k)) // 輸出: [3, 3, 5, 5, 6, 7]
}
執行結果吻合
- 點擊重新回答,給出和上次一致的代碼
通義千問
- 連個代碼一鍵復制都沒有,先扣2分
package mainimport ("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 := 3fmt.Println(maxInSlidingWindow(nums, k))
}
- 從執行結果來看,代碼是錯誤的,給出的代碼算法復雜,還算錯了,關鍵還很自信
- 再次給出代碼
package mainimport ("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 intfor 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 := 3fmt.Println(maxInSlidingWindow(nums, k))
}
還是回答錯了
匯總
準確度
訊飛星火給出的結果是準確的,這是一個AI模型的前提,否則的話,AI沒有任何意義
功能性
- 訊飛星火
可以讓用戶有更多的選擇,比如生成ppt,簡歷,圖片等
- 文心一言
李彥宏沒忘記自己是個商人,文心大模型3.5還沒做好,已經放出了文心4.0的收費版本了,而且在插件方面,沒有忘記給自己的旗下的產品引流。反正,別管好用不好用,打錢就對了。
- 通義千問
讓我咋說呢,不想做,就別勉強了。