Fortran Coder

标题: 如何找出数组中的非零元素及其坐标 [打印本页]

作者: 山林悍匪    时间: 2015-11-16 15:59
标题: 如何找出数组中的非零元素及其坐标
本帖最后由 山林悍匪 于 2015-11-16 16:42 编辑

雪球老大,如果一个比很长的数组由0和非0元素组成,如果用do循环去找会比较慢,有没有什么快一点的办法能找出元素和元素的坐标呢?

作者: pasuka    时间: 2015-11-16 22:05
数组的元素是否唯一
唯一的话,排序先,然后二分法查找,最坏的情况就是元素在首尾两端
作者: 楚香饭    时间: 2015-11-16 22:11
排序应该比循环一次数组更费功夫吧?
作者: pasuka    时间: 2015-11-16 22:35
楚香饭 发表于 2015-11-16 22:11
排序应该比循环一次数组更费功夫吧?

排序也有很多种方法可以挑选
元素唯一又不想排序,还可以用哈希表,就是多占用点内存
除非就只查找1、2次,不然排序还是划算的
作者: 山林悍匪    时间: 2015-11-17 07:59
pasuka 发表于 2015-11-16 22:35
排序也有很多种方法可以挑选
元素唯一又不想排序,还可以用哈希表,就是多占用点内存
除非就只查找1、2次 ...

数组里面的元素由零和大于零的元素构成,每一个循环里面都要查找四个数组,这样的循环多的时候回达到上千次整个过程大量的时间花在了找这些元素的坐标上了
作者: pasuka    时间: 2015-11-17 09:00
山林悍匪 发表于 2015-11-17 07:59
数组里面的元素由零和大于零的元素构成,每一个循环里面都要查找四个数组,这样的循环多的时候回达到上千 ...

还是答非所问。。。
数组的元素是否唯一
数组里面的元素由零和大于零的元素构成

零元通常不会是查找目标,暂不计入,那么数组内大于零的元素是否唯一呢?
泛泛而谈,排序后再二分法查找是简便而有效的办法
作者: 山林悍匪    时间: 2015-11-17 09:20
pasuka 发表于 2015-11-17 09:00
还是答非所问。。。

您说的“唯一”是指数值相等吗?非零元素是大于零的互相数值不相等的浮点数
作者: kerb    时间: 2015-11-18 15:53
本帖最后由 kerb 于 2015-11-18 15:57 编辑

do循环也不是那么慢吧,
作者: fcode    时间: 2015-11-18 16:21
如果这个过程要循环做很多次,那么每次都循环遍历整个数组,确实就慢了。
根据情况选择哈希或排序。




欢迎光临 Fortran Coder (http://bbs.fcode.cn/) Powered by Discuz! X3.2