簡體   English   中英

瓶頸C ++排序功能Wi-Fi信號

[英]bottleneck c++ sort functionWi-Fi signals

目前,我正在制作一個程序,使用RSSI估算WiFi設備的坐標。 該程序包含一個瓶頸。

我嘗試用其他函數替換字符串比較。 那沒有

完整功能:

std::list<std::list<wSignal*>> SignalGrouper::groupByMac (std::list<wSignal*> signals)
{
    std::list<std::list<wSignal*>> groupedSignals;
    std::list<wSignal*> doneSignals;
    for (std::list<wSignal*>::iterator it1=signals.begin(); it1 != signals.end(); ++it1) //take first signal
    {
        if(DoesSignalExist(doneSignals, *it1) == false) //check if signal is already been grouped
        {
            std::list<wSignal*> group;
            for (std::list<wSignal*>::iterator it2=signals.begin(); it2 != signals.end(); ++it2)
            {
                if(DoesSignalExist(doneSignals, *it2) == false)
                {
                    if(boost::iequals((*it2)->MAC, (*it1)->MAC))
                    {
                        group.push_back(*it2);
                        doneSignals.push_back(*it2);
                    }
                }
            }
            groupedSignals.push_back(group);
        }
    }
    return groupedSignals;
}

我也懷疑字符串比較是否是真正的問題。 但是,如果您堅持使用更快的方法來比較MAC字符串,則可以嘗試進行反向比較,因為前綴(OUI)是由IEEE提供給供應商的,因此對於同一供應商來說始終是相同的。

它是要返回的std :: list嗎? 否則,您可以使用以下std :: map減少迭代步驟:

std::map<MAC, std::list<wSignal*>> SignalGrouper::groupByMac (std::list<wSignal*> signals)
{
    std::map<MAC, std::list<wSignal*>> groupedSignals;
    for (std::list<wSignal*>::iterator it1 = signals.begin(); it1 != signals.end(); ++it1) //take first signal
    {
        std::map<MAC, std::list<wSignal*>>::iterator it2 = groupedSignals.find((*it1)->MAC);
        if(it2 != groupedSignals.end()) {
            it->second.push_back(*it1);
        } else {
            groupedSignals[(*it1)->MAC] = (*it1);
        }
    }
    return groupedSignals;
}

未經測試,但應該可以那樣工作。

嘗試

#include <boost/algorithm/string.hpp>

boost::equals((*it2)->MAC, (*it2)->MAC);

或不區分大小寫的比較

boost::iequals((*it2)->MAC, (*it2)->MAC);

不,沒有更快的方法直接比較兩個任意字符串。 內置方法是最快的方法。

而不是當前的O(n^2)算法,您可以先對MAC列表進行排序(例如,將它們放入std::vector然后使用std::sort )在O(n log n) ,然后運行在排序矢量單次迭代聚集在相鄰的相同的元件成組的列表(其為O(n)為的整體復雜性O(n log n) )。

如果將大量的MAC進行分組,則與嘗試優化單個線路相比,像這樣的算法復雜性變化可能會帶來更大的性能提升。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM