【问题标题】:Designing a wireless sensor algorithm设计无线传感器算法
【发布时间】:2021-03-25 04:41:03
【问题描述】:

所以我得到了一个包含 n >= 2 个整数的排序数组。这些整数用于表示无线传感器,每个传感器的广播半径为 2,这意味着如果我有一个数字“4”,它最多可以达到“2”或“6”。所以我需要设计一个算法,它返回一个数组,其中包含所有可以相互通信的传感器对(作为子数组),可能有一些中间传感器转发它们的消息,例如。鉴于数组中存在“10”,“8”能够与“12”通信。该算法还需要在 O(n^2) 时间内运行。

所以一开始很简单,我只需获取数组的长度 n,然后使用 while 循环 (i

【问题讨论】:

    标签: arrays algorithm sorting


    【解决方案1】:
    1. 对列表进行排序(花费O(NlogN) 时间)
    2. 开始遍历数组
    3. 查看当前元素是否可以与我们当前的集合进行通信。如果是,则将其添加到集合中并继续。否则,存储旧集合,创建一个新集合并将当前元素添加到其中。
    4. 对于每组,生成所有可以通信的传感器对。

    类似:

    def generate_pairs(array):
        pairs = []
        array_length = len(array)
        for i in range(0, array_length):
            for j in range(i+1, array_length):
                pairs.append([array[i],array[j]])
        return pairs
    
    main_list = [1,2,4,7,9,10,13]
    main_list.sort()
    curr_set = [main_list[0]]
    all_sets = []
    for i in range (1,len(main_list)):
        if main_list[i]-main_list[i-1] <=2:
            curr_set.append(main_list[i])
        else:
            all_sets.append(curr_set)
            curr_set = [main_list[i]]
    
    all_pairs = []
    for i in all_sets:
        all_pairs += generate_pairs(i)
    
    print(all_pairs)
    # prints [[1, 2], [1, 4], [2, 4], [7, 9], [7, 10], [9, 10]]
    

    【讨论】:

      猜你喜欢
      • 2020-05-29
      • 2021-07-18
      • 2013-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多