网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
06月29日漏签0天
python吧 关注:474,951贴子:1,969,847
  • 看贴

  • 图片

  • 吧主推荐

  • 视频

  • 游戏

  • 20回复贴,共1页
<<返回python吧
>0< 加载中...

请教一个决策问题

  • 只看楼主
  • 收藏

  • 回复
  • 贴吧用户_0UZAtNK
  • 白丁
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
有一个10*10大小的区域,每个1*1范围看成一个方格,一共100个方格,每个方格的属性存在0和1两种状态,现在以自身格子为中心,检测相邻8个格子属性(区域以外的统一视作1),一共是2^8=256种不同情况,在格子上对应显示不同图片,但是有的图片是一样的(看做执行相同操作),图片种类一共47种。
现在需要显示这个区域所有图片,我目前能想到的只有一个笨方法就是把自身格子周边8个格子检测一遍,if 256次,然后遍历100个格子,但是好像太费事了,请教一下大佬有没有更省事的方法代码长点没事,最主要目的是让做这个事的效率更高


  • 乱码lby
  • 榜眼
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
好像也没什么好办法,最多写得好看点


2025-06-29 23:48:03
广告
  • 我早忘了
  • 举人
    4
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
感觉没什么能优化的…非要说就是每次检测周围格子状态时可以暂存一下结果,遍历到后面的格子时可以直接用…


  • 贴吧用户_0UZAtNK
  • 白丁
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
现在有个思路,不知道从结果上能不能提高效率,就是调整一下if的前后顺序,按照图片种类来分类,比如说输出第一种图案的情况下,假设有16种情况,16种情况中有4种,左上角状态是1,那么就第一个检测左上角,按照数量降序检测下去。然后是输出第二种图案的情况,也和上面一样按降序的顺序检测,然后遍历100个格子。
这样做我担心有个问题就是这样是按输出分类来检测的,按上面的例子,检测完左上角以后,下一个检测的格子的前提是会输出第一种图案,有可能在不考虑输出第一种图案的情况,可能依次检测反而会更早达到检测结果。
从总的256种情况来说,因为总的可能性的数量是一致的,所以某些检测顺序会更早得出结果,有的则会更慢,总体来说会相互抵消,总时长反而不变,不知道想的对不对


  • 夏吸吸
  • 白丁
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
……这个从周围格子状态映射到47个图片到底是怎么个事?


  • 向前冲吖go
  • 白丁
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
这种问题多问问申请的 AI 插件呢
自己下载编辑器,jetbrains 家的或者 vscode ,然后装个 AI 插件,能给你提供代码建议,能在编辑器内无限追问,也可以自动补全,
插件用 百度家的 comate 吧,AI 界目前算是挺好的了,对中文理解的好,补全代码,注释功能非常强,所有功能免费 ing
官网地址:https://comate.baidu.com/?inviteCode=pp0u76rq


  • hitzsf
  • 探花
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
不知道具体情况, 搞不懂,
256个输入 转 47 输出:
8个格子里的值, 合成一个整数idx
47个输出弄出一些具有数字规律的命名, 或者想办法弄到一个256的数组,直接用idx引用


  • Lason•᷄ࡇ•᷅
  • 白丁
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
做个映射表得了,总共才8位256个取值


2025-06-29 23:42:03
广告
  • 君木乐
  • 白丁
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
不知道我理解到位没,有点像矩阵运算


  • 瓦妹
  • 探花
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
如果每个区域显示的图片,和周围8格的关系,用的规则是一样的话
你这个数据小,可以先把256个情况作为key和图片作为值存入字典,256次操作。然后100格分别遍历周围8格,把数值转化成key,从字典里提取。这样操作只有100x(8+转化key)。而你原本的是要100x256。其实这256每格你都在重复操作


  • 瓦妹
  • 探花
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
然后就是周围8格,还可以省。不过这个优化无所谓。你可以dp[row]和dp[col]。
比如你变成8x8的矩阵,第一行是
01001001。dp[1]=从第二位到最后一位1001001。dp[4]第5位到最后一位1001。那么怎么得到row[1,4]这三个的值呢?
dp[1]-dp[4]=1001001-01001=1000000。再右移本行长度8-4(来自dp[4])=4。得到100。
这样你分别对行列都dp一遍,100次预操作。
之后遍历100个格子的时候,你dp4次就能得到四边的情况,
和上面的方法合并,用这四边转化成key。就能再减少一半运行时


  • 瓦妹
  • 探花
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
上面这种还可以把二维的100格压成一维的,一个dp就行。如果你的index是i,那么你的上方三格为arr[i-1-10,i+2-10],左侧为i-1,右侧为i+1。下方三格为arr[i-1+10,i+2+10]。


  • \Firefly/
  • 白丁
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
1.用一个哈希表存储256到47的映射关系
-
2.记录前缀和,如第一行为0001110010,原数组a=0001110010=114,前缀和sum[4]=00011=3,sum[7]=00011100=28,
访问(x,y)位置时求x-1列和x+1列前缀和的差分:sum[x+1]-8*sum[x-2]即可得到上下两列的情况,第x列在上述u基础上去掉二进制中间的那一位(方法:(u>>1)|(u&1)),可将访问次数从8次变为6次,且可以利用simd变为2次
-
3.每个格子状态的检测是独立的,可并行


  • 贴吧用户_0UZAtNK
  • 白丁
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
谢谢各位大佬,听各位大佬的讲解,在检测周围8格状态这步有更高效的办法,我先试试, 遇到不懂的再请教各位大佬


2025-06-29 23:36:03
广告
  • 消失了的空白
  • 白丁
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
八个格子,检测八次,八个if语句,产生一个八位的二进制数字,把这个而二进制的数字转成十进制,这个十进制的数字就是你图片的序号。


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 20回复贴,共1页
<<返回python吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示