美文网首页
算法和数据结构1.1数据结构的定义

算法和数据结构1.1数据结构的定义

作者: 数字d | 来源:发表于2019-07-24 22:59 被阅读0次

数据结构决定了数据的顺序和位置关系
数据存储在计算机的内存中的时候,决定了数据顺序和位置关系的是“数据结构”

电话本的数据结构:

1.从上往下顺序添加:

举例来说:假设有个电话本,虽然说现在很多人吧电话存在手机里面,但是这里考虑到写在纸上的情况,每当我们得到了新的电话号码,就按照从上往下的顺序把他们记录在电话本上面。
假设我们想给其中的一个人打电话,但是因为数据都是按照获取顺序排列的,所以,在找这个具体号码时候,我们只能从头一个个往下找。如果电话本上的号码不多的话很快就能找到,但是如果存了很多号码,找起来就没那么容易了。

2.按照姓名的拼音顺序排列

如果按照联系人的姓名拼音顺序排列,那么数据都是有结构的,类似于字典类型。
使用这种方法存储,想要找到目标任务就轻松多了。通过姓名的拼音首字母就能推测出该数据大致位置。
而这种情况下,如果想要存储一个号码,如果需要插入一个号码到两个号码之间,那么就需要把后面的号码都执行“将本行内容写进下一行”,如果数据很多,那么就非常耗费时间

两种方法的优缺点:

总的来说:如果数据按照顺序排列,虽然添加数据很简单,但是查找数据很麻烦。
如果按照拼音顺序排列,虽然查询简单,但是添加数据比较麻烦

将号码获取顺序和拼音顺序结合起来使用:

先创建所有首字母的表从A-Z,然后在每个表中存储数据时候按照号码获取到的顺序来存储

这样做的结果是:添加新数据时候,找到对应的首字母,直接将数据添加到对应首字母的表的末尾,查询数据时候,也只需要到对应的表中查找即可

因为各个表中存储的数据依旧是没有规律的,所以查询时仍需从表头开始找起,但是比起来查询整个电话本来说要轻松

选择合适的数据结构以提高内存的利用率

数据结构的思路和电话本存储一样。将数据存入内存时候,根据使用目的的选择合适的数据结构,可以提高内存的利用率。

数据结构是呈线性排列的,但是我们可以使用指针等道具,构造出“数形”的复杂结构。

leetcode上有这么一道题求解两数之和。

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。

示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
根据题目来看,最快想到的解决方案就是暴力解法,嵌套两个for循环问题就解决了

   for(int i = 0;i < nums.count - 1; i ++){
              for(int j = i +1;j < nums.count; j ++){
                    sum = nums[i] + nums[j];
                    if(sum == target){
                          return [i,j];
              }
         }
     }

这样解决是可以正常满足题意的,但是算起来假设数组nums长度是n,那么解题所需要的时间复杂度约等于O(n^2).占用的复杂度约等于1.

leetcode上给出了一种使用哈希表的的思路。使用一层for循环来处理问题。

 Map<Integer, Integer> hashtable = new HashMap<Integer, Integer>();
        for (int i = 0; i < nums.length; ++i) {
            if (hashtable.containsKey(target - nums[i])) {
                return new int[]{hashtable.get(target - nums[i]), i};
            }
      //用nums下标i取出来的值nums[i]作为key,将当前下标i做为value存入hashtable中,hashtable.put(key,value)等待下一个for循环中使用。
            hashtable.put(nums[i], i);
        }

这样做的时间复杂度为O(n),空间复杂度也是O(n).

相关文章

网友评论

      本文标题:算法和数据结构1.1数据结构的定义

      本文链接:https://www.haomeiwen.com/subject/dceqrctx.html