Czy istnieje skuteczny sposób na znalezienie m-tej najmniejszej liczby w wektorze o długości n w programie Matlab? Czy muszę używać funkcji sort()? Dziękuję i pozdrawiam!Znajdź najmniejszą liczbę w Matlab?
Odpowiedz
Edycja 2: Jak Eitan wskazał pierwszą część odpowiedzi nie rozwiązuje kwestię znalezienia najmniejszą wartość m-ty, ale w odniesieniu do elementu m-ty po wartości min. Reszta odpowiedzi pozostaje ... +1 za ostrość Eitana.
Podczas gdy
sort
jest prawdopodobnie bardzo skuteczny na początek, możesz spróbować sprawdzić, czy lepiej będzie uzyskać
find
. Na przykład:
id=find(X>min(X),m,'first');
id(end) % is the index of the smallest m-th element in X
funkcja find
ma zwiększyć funkcjonalność, która pozwala odnaleźć „pierwszy” lub „ostatnie” elementy, które spełniają pewne kryteria. Na przykład, jeśli chcesz znaleźć pierwsze n
elementy w tablicy X
mniej niż wartość y
użyć find(X<y,n,'first')
Ta operacja zatrzymuje się, jak tylko pierwszy element spełnienia warunku zostanie napotkany, który może doprowadzić do znacznych oszczędności czasu, jeśli tablica jest duża, a znaleziona wartość jest daleka od końca.
Chciałbym również, aby podsumować to, co powiedział już w @woodchips this SO discussion że jest dość istotne pytanie:
Najlepszym sposobem, aby przyspieszyć podstawowe algorytmy wbudowane, takie jak sortowanie jest uzyskanie szybszy sprzęt. Przyspieszy to również wszystko inne. MATLAB już to robi w wydajny sposób, wykorzystując wewnętrznie zoptymalizowany kod. Mówiąc to, może GPU dodatek może poprawić to zbyt ...
Edit: Na co warto, dodając do komentarza Muster, nie istnieje plik FEX nazywa nth_element że jest MEX okład z C++, który dostanie rozwiązanie w O(n)
czasu na to, czego potrzebujesz. (Podobny do tego, co @DDD wskazał)
Odnajduje pierwsze _m_ indeksy liczb, które są większe niż minimum, ale niekoniecznie zawierają one _m_-th najmniejszą liczbę, o co pyta się w pytaniu (może źle interpretuję to pytanie?) –
cóż, w mojej odpowiedzi 'id (koniec)' jest indeksem najmniejszego m-tego elementu w X. Przyjąłem, że przejście od tego do uzyskania wartości 'X (id (koniec)) jest oczywiste. – bla
Nie to miałem na myśli. Miałem na myśli, że _m_-th wartość w 'X', która jest większa niż' min (X) 'niekoniecznie jest _m_-th najmniejszą liczbą w' X'. Na przykład: weź 'm = 2' i' X = [9 9 1 2] '. Twoje rozwiązanie produkuje 9 i uważam, że poprawna odpowiedź to 2. –
Nie trzeba uporządkować listę numerów, aby wybrać M oceniają th najmniejsza liczba. Najmniejszą liczbę można znaleźć w czasie liniowym. np. jeśli w macierzy znajdują się elementy n
, można uzyskać rozwiązanie w czasie O(n)
za pomocą algorytmu wyboru i mediany mediany algorytmu.
Link jest do Wikipedii,
Jako rozwiązanie alternatywne, można postępować w ten sposób:
A = randi(100,4000,1);
A = sort(A,'ascend');
m = 5; % the 5 smallest numbers in array A
B = A(1:5);
Mam nadzieję, że to pomaga.
OP szukał alternatyw dla tej metody. –
@GuntherStruyf: OP zapytał: "czy muszę używać" sort "?" który nie implikuje bezpośrednio alternatywnych metod. – fpe
Imo to oznacza, że już wiedział, jak używać sortowania, co jest całkiem proste. –
- 1. Znajdź drugą najmniejszą liczbę na liście używając rekursji
- 2. Znajdź najmniejszą liczbę z listy Python i wydrukować pozycję
- 3. Znajdź najmniejszą spośród 3 liczb w C++
- 4. Znajdź najmniejszą liczbę utworzoną przez dwóch cyfr podzielna przez daną liczbę
- 5. Znajdź najmniejszą liczbę, która jest większa niż podana liczba w posortowanej liście
- 6. Znajdź najmniejszą i największą liczbę tablic z funkcją zmniejszenia w javascript
- 7. Znajdź najmniejszą unikalny podciąg dla każdej struny w tablicy
- 8. Znajdź najmniejszą potęgę 2 większą niż n w Pythonie
- 9. Znajdź najmniejszą podciąg zawierający dany zestaw liter w większym ciągiem
- 10. Jak znaleźć najmniejszą i największą liczbę w tablicy?
- 11. Znajdź liczbę kolumn w tabeli
- 12. Znajdź liczbę linii w ciągi
- 13. Znajdź liczbę plików w katalogu
- 14. Znajdź pierwsze zero w tablicy w Matlab
- 15. jak znaleźć najmniejszą liczbę operacji obliczyć x^n
- 16. znajdź dane między zakresami w matlab
- 17. PHP fgetcsv() - znajdź liczbę kolumn
- 18. Znajdź liczbę bajtów określonego hashu w Ruby
- 19. Znajdź liczbę powtórzonych podbarw w tablicy
- 20. znajdź wszystkie minimalne elementy dwuwymiarowej tablicy w Matlab
- 21. Znajdź kategorię MATLAB mlint ostrzeżenie ID
- 22. Znajdź liczbę 1s w tej samej pozycji w dwóch tablicach
- 23. Jak wybrać najmniejszą liczbę odważników, aby uzyskać całkowitą masę w czasie O (n)?
- 24. Znajdź elementy wektorowe pasujące do dwóch warunków w Matlab
- 25. Znajdź nieużywane zmienne i funkcje w projekcie MATLAB-Simulink
- 26. Jak połączyć liczbę z nazwą zmiennej w MATLAB?
- 27. znajdź liczbę z zakresu od 1 do 100, która ma najwięcej dzielników.
- 28. Uzyskaj najmniejszą wartość z tablicy w JavaScript?
- 29. C++ Znajdź liczbę elementów w zakresie od STL :: multimap
- 30. Znajdź maksymalną liczbę wierszy na grupę w Spark DataFrame
Zobacz KTHVALUE na temat wymiany plików matlab: http://www.mathworks.com/matlabcentral/fileexchange/23195. Zobacz także wybór Min/Max: http://www.mathworks.com/matlabcentral/fileexchange/23576 –
Nie jest to duplikat znajdowania wszystkich najmniejszych elementów. Zadanie to prawie zawsze wymaga sortowania, aby było wydajne, ale można to zrobić w liniowym czasie, zgodnie z poniższymi odpowiedziami. –