文心一言 VS 讯飞星火 VS chatgpt (94)-- 算法导论9.2 3题
三、用go语言,给出 RANDOMIZED-SELECT的一个基于循环的版本。
文心一言:
在循环中实现 RANDOMIZED-SELECT 的一个版本可以如下所示。这个版本使用 Go 语言编写,利用随机化来选择一个元素,并在循环中不断地调整选择的元素,直到找到目标元素。
package main import ( "fmt" "math/rand" "time"
) func randomizedSelect(nums []int, target int) int { // 将随机数种子初始化为当前时间,以保证每次运行时的随机性 rand.Seed(time.Now().UnixNano()) // 初始的起始和结束索引 start, end := 0, len(nums)-1 for start <= end { // 随机选择一个索引 randomIndex := rand.Intn(end-start+1) + start // 如果选择的元素等于目标元素,返回该索引 if nums[randomIndex] == target { return randomIndex } else if nums[randomIndex] < target { // 如果选择的元素小于目标元素,将起始索引调整为随机索引的下一个位置 start = randomIndex + 1 } else { // 如果选择的元素大于目标元素,将结束索引调整为随机索引的前一个位置 end = randomIndex - 1 } } // 如果没有找到目标元素,返回 -1 表示未找到 return -1
} func main() { nums := []int{1, 3, 5, 7, 9, 11, 13, 15} target := 7 index := randomizedSelect(nums, target) if index != -1 { fmt.Printf("目标元素 %d 在数组中的索引为 %d\n", target, index) } else { fmt.Printf("目标元素 %d 不在数组中\n", target) }
}
这个代码示例定义了一个名为 randomizedSelect 的函数,它接受一个整数数组 nums 和一个目标整数 target 作为参数。函数使用循环和随机选择的方式来查找目标元素在数组中的位置。如果找到目标元素,函数返回其在数组中的索引;否则,返回 -1 表示未找到。在 main 函数中,我们调用 randomizedSelect 函数并输出结果。
讯飞星火:
首先,我们需要了解RANDOMIZED-SELECT算法。RANDOMIZED-SELECT是一种用于在线学习的数据选择方法,它通过随机抽样来选择训练样本,以提高算法的泛化能力。
下面是一个基于循环的RANDOMIZED-SELECT算法的Go语言实现:
package mainimport ("fmt""math/rand""time"
)func randomizedSelect(data [][]float64, k int) []float64 {rand.Seed(time.Now().UnixNano())selected := make([]float64, k)for i := range selected {j := rand.Intn(len(data))selected[i] = data[j][0]data = append(data[:j], data[j+1:]...)}return selected
}func main() {data := [][]float64{{1, 2},{3, 4},{5, 6},{7, 8},{9, 10},}k := 3selected := randomizedSelect(data, k)fmt.Println("Selected elements:", selected)fmt.Println("Remaining data:", data)
}
在这个实现中,我们首先定义了一个randomizedSelect
函数,它接受一个二维浮点数数组data
和一个整数k
作为输入参数。然后,我们使用rand.Seed
函数初始化随机数生成器,接着使用一个循环来随机选择k
个训练样本。在每次迭代中,我们随机选择一个数据点的索引j
,将该数据点添加到已选择的数组selected
中,并从原始数据数组data
中删除该数据点。最后,返回已选择的数据点数组。
在main
函数中,我们创建了一个示例数据集data
,并调用randomizedSelect
函数来选择3个训练样本。然后,我们打印出已选择的数据点和剩余的数据。
360智脑:
以下是一个基于循环的go语言版本的RANDOMIZED-SELECT:
package mainimport ("fmt""math/rand""sort"
)func main() {num := 10var results []intfor i := 0; i < num; i++ {rand.Seed(i)j := rand.Intn(num-i)results = append(results, i+j)}sort.Ints(results)fmt.Println(results)
}
这个程序生成了10个随机数,并将它们添加到一个名为results
的列表中。然后,使用sort.Ints()
函数按升序对结果进行排序,最后打印出结果。
智谱清言:
在 Go 语言中,可以使用 shuffle
包实现一个基于循环的随机选择算法。以下是一个简单的示例:
package main
import ( "fmt" "math/rand" "time""github.com/deckarep/shuffle"
)
func main() { // 创建一个包含 1 到 10 的切片 numbers := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}// 使用 shuffle 包对切片进行随机排序 shuffle.Seed(time.Now().UnixNano()) shuffle.Shuffle(len(numbers), func(i, j int) { numbers[i], numbers[j] = numbers[j], numbers[i] })// 遍历切片并输出随机选择的元素 for i := 0; i < len(numbers); i++ { fmt.Println(numbers[i]) }
}
这个示例首先创建了一个包含 1 到 10 的切片,然后使用 shuffle.Seed
设置随机数种子,接着使用 shuffle.Shuffle
对切片进行随机排序。最后遍历切片并输出随机选择的元素。
需要注意的是,这个示例依赖于 github.com/deckarep/shuffle
这个第三方包。在使用之前,请确保安装了这个包:
go get github.com/deckarep/shuffle
通义千问:
以下是一个基于循环的RANDOMIZED-SELECT的Go语言实现:
package mainimport ("fmt""math/rand""time"
)func randomizedSelect(arr []int, left, right, pivotIndex int) int {if left >= right {return -1}// 选择枢轴pivot := arr[pivotIndex]arr[pivotIndex], arr[right] = arr[right], arr[pivotIndex]// 将小于枢轴的元素放在左边,大于枢轴的元素放在右边storeIndex := leftfor i := left; i < right; i++ {if arr[i] < pivot {arr[i], arr[storeIndex] = arr[storeIndex], arr[i]storeIndex++}}// 将枢轴放在正确的位置arr[right], arr[storeIndex] = arr[storeIndex], arr[right]// 返回枢轴的索引return storeIndex
}func main() {rand.Seed(time.Now().UnixNano())arr := []int{4, 2, 1, 5, 3}fmt.Println("Original array:", arr)// 随机选择一个元素作为枢轴pivotIndex := rand.Intn(len(arr))// 使用随机选择的元素作为枢轴进行排序storeIndex := randomizedSelect(arr, 0, len(arr)-1, pivotIndex)fmt.Println("Sorted array:", arr[storeIndex:])
}
这个实现使用了随机选择一个元素作为枢轴的方法,而不是像快速排序那样总是选择第一个元素作为枢轴。这种方法可以减少最坏情况下的时间复杂度,从而提高算法的性能。
天工:
RANDOMIZED-SELECT是一种用于在数组中选择第k小元素的算法,它是基于快速排序算法的一种变体。循环版本的RANDOMIZED-SELECT可以通过迭代的方式实现。
以下是一个基于循环的go语言版本的RANDOMIZED-SELECT算法:
package mainimport ("fmt""math/rand"
)func randomizedSelect(arr []int, p, r, k int) int {for p < r {q := randomizedPartition(arr, p, r)if q == k-1 {return arr[q]} else if q > k-1 {r = q - 1} else {p = q + 1}}return arr[p]
}func randomizedPartition(arr []int, p, r int) int {i := rand.Intn(r-p+1) + parr[i], arr[r] = arr[r], arr[i]return partition(arr, p, r)
}func partition(arr []int, p, r int) int {x := arr[r]i := p - 1for j := p; j < r; j++ {if arr[j] <= x {i++arr[i], arr[j] = arr[j], arr[i]}}arr[i+1], arr[r] = arr[r], arr[i+1]return i + 1
}func main() {arr := []int{9, 5, 2, 7, 1, 10, 8}k := 3result := randomizedSelect(arr, 0, len(arr)-1, k)fmt.Printf("第%d小的元素是:%d\n", k, result)
}
这个算法首先通过randomizedPartition函数随机选择一个主元,然后根据主元的位置与k的关系,将数组划分为两部分。如果主元的位置正好是k-1,那么主元就是第k小的元素;如果主元的位置大于k-1,那么第k小的元素在主元的左侧;如果主元的位置小于k-1,那么第k小的元素在主元的右侧。根据这个划分的结果,不断缩小搜索范围,直到找到第k小的元素。
以上是基于循环的go语言版本的RANDOMIZED-SELECT算法的实现。希望对你有所帮助![7]
chatgpt:
以下是基于循环的RANDOMIZED-SELECT的Go语言版本:
package mainimport ("fmt""math/rand""time"
)func main() {// 测试例子arr := []int{1, 3, 5, 2, 4, 6}k := 3result := randomizedSelectLoop(arr, 0, len(arr)-1, k)fmt.Println("第", k, "小的元素是:", result)
}func randomizedSelectLoop(arr []int, p, r, k int) int {for p < r {q := randomizedPartition(arr, p, r)// 判断待搜索元素的位置if q-p+1 == k {return arr[q]} else if q-p+1 > k {r = q - 1} else {k = k - (q - p + 1)p = q + 1}}// 返回k位置上的元素return arr[p]
}func randomizedPartition(arr []int, p, r int) int {// 生成随机索引作为划分点rand.Seed(time.Now().UnixNano())randomIndex := rand.Intn(r-p+1) + parr[randomIndex], arr[r] = arr[r], arr[randomIndex]return partition(arr, p, r)
}func partition(arr []int, p, r int) int {x := arr[r] // 选取最后一个元素作为基准值i := p - 1for j := p; j < r; j++ {if arr[j] <= x {i++arr[i], arr[j] = arr[j], arr[i]}}arr[i+1], arr[r] = arr[r], arr[i+1]return i + 1
}
以上是RANDOMIZED-SELECT的基于循环的Go语言版本。在此示例中,我们使用随机选择划分点的方式进行划分,并在循环中根据待搜索元素的位置不断更新待搜索范围。最终,返回第k小的元素。
相关文章:

文心一言 VS 讯飞星火 VS chatgpt (94)-- 算法导论9.2 3题
三、用go语言,给出 RANDOMIZED-SELECT的一个基于循环的版本。 文心一言: 在循环中实现 RANDOMIZED-SELECT 的一个版本可以如下所示。这个版本使用 Go 语言编写,利用随机化来选择一个元素,并在循环中不断地调整选择的元素&#x…...

React中组件通信01——props
React中组件通信01——props 1. 父传子——props1.1 简单例子——props1.2 props 可以传递任何数据1.2.1 传递数字、对象等1.2.2 传递函数1.2.3 传递模版jsx 2. 子传父 子传子——props2.1 父传子——传递函数2.2 子传父——通过父传子的函数实现2.3 优化 子传子(…...

接口测试——接口协议抓包分析与mock_L1
目录: 接口测试价值与体系常见的接口协议接口测试用例设计postman基础使用postman实战练习 1.接口测试价值与体系 接口测试概念 接口:不同的系统之间相互连接的部分,是一个传递数据的通道接口测试:检查数据的交换、传递和控制…...

四种常用的自动化测试框架
一直想仔细研究框架,写个流水账似的测试程序不难,写个低维护成本的测试框架就很难了,所以研究多种测试框架还是很有必要的,知道孰优孰劣,才能在开始编写框架的时候打好基础,今天读到了KiKi Zhao的翻译文章&…...

Fuxploider:一款针对文件上传漏洞的安全检测与研究工具
Fuxploider:一款针对文件上传漏洞的安全检测与研究工具 1.概述2. 工具使用1.概述 Fuxploider是一款功能强大的开源渗透测试工具,该工具专门针对文件上传漏洞而设计,可以帮助广大研究人员以自动化的方式检测和利用目标站点文件上传表单中的安全问题 由于该工具基于Python 3…...

Unity 安装及运行MLAgents
1、下载ML-Agents 下载地址 GitHub - Unity-Technologies/ml-agents: The Unity Machine Learning Agents Toolkit (ML-Agents) is an open-source project that enables games and simulations to serve as environments for training intelligent agents using deep reinfo…...
LightDB-A 兼容oracle支持mod操作符
LightDB-A 兼容oracle支持mod操作符 LightDB-A 为了兼容oracle,从23.3版本开始支持mod操作符,其语义同 ‘%’ 操作符,使用案例如下: select 5 mod 2;?column? ----------1 (1 row)select 0 % 0; ERROR: division by zerosel…...

SpringMVC之自定义注解
目录 一、Java注解 1.1 注解简介 1.2 注解分类 1.3 JDK基本注解 1.4 JDK元注解 1.5 自定义注解 1.5.1 标记注解 1.5.2 元数据注解 1.6 如何自定义注解 二、自定义注解的基本案例 2.1 案例一(获取类、方法以及属性上的注解) 2.1.1 Ingerited的…...

QT:使用普通按钮、网格布局管理器、标签、行编辑器、水平布局管理器、垂直布局管理器做一个小项目
widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QPushButton> //普通按钮 #include <QGridLayout> //网格布局管理器 #include <QLabel> //标签 #include <QLineEdit> //行编辑器 #include <QHBoxLayo…...

【小沐学写作】程序员必备技能:在线协作文档汇总
文章目录 1、简介2、微软Office在线文档2.1 功能简介2.2 使用费用2.3 用户体验 3、石墨文档3.1 功能简介3.2 使用费用 4、腾讯文档4.1 功能简介4.2 使用费用 5、语雀5.1 功能简介5.2 使用费用 6、飞书6.1 功能简介6.2 使用费用 7、印象笔记7.1 功能简介7.2 使用费用 结语 1、简…...
「工具|数据接口」免费公开的REST API 如何借助github搭建自己的fake API接口
本文主要介绍日常开发、测试、教学或者分享中,可能遇到的模拟数据问题。分享免费开发的测试数据接口,以及如何利用github快速搭建定制化的接口数据,避免使用真实数据的风险以及自己现编数据的麻烦。 文章目录 一、场景说明二、免费公开的Fak…...

leetcode 18. 四数之和
给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] (若两个四元组元素一一对应,则认为两个四元组重复): 0 < a,…...
树上背包问题动态规划
目录 树状动态规划概述 示例 求解思路 树状动态规划概述 树状动态规划(Tree DP)是一种在树结构上进行动态规划的方法。在树状DP中,我们利用树的特殊结构性质,通过递归地向下更新子节点的状态,最终得到整个树的最…...

linux查看进程对应的线程(数)
首先,top或ps查看进程列表,确定要查看的进程pid,如下面40698 查看进程的线程情况 查看进程:top -p 40698 查看线程:top -p 40698 -d 3 -H 其中-d是刷新频率 可看到此进程共211个线程,运行中的是211个。…...
Python中的桌面应用开发库有哪些?
Python中有几个受欢迎的桌面应用开发库。以下是其中一些: Tkinter:这是Python的标准GUI库,它提供了构建简单的桌面应用程序的基本组件和功能。 PyQt:这是一个成熟的、功能强大的跨平台图形用户界面框架,它是Python绑定…...

【大数据】Neo4j 图数据库使用详解
目录 一、图数据库介绍 1.1 什么是图数据库 1.2 为什么需要图数据库 1.3 图数据库应用领域 二、图数据库Neo4j简介 2.1 Neo4j特性 2.2 Neo4j优点 三、Neo4j数据模型 3.1 图论基础 3.2 属性图模型 3.3 Neo4j的构建元素 3.3.1 节点 3.3.2 属性 3.3.3 关系 3.3.4 标…...

Windows11系统C盘用户文件夹下用户文件夹为中文,解决方案
说明: 1. 博主电脑为Windows11操作系统,亲测有效,修改后无任何影响,软件都可以正常运行! 2. Windows10系统还不知道可不可行,因为Windows11的计算机管理中没有本地用户和组,博主在csdn上看到很…...
Python正则表达式(re)
正则表达式,又称规则表达式,(Regular Expression,在代码中常简写为regex、regexp或RE),是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为…...

【PyTorch 08】如果要手动安装对应的包
例如有时候我们要下载 PyG ,但是需要手动下载,需要进行以下步骤: 网站链接:https://data.pyg.org/whl/ 首先查看当前安装好的Pytorch版本和对应的cuda版本 1. pip list:查看torch版本 2. torch.version.cuda…...

黑马JVM总结(十二)
(1)五种引用_强软弱 实线箭头表示强引用,虚心线表示软弱虚终结器引用 在平时我们用的引用,基本都为强引用 ,比如说创建一个对象通过运算符赋值给了一个变量,那么这个变量呢就强引用了刚刚的对象 强引用的…...

JavaSec-RCE
简介 RCE(Remote Code Execution),可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景:Groovy代码注入 Groovy是一种基于JVM的动态语言,语法简洁,支持闭包、动态类型和Java互操作性,…...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...
【Java学习笔记】Arrays类
Arrays 类 1. 导入包:import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序(自然排序和定制排序)Arrays.binarySearch()通过二分搜索法进行查找(前提:数组是…...
多场景 OkHttpClient 管理器 - Android 网络通信解决方案
下面是一个完整的 Android 实现,展示如何创建和管理多个 OkHttpClient 实例,分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...
《Playwright:微软的自动化测试工具详解》
Playwright 简介:声明内容来自网络,将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具,支持 Chrome、Firefox、Safari 等主流浏览器,提供多语言 API(Python、JavaScript、Java、.NET)。它的特点包括&a…...
Linux简单的操作
ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...
【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)
要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况,可以通过以下几种方式模拟或触发: 1. 增加CPU负载 运行大量计算密集型任务,例如: 使用多线程循环执行复杂计算(如数学运算、加密解密等)。运行图…...
《C++ 模板》
目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板,就像一个模具,里面可以将不同类型的材料做成一个形状,其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式:templa…...

面向无人机海岸带生态系统监测的语义分割基准数据集
描述:海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而,目前该领域仍面临一个挑战,即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...
Mysql8 忘记密码重置,以及问题解决
1.使用免密登录 找到配置MySQL文件,我的文件路径是/etc/mysql/my.cnf,有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...